Files
XCEngine/editor/CMakeLists.txt

499 lines
18 KiB
CMake

cmake_minimum_required(VERSION 3.15)
project(XCUIEditor VERSION 0.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
function(xcui_editor_apply_common_target_settings target visibility)
target_compile_definitions(${target} ${visibility}
UNICODE
_UNICODE
)
if(MSVC)
target_compile_options(${target} PRIVATE /utf-8 /FS)
set_property(TARGET ${target} PROPERTY
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
endif()
endfunction()
file(TO_CMAKE_PATH "${CMAKE_SOURCE_DIR}" XCENGINE_ROOT_DIR_CMAKE)
file(TO_CMAKE_PATH "${XCENGINE_MONO_ROOT_DIR}" XCENGINE_MONO_ROOT_DIR_CMAKE)
if(XCENGINE_BUILD_XCUI_EDITOR_APP AND
NOT XCENGINE_BUILD_XCUI_EDITOR_CORE)
message(FATAL_ERROR
"XCEditor requires XCEditorCore; set XCENGINE_BUILD_XCUI_EDITOR_CORE=ON")
endif()
if((XCENGINE_BUILD_XCUI_EDITOR_CORE OR XCENGINE_BUILD_XCUI_EDITOR_APP) AND
NOT XCENGINE_ENABLE_RENDERING_EDITOR_SUPPORT)
message(FATAL_ERROR
"XCEditorCore requires XCENGINE_ENABLE_RENDERING_EDITOR_SUPPORT=ON")
endif()
set(XCUI_EDITOR_FOUNDATION_SOURCES
src/UI/Foundation/UIEditorCommandDispatcher.cpp
src/UI/Foundation/UIEditorCommandRegistry.cpp
src/UI/Foundation/UIEditorRuntimeTrace.cpp
src/UI/Foundation/UIEditorShortcutManager.cpp
src/UI/Foundation/UIEditorTheme.cpp
)
set(XCUI_EDITOR_FIELD_SOURCES
src/UI/Fields/UIEditorAssetField.cpp
src/UI/Fields/UIEditorAssetFieldInteraction.cpp
src/UI/Fields/UIEditorBoolField.cpp
src/UI/Fields/UIEditorBoolFieldInteraction.cpp
src/UI/Fields/UIEditorColorField.cpp
src/UI/Fields/UIEditorColorFieldInteraction.cpp
src/UI/Fields/ColorFieldRendering.cpp
src/UI/Fields/UIEditorEditableFieldCore.cpp
src/UI/Fields/UIEditorEnumField.cpp
src/UI/Fields/UIEditorEnumFieldInteraction.cpp
src/UI/Fields/UIEditorFieldStyle.cpp
src/UI/Fields/UIEditorNumberField.cpp
src/UI/Fields/UIEditorNumberFieldInteraction.cpp
src/UI/Fields/UIEditorObjectField.cpp
src/UI/Fields/UIEditorObjectFieldInteraction.cpp
src/UI/Fields/UIEditorPropertyGrid.cpp
src/UI/Fields/UIEditorPropertyGridInteraction.cpp
src/UI/Fields/UIEditorTextField.cpp
src/UI/Fields/UIEditorTextFieldInteraction.cpp
src/UI/Fields/UIEditorVector2Field.cpp
src/UI/Fields/UIEditorVector2FieldInteraction.cpp
src/UI/Fields/UIEditorVector3Field.cpp
src/UI/Fields/UIEditorVector3FieldInteraction.cpp
src/UI/Fields/UIEditorVector4Field.cpp
src/UI/Fields/UIEditorVector4FieldInteraction.cpp
)
set(XCUI_EDITOR_COLLECTION_SOURCES
src/UI/Collections/UIEditorFilterableTreeHost.cpp
src/UI/Collections/UIEditorInlineRenameSession.cpp
src/UI/Collections/UIEditorListView.cpp
src/UI/Collections/UIEditorListViewInteraction.cpp
src/UI/Collections/UIEditorScrollView.cpp
src/UI/Collections/UIEditorScrollViewInteraction.cpp
src/UI/Collections/UIEditorTabStrip.cpp
src/UI/Collections/UIEditorTabStripInteraction.cpp
src/UI/Collections/UIEditorTreeView.cpp
src/UI/Collections/UIEditorTreeViewInteraction.cpp
)
set(XCUI_EDITOR_DOCKING_SOURCES
src/UI/Docking/DockHostMeasure.cpp
src/UI/Docking/UIEditorDockHost.cpp
src/UI/Docking/DockHostHitTest.cpp
src/UI/Docking/DockHostRendering.cpp
src/UI/Docking/UIEditorDockHostTransfer.cpp
src/UI/Docking/UIEditorDockHostInteraction.cpp
src/UI/Docking/DockHostInteractionHelpers.cpp
)
set(XCUI_EDITOR_MENU_SOURCES
src/UI/Menu/UIEditorMenuBar.cpp
src/UI/Menu/UIEditorMenuModel.cpp
src/UI/Menu/UIEditorMenuPopup.cpp
src/UI/Menu/UIEditorMenuPopupInteraction.cpp
src/UI/Menu/UIEditorMenuSession.cpp
)
set(XCUI_EDITOR_PANEL_SOURCES
src/UI/Panels/UIEditorPanelContentHost.cpp
src/UI/Panels/UIEditorPanelFrame.cpp
src/UI/Panels/UIEditorHostedPanelDispatch.cpp
src/UI/Panels/UIEditorPanelHostLifecycle.cpp
src/UI/Panels/UIEditorPanelRegistry.cpp
)
set(XCUI_EDITOR_SHELL_SOURCES
src/UI/Shell/UIEditorShellAsset.cpp
src/UI/Shell/UIEditorShellCapturePolicy.cpp
src/UI/Shell/UIEditorShellCompose.cpp
src/UI/Shell/UIEditorShellInteraction.cpp
src/UI/Shell/UIEditorStructuredShell.cpp
src/UI/Shell/UIEditorStatusBar.cpp
)
set(XCUI_EDITOR_VIEWPORT_SOURCES
src/UI/Viewport/UIEditorViewportInputBridge.cpp
src/UI/Viewport/UIEditorViewportShell.cpp
src/UI/Viewport/UIEditorViewportSlot.cpp
)
set(XCUI_EDITOR_WORKSPACE_SOURCES
src/UI/Workspace/UIEditorWorkspaceCompose.cpp
src/UI/Workspace/UIEditorWorkspaceController.cpp
src/UI/Workspace/UIEditorDetachedWindowPolicy.cpp
src/UI/Workspace/UIEditorWorkspaceInteraction.cpp
src/UI/Workspace/UIEditorWorkspaceInputOwner.cpp
src/UI/Workspace/UIEditorWorkspaceLayoutPersistence.cpp
src/UI/Workspace/UIEditorWorkspaceModel.cpp
src/UI/Workspace/SplitterDragCorrection/Chain.cpp
src/UI/Workspace/SplitterDragCorrection/Correction.cpp
src/UI/Workspace/UIEditorWorkspaceSession.cpp
src/UI/Workspace/UIEditorWorkspaceTransfer.cpp
src/UI/Workspace/UIEditorWindowWorkspaceController.cpp
src/UI/Workspace/UIEditorWindowWorkspaceModel.cpp
)
set(XCUI_EDITOR_WINDOWING_SOURCES
src/UI/Windowing/Presentation/EditorWindowPresentationPolicy.cpp
src/UI/Windowing/System/EditorWindowSynchronizationPlanner.cpp
src/UI/Windowing/System/EditorWindowSystem.cpp
)
set(XCUI_EDITOR_WIDGET_SUPPORT_SOURCES
src/UI/Widgets/UIEditorCollectionPrimitives.cpp
src/UI/Widgets/UIEditorColorUtils.cpp
src/UI/Widgets/UIEditorFieldRowLayout.cpp
)
set(XCUI_EDITOR_SHARED_SOURCES
${XCUI_EDITOR_FOUNDATION_SOURCES}
${XCUI_EDITOR_FIELD_SOURCES}
${XCUI_EDITOR_COLLECTION_SOURCES}
${XCUI_EDITOR_DOCKING_SOURCES}
${XCUI_EDITOR_MENU_SOURCES}
${XCUI_EDITOR_PANEL_SOURCES}
${XCUI_EDITOR_SHELL_SOURCES}
${XCUI_EDITOR_VIEWPORT_SOURCES}
${XCUI_EDITOR_WORKSPACE_SOURCES}
${XCUI_EDITOR_WINDOWING_SOURCES}
${XCUI_EDITOR_WIDGET_SUPPORT_SOURCES}
)
add_library(XCUIEditor STATIC
${XCUI_EDITOR_SHARED_SOURCES}
)
target_include_directories(XCUIEditor PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/engine/include
)
target_include_directories(XCUIEditor PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/src/UI
)
target_link_libraries(XCUIEditor PUBLIC
XCEngineUI
)
xcui_editor_apply_common_target_settings(XCUIEditor PUBLIC)
set(XCUI_EDITOR_APP_WINDOWING_SOURCES
src/Product/Runtime/Windowing/EditorWindowInstance.cpp
src/Product/Runtime/Windowing/EditorWindowManager.cpp
src/Product/Runtime/Windowing/Content/EditorWindowContentController.cpp
src/Product/Runtime/Windowing/Content/EditorWindowContentFactory.cpp
src/Product/Runtime/Windowing/Content/EditorUtilityWindowContentController.cpp
src/Product/Runtime/Windowing/Content/EditorWorkspaceWindowContentController.cpp
src/Product/Runtime/Windowing/Frame/EditorWindowFrameOrchestrator.cpp
src/Product/Runtime/Windowing/Runtime/EditorWindowRuntimeController.cpp
src/Product/Runtime/Windowing/Runtime/EditorWindowScreenshotController.cpp
src/Product/Runtime/Windowing/Workspace/EditorWorkspaceWindowInteractionController.cpp
src/Product/Runtime/Windowing/Workspace/EditorWorkspaceWindowSynchronizer.cpp
)
set(XCUI_EDITOR_HOST_PLATFORM_SOURCES
app/Host/Win32/Chrome/BorderlessWindowChrome.cpp
app/Host/Win32/Chrome/BorderlessWindowFrame.cpp
)
set(XCUI_EDITOR_HOST_RENDERING_SOURCES
app/Host/D3D12/D3D12EditorWindowRenderRuntime.cpp
app/Host/D3D12/D3D12HostDevice.cpp
app/Host/D3D12/D3D12WindowCapture.cpp
app/Host/D3D12/D3D12UiRenderer.cpp
app/Host/D3D12/D3D12UiTextSystem.cpp
app/Host/D3D12/D3D12UiTextureHost.cpp
app/Host/D3D12/D3D12ShaderResourceDescriptorAllocator.cpp
app/Host/D3D12/D3D12WindowRenderer.cpp
app/Host/D3D12/D3D12WindowSwapChainPresenter.cpp
app/Host/D3D12/D3D12WindowRenderLoop.cpp
)
if(XCENGINE_BUILD_XCUI_EDITOR_CORE)
set(XCUI_EDITOR_PRODUCT_FOUNDATION_SOURCES
src/Product/Commands/EditorCommand.cpp
src/Product/Effects/EditorEffect.cpp
src/Product/Runtime/Store/EditorStore.cpp
)
set(XCUI_EDITOR_APP_FRAMEWORK_SOURCES
src/Product/Framework/Workspace/EditorWorkspaceHostedContentSet.cpp
)
set(XCUI_EDITOR_APP_STATE_SOURCES
src/Product/State/EditorColorPickerToolState.cpp
src/Product/State/EditorSession.cpp
)
set(XCUI_EDITOR_APP_COMMAND_SOURCES
src/Product/Commands/EditorHostCommandBridge.cpp
)
set(XCUI_EDITOR_APP_REGISTRY_SOURCES
src/Product/Registry/EditorProductRegistry.cpp
)
set(XCUI_EDITOR_APP_FEATURE_REGISTRATION_SOURCES
src/Product/Features/Workspace/Console/ConsoleWorkspaceFeature.cpp
src/Product/Features/Workspace/Game/GameWorkspaceFeature.cpp
src/Product/Features/Workspace/Hierarchy/HierarchyWorkspaceFeature.cpp
src/Product/Features/Workspace/Inspector/InspectorWorkspaceFeature.cpp
src/Product/Features/Workspace/Project/ProjectWorkspaceFeature.cpp
src/Product/Features/Workspace/Scene/SceneWorkspaceFeature.cpp
src/Product/Features/Utility/AddComponent/AddComponentUtilityFeature.cpp
src/Product/Features/Utility/ColorPicker/ColorPickerUtilityFeature.cpp
)
set(XCUI_EDITOR_APP_RUNTIME_SOURCES
src/Product/Runtime/Features/EditorFeatureComposition.cpp
src/Product/Runtime/Shell/EditorShellAssetBuilder.cpp
src/Product/Runtime/EditorProductRuntime.cpp
src/Product/Runtime/Diagnostics/EditorFrameStatusController.cpp
src/Product/Runtime/Shell/EditorShellDefinitionService.cpp
src/Product/Runtime/Shell/EditorShellDrawComposer.cpp
src/Product/Runtime/Shell/EditorShellInteractionEngine.cpp
src/Product/Runtime/Shell/EditorShellRuntime.cpp
)
set(XCUI_EDITOR_APP_FEATURE_SOURCES
src/Product/Features/Workspace/Console/ConsolePanel.cpp
src/Product/Features/Utility/ColorPicker/ColorPickerPanel.cpp
src/Product/Features/Workspace/Game/GameViewportController.cpp
src/Product/Features/Workspace/Game/GameViewportFeature.cpp
src/Product/Features/Workspace/Hierarchy/HierarchyModel.cpp
src/Product/Features/Workspace/Hierarchy/HierarchyPanel.cpp
src/Product/Features/Utility/AddComponent/AddComponentPanel.cpp
src/Product/Features/Workspace/Inspector/InspectorPanel.cpp
src/Product/Features/Workspace/Inspector/InspectorPresentationModel.cpp
src/Product/Features/Workspace/Inspector/InspectorSubject.cpp
src/Product/Features/Workspace/Inspector/Components/InspectorBindingComponentEditor.cpp
src/Product/Features/Workspace/Inspector/Components/InspectorComponentEditorRegistry.cpp
src/Product/Features/Workspace/Inspector/Components/ScriptComponentInspectorComponentEditor.cpp
src/Product/Features/Workspace/Inspector/Components/TransformInspectorComponentEditor.cpp
src/Product/Features/Workspace/Project/ProjectPanel.cpp
src/Product/Features/Workspace/Scene/SceneViewportTransformGizmo.cpp
src/Product/Features/Workspace/Scene/SceneViewportTransformGizmoSupport.cpp
src/Product/Features/Workspace/Scene/SceneViewportSceneOverlay.cpp
src/Product/Features/Workspace/Scene/SceneEditCommandRoute.cpp
src/Product/Features/Workspace/Scene/SceneViewportFeature.cpp
src/Product/Features/Workspace/Scene/SceneViewportSession.cpp
src/Product/Features/Workspace/Scene/SceneViewportToolOverlay.cpp
src/Product/Features/Workspace/Scene/SceneViewportController.cpp
)
set(XCUI_EDITOR_APP_RENDERING_SOURCES
src/Product/Rendering/Assets/EditorIconServiceFactory.cpp
src/Product/Rendering/Assets/BuiltInIcons.cpp
src/Product/Rendering/Viewport/EditorViewportRuntimeServicesFactory.cpp
src/Product/Rendering/Viewport/GameViewportRenderService.cpp
src/Product/Rendering/Viewport/Passes/SceneViewportGridPass.cpp
src/Product/Rendering/Viewport/Passes/SceneViewportSelectionOutlinePass.cpp
src/Product/Rendering/Viewport/Passes/SceneViewportSelectedHelpersPass.cpp
src/Product/Rendering/Viewport/SceneViewportRenderPassBundle.cpp
src/Product/Rendering/Viewport/SceneViewportRenderService.cpp
src/Product/Rendering/Viewport/ViewportHostService.cpp
src/Product/Rendering/Viewport/ViewportRenderTargets.cpp
src/Product/Rendering/Viewport/ViewportRenderTargetUtils.cpp
)
set(XCUI_EDITOR_APP_SUPPORT_SOURCES
src/Product/Services/Engine/EngineEditorServices.cpp
src/Product/Services/Engine/EngineGameViewportBridge.cpp
src/Product/Services/Engine/EngineSceneViewportBridge.cpp
src/Product/Services/Scene/EngineEditorSceneBackend.cpp
src/Product/Services/Scene/EditorSceneRuntime.cpp
src/Product/Services/Runtime/EditorRuntimeCommandService.cpp
src/Product/Services/Runtime/EditorPlayModeRuntime.cpp
src/Product/Services/Runtime/EditorSceneDocumentRuntime.cpp
src/Product/Services/Runtime/EditorScriptingRuntimeService.cpp
src/Product/Services/Project/EditorProjectRuntime.cpp
src/Product/Services/Project/ProjectBrowserModel.cpp
)
if(XCENGINE_ENABLE_MONO_SCRIPTING)
list(APPEND XCUI_EDITOR_APP_SUPPORT_SOURCES
src/Product/Services/Runtime/EditorScriptAssemblyBuilder.cpp
)
endif()
set(XCUI_EDITOR_APP_CORE_SOURCES
${XCUI_EDITOR_PRODUCT_FOUNDATION_SOURCES}
${XCUI_EDITOR_APP_FRAMEWORK_SOURCES}
${XCUI_EDITOR_APP_STATE_SOURCES}
${XCUI_EDITOR_APP_COMMAND_SOURCES}
${XCUI_EDITOR_APP_REGISTRY_SOURCES}
${XCUI_EDITOR_APP_FEATURE_REGISTRATION_SOURCES}
${XCUI_EDITOR_APP_RUNTIME_SOURCES}
${XCUI_EDITOR_APP_FEATURE_SOURCES}
${XCUI_EDITOR_APP_SUPPORT_SOURCES}
)
set(XCUI_EDITOR_CORE_SOURCES
${XCUI_EDITOR_APP_WINDOWING_SOURCES}
${XCUI_EDITOR_APP_CORE_SOURCES}
)
add_library(XCEditorCore STATIC
${XCUI_EDITOR_CORE_SOURCES}
)
target_include_directories(XCEditorCore
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/engine/include
${CMAKE_SOURCE_DIR}/engine/third_party/stb
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
)
xcui_editor_apply_common_target_settings(XCEditorCore PUBLIC)
target_link_libraries(XCEditorCore PUBLIC
XCEngine
XCUIEditor
XCEngineRenderingEditorSupport
)
target_compile_definitions(XCEditorCore PRIVATE
XCENGINE_EDITOR_REPO_ROOT="${XCENGINE_ROOT_DIR_CMAKE}"
)
if(XCENGINE_ENABLE_MONO_SCRIPTING)
target_compile_definitions(XCEditorCore PRIVATE
XCENGINE_ENABLE_MONO_SCRIPTING
XCENGINE_EDITOR_MONO_ROOT_DIR="${XCENGINE_MONO_ROOT_DIR_CMAKE}"
)
if(TARGET xcengine_project_managed_assemblies)
add_dependencies(XCEditorCore xcengine_project_managed_assemblies)
endif()
endif()
add_library(XCEditorRendering STATIC
${XCUI_EDITOR_APP_RENDERING_SOURCES}
)
target_include_directories(XCEditorRendering
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/engine/include
${CMAKE_SOURCE_DIR}/engine/third_party/stb
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
)
xcui_editor_apply_common_target_settings(XCEditorRendering PUBLIC)
target_link_libraries(XCEditorRendering PUBLIC
XCEditorCore
XCEngine
XCUIEditor
XCEngineRenderingEditorSupport
)
endif()
if(XCENGINE_BUILD_XCUI_EDITOR_APP)
set(XCUI_EDITOR_APP_BOOTSTRAP_SOURCES
app/Bootstrap/EditorApp.rc
app/Bootstrap/main.cpp
app/Bootstrap/EditorCompositionRoot.cpp
app/Bootstrap/Application.cpp
)
set(XCUI_EDITOR_APP_PLATFORM_SOURCES
app/Host/Win32/Diagnostics/Win32CrashTrace.cpp
app/Host/Win32/Windowing/EditorWindow.cpp
app/Host/Win32/Windowing/EditorFloatingWindowPlacement.cpp
app/Host/Win32/Windowing/EditorWindowSession.cpp
app/Host/Win32/Chrome/EditorWindowChromeController.cpp
app/Host/Win32/Resources/Win32EditorResourceService.cpp
app/Host/Win32/Runtime/EditorWindowInputController.cpp
app/Host/Win32/System/Win32SystemInteractionHost.cpp
app/Host/Win32/Windowing/EditorWindowHostRuntime.cpp
app/Host/Win32/Windowing/EditorWindowMessageDispatcher.cpp
)
set(XCUI_EDITOR_APP_HOST_SOURCES
${XCUI_EDITOR_HOST_PLATFORM_SOURCES}
${XCUI_EDITOR_HOST_RENDERING_SOURCES}
${XCUI_EDITOR_APP_PLATFORM_SOURCES}
)
add_library(XCEditorHost STATIC
${XCUI_EDITOR_APP_HOST_SOURCES}
)
target_include_directories(XCEditorHost
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/engine/include
${CMAKE_SOURCE_DIR}/engine/third_party/stb
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/app/Bootstrap
${CMAKE_CURRENT_SOURCE_DIR}/app/Host/D3D12
${CMAKE_CURRENT_SOURCE_DIR}/app/Host/Win32
)
xcui_editor_apply_common_target_settings(XCEditorHost PUBLIC)
target_link_libraries(XCEditorHost PUBLIC
XCEditorCore
XCEditorRendering
d3d12.lib
d3dcompiler.lib
dbghelp.lib
dwrite.lib
dxgi.lib
windowscodecs.lib
)
add_executable(XCEditor WIN32
${XCUI_EDITOR_APP_BOOTSTRAP_SOURCES}
)
target_include_directories(XCEditor PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/app/Bootstrap
${CMAKE_CURRENT_SOURCE_DIR}/app/Host/Win32
${CMAKE_CURRENT_SOURCE_DIR}/app/Host/D3D12
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/engine/include
${CMAKE_SOURCE_DIR}/engine/third_party/stb
)
xcui_editor_apply_common_target_settings(XCEditor PRIVATE)
target_link_libraries(XCEditor PRIVATE
XCEditorCore
XCEditorRendering
XCEditorHost
)
set_target_properties(XCEditor PROPERTIES
OUTPUT_NAME "XCEngine"
)
if(WIN32 AND EXISTS "${CMAKE_SOURCE_DIR}/engine/third_party/assimp/bin/assimp-vc143-mt.dll")
add_custom_command(TARGET XCEditor POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_SOURCE_DIR}/engine/third_party/assimp/bin/assimp-vc143-mt.dll
$<TARGET_FILE_DIR:XCEditor>/assimp-vc143-mt.dll
)
endif()
if(WIN32 AND XCENGINE_ENABLE_PHYSX)
xcengine_copy_physx_runtime_dlls(XCEditor)
endif()
endif()