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) FetchContent_Declare( imgui GIT_REPOSITORY https://gitee.com/mirrors/imgui.git GIT_TAG docking GIT_SHALLOW TRUE ) FetchContent_MakeAvailable(imgui) if(NOT TARGET XCEngine) set(XCENGINE_VULKAN_SDK_HINT "$ENV{VULKAN_SDK}") if(NOT EXISTS "${XCENGINE_VULKAN_SDK_HINT}/Lib/vulkan-1.lib") file(GLOB XCENGINE_VULKAN_SDK_DIRS "D:/VulkanSDK/*") if(XCENGINE_VULKAN_SDK_DIRS) list(SORT XCENGINE_VULKAN_SDK_DIRS COMPARE NATURAL ORDER DESCENDING) list(GET XCENGINE_VULKAN_SDK_DIRS 0 XCENGINE_VULKAN_SDK_HINT) endif() endif() if(EXISTS "${XCENGINE_VULKAN_SDK_HINT}/Lib/vulkan-1.lib") set(Vulkan_ROOT "${XCENGINE_VULKAN_SDK_HINT}") list(APPEND CMAKE_PREFIX_PATH "${XCENGINE_VULKAN_SDK_HINT}") endif() find_package(Vulkan REQUIRED) add_library(XCEngine STATIC IMPORTED GLOBAL) set_target_properties(XCEngine PROPERTIES IMPORTED_CONFIGURATIONS "Debug;Release;RelWithDebInfo;MinSizeRel" IMPORTED_LOCATION_DEBUG "${XCENGINE_ENGINE_DIR}/build/Debug/XCEngine.lib" IMPORTED_LOCATION_RELEASE "${XCENGINE_ENGINE_DIR}/build/Release/XCEngine.lib" IMPORTED_LOCATION_RELWITHDEBINFO "${XCENGINE_ENGINE_DIR}/build/Release/XCEngine.lib" IMPORTED_LOCATION_MINSIZEREL "${XCENGINE_ENGINE_DIR}/build/Release/XCEngine.lib" INTERFACE_INCLUDE_DIRECTORIES "${XCENGINE_ENGINE_DIR}/include;${XCENGINE_ENGINE_DIR}/include/XCEngine;${XCENGINE_ENGINE_DIR}/src;${XCENGINE_ENGINE_DIR}/third_party;${XCENGINE_ENGINE_DIR}/third_party/GLAD/include;${XCENGINE_ENGINE_DIR}/third_party/stb;${XCENGINE_ENGINE_DIR}/third_party/assimp/include" INTERFACE_LINK_LIBRARIES "${XCENGINE_ASSIMP_LIB};opengl32;Vulkan::Vulkan") endif() 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/Theme.cpp src/Core/UndoManager.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/SceneViewportGrid.cpp src/Viewport/SceneViewportInfiniteGridPass.cpp src/Viewport/SceneViewportSelectionMaskPass.cpp src/Viewport/SceneViewportSelectionOutlinePass.cpp src/Viewport/SceneViewportOrientationGizmo.cpp src/Viewport/SceneViewportOverlayRenderer.cpp src/panels/GameViewPanel.cpp src/panels/InspectorPanel.cpp src/panels/ConsolePanel.cpp src/panels/ProjectPanel.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) target_compile_options(${PROJECT_NAME} PRIVATE /utf-8) if(MSVC) 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 )