cmake_minimum_required(VERSION 3.15) project(XCEditor VERSION 1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) get_filename_component(XCENGINE_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE) set(XCENGINE_ENGINE_DIR "${XCENGINE_ROOT_DIR}/engine") set(XCENGINE_ASSIMP_DLL "${XCENGINE_ENGINE_DIR}/third_party/assimp/bin/assimp-vc143-mt.dll") set(XCENGINE_ASSIMP_LIB "${XCENGINE_ENGINE_DIR}/third_party/assimp/lib/assimp-vc143-mt.lib") add_definitions(-DUNICODE -D_UNICODE) add_definitions(-DIMGUI_ENABLE_DOCKING) include(FetchContent) set(XCENGINE_SHARED_IMGUI_SOURCE_DIR "${XCENGINE_ROOT_DIR}/build/_deps/imgui-src") if(EXISTS "${XCENGINE_SHARED_IMGUI_SOURCE_DIR}/imgui.cpp") set(FETCHCONTENT_SOURCE_DIR_IMGUI "${XCENGINE_SHARED_IMGUI_SOURCE_DIR}") endif() FetchContent_Declare( imgui GIT_REPOSITORY https://gitee.com/mirrors/imgui.git GIT_TAG docking GIT_SHALLOW TRUE ) FetchContent_MakeAvailable(imgui) if(NOT TARGET XCEngine) option(XCENGINE_ENABLE_MONO_SCRIPTING "Build the Mono-based C# scripting runtime" ON) if(NOT DEFINED XCENGINE_MONO_ROOT_DIR OR XCENGINE_MONO_ROOT_DIR STREQUAL "") file(GLOB XCENGINE_MONO_ROOT_DIR_CANDIDATES "${XCENGINE_ROOT_DIR}/*/Fermion/Fermion/external/mono") if(XCENGINE_MONO_ROOT_DIR_CANDIDATES) list(GET XCENGINE_MONO_ROOT_DIR_CANDIDATES 0 XCENGINE_MONO_ROOT_DIR_DEFAULT) else() set(XCENGINE_MONO_ROOT_DIR_DEFAULT "${XCENGINE_ROOT_DIR}/managed/mono") endif() set( XCENGINE_MONO_ROOT_DIR "${XCENGINE_MONO_ROOT_DIR_DEFAULT}" CACHE PATH "Path to the bundled Mono distribution used by the scripting runtime") endif() add_subdirectory("${XCENGINE_ENGINE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/engine_dependency") endif() file(TO_CMAKE_PATH "${XCENGINE_ROOT_DIR}" XCENGINE_ROOT_DIR_CMAKE) file(TO_CMAKE_PATH "${XCENGINE_MONO_ROOT_DIR}" XCENGINE_MONO_ROOT_DIR_CMAKE) set(IMGUI_SOURCES ${imgui_SOURCE_DIR}/imgui.cpp ${imgui_SOURCE_DIR}/imgui_demo.cpp ${imgui_SOURCE_DIR}/imgui_draw.cpp ${imgui_SOURCE_DIR}/imgui_tables.cpp ${imgui_SOURCE_DIR}/imgui_widgets.cpp ${imgui_SOURCE_DIR}/backends/imgui_impl_win32.cpp ${imgui_SOURCE_DIR}/backends/imgui_impl_dx12.cpp ) add_executable(${PROJECT_NAME} WIN32 src/EditorApp.rc src/main.cpp src/Application.cpp src/Scripting/EditorScriptAssemblyBuilder.cpp src/Theme.cpp src/Core/UndoManager.cpp src/Core/PlaySessionController.cpp src/ComponentEditors/ComponentEditorRegistry.cpp src/Managers/SceneManager.cpp src/Managers/ProjectManager.cpp src/Core/EditorConsoleSink.cpp src/panels/Panel.cpp src/panels/MenuBar.cpp src/panels/HierarchyPanel.cpp src/panels/SceneViewPanel.cpp src/Viewport/SceneViewportPicker.cpp src/Viewport/SceneViewportMoveGizmo.cpp src/Viewport/SceneViewportRotateGizmo.cpp src/Viewport/SceneViewportScaleGizmo.cpp src/Viewport/SceneViewportHudOverlay.cpp src/Viewport/SceneViewportChrome.cpp src/Viewport/SceneViewportInteractionActions.cpp src/Viewport/SceneViewportInteractionResolver.cpp src/Viewport/SceneViewportTransformGizmoCoordinator.cpp src/Viewport/SceneViewportOrientationGizmo.cpp src/Viewport/SceneViewportOverlayBuilder.cpp src/Viewport/SceneViewportOverlayFrameCache.cpp src/Viewport/SceneViewportRenderPassBundle.cpp src/Viewport/SceneViewportOverlaySpriteResources.cpp src/Viewport/SceneViewportOverlayProviders.cpp src/Viewport/Passes/SceneViewportEditorOverlayPass.cpp src/Viewport/Passes/SceneViewportGridPass.cpp src/Viewport/Passes/SceneViewportSelectionOutlinePass.cpp src/panels/GameViewPanel.cpp src/panels/InspectorPanel.cpp src/panels/ConsolePanel.cpp src/panels/ProjectPanel.cpp src/panels/XCUIDemoPanel.cpp src/UI/BuiltInIcons.cpp src/Layers/EditorLayer.cpp ${IMGUI_SOURCES} ) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/src/Viewport ${imgui_SOURCE_DIR} ${imgui_SOURCE_DIR}/backends ) target_compile_definitions(${PROJECT_NAME} PRIVATE UNICODE _UNICODE XCENGINE_EDITOR_REPO_ROOT="${XCENGINE_ROOT_DIR_CMAKE}") target_compile_options(${PROJECT_NAME} PRIVATE /utf-8) if(XCENGINE_ENABLE_MONO_SCRIPTING) target_compile_definitions(${PROJECT_NAME} PRIVATE XCENGINE_ENABLE_MONO_SCRIPTING XCENGINE_EDITOR_REPO_ROOT="${XCENGINE_ROOT_DIR_CMAKE}" XCENGINE_EDITOR_MONO_ROOT_DIR="${XCENGINE_MONO_ROOT_DIR_CMAKE}") endif() if(MSVC) target_compile_options(${PROJECT_NAME} PRIVATE /FS) set_property(TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") endif() target_link_libraries(${PROJECT_NAME} PRIVATE XCEngine d3d12.lib Dbghelp.lib dxgi.lib d3dcompiler.lib Ole32.lib Shell32.lib Uuid.lib ) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "XCEngine" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin" ) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${XCENGINE_ASSIMP_DLL} $/assimp-vc143-mt.dll )