cmake_minimum_required(VERSION 3.15) if(MSVC AND POLICY CMP0141) cmake_policy(SET CMP0141 NEW) endif() project(XCNewEditor VERSION 0.1 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_definitions(-DUNICODE -D_UNICODE) set(XCENGINE_ROOT_DIR "") if(EXISTS "${CMAKE_SOURCE_DIR}/engine/CMakeLists.txt") set(XCENGINE_ROOT_DIR "${CMAKE_SOURCE_DIR}") elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../engine/CMakeLists.txt") set(XCENGINE_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..") else() message(FATAL_ERROR "Unable to locate XCEngine root directory from new_editor.") endif() if(NOT TARGET XCEngine) add_subdirectory(${XCENGINE_ROOT_DIR}/engine ${CMAKE_CURRENT_BINARY_DIR}/engine_dependency) endif() set(IMGUI_SOURCE_DIR "${CMAKE_BINARY_DIR}/_deps/imgui-src") if(NOT EXISTS "${IMGUI_SOURCE_DIR}/imgui.cpp") include(FetchContent) FetchContent_Declare( imgui_new_editor GIT_REPOSITORY https://gitee.com/mirrors/imgui.git GIT_TAG docking GIT_SHALLOW TRUE ) FetchContent_MakeAvailable(imgui_new_editor) set(IMGUI_SOURCE_DIR "${imgui_new_editor_SOURCE_DIR}") endif() if(NOT EXISTS "${IMGUI_SOURCE_DIR}/imgui.cpp") message(FATAL_ERROR "ImGui source was not found at ${IMGUI_SOURCE_DIR}.") endif() set(NEW_EDITOR_SOURCES src/main.cpp src/Application.cpp src/ApplicationLegacyImGui.cpp src/panels/Panel.cpp src/panels/XCUIDemoPanel.cpp src/panels/XCUILayoutLabPanel.cpp src/Rendering/MainWindowBackdropPass.cpp src/Rendering/MainWindowNativeBackdropRenderer.cpp src/XCUIBackend/ImGuiXCUIInputAdapter.cpp src/XCUIBackend/LegacyImGuiHostInterop.cpp src/XCUIBackend/ImGuiHostCompositor.cpp src/XCUIBackend/NativeWindowUICompositor.cpp src/XCUIBackend/XCUIEditorFontSetup.cpp src/XCUIBackend/XCUIAssetDocumentSource.cpp src/XCUIBackend/XCUIEditorCommandRouter.cpp src/XCUIBackend/XCUIInputBridge.cpp src/XCUIBackend/XCUIShellChromeState.cpp src/XCUIBackend/XCUIRHICommandCompiler.cpp src/XCUIBackend/XCUIRHIRenderBackend.cpp src/XCUIBackend/XCUIStandaloneTextAtlasProvider.cpp src/XCUIBackend/XCUIDemoRuntime.cpp src/XCUIBackend/XCUILayoutLabRuntime.cpp ${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 ${NEW_EDITOR_SOURCES}) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${XCENGINE_ROOT_DIR}/engine/include ${XCENGINE_ROOT_DIR}/editor/src ${IMGUI_SOURCE_DIR} ${IMGUI_SOURCE_DIR}/backends ) file(TO_CMAKE_PATH "${XCENGINE_ROOT_DIR}" XCENGINE_ROOT_DIR_CMAKE) target_compile_definitions(${PROJECT_NAME} PRIVATE UNICODE _UNICODE XCENGINE_NEW_EDITOR_REPO_ROOT="${XCENGINE_ROOT_DIR_CMAKE}" ) target_compile_options(${PROJECT_NAME} PRIVATE /utf-8) if(MSVC) target_compile_options(${PROJECT_NAME} PRIVATE /FS) target_link_options(${PROJECT_NAME} PRIVATE $<$:/INCREMENTAL:NO>) set_property(TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") set_target_properties(${PROJECT_NAME} PROPERTIES MSVC_DEBUG_INFORMATION_FORMAT "$<$:Embedded>" COMPILE_PDB_NAME "XCNewEditor-compile" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/new_editor/compile-pdb" COMPILE_PDB_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/new_editor/compile-pdb/Debug" COMPILE_PDB_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/new_editor/compile-pdb/Release" COMPILE_PDB_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_BINARY_DIR}/new_editor/compile-pdb/MinSizeRel" COMPILE_PDB_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/new_editor/compile-pdb/RelWithDebInfo" VS_GLOBAL_UseMultiToolTask "false" ) endif() target_link_libraries(${PROJECT_NAME} PRIVATE XCEngine d3d12.lib dxgi.lib user32 gdi32 ) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "XCNewEditor" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/new_editor/bin" PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/new_editor/bin" VS_DEBUGGER_WORKING_DIRECTORY "${XCENGINE_ROOT_DIR}" )