401 lines
12 KiB
CMake
401 lines
12 KiB
CMake
cmake_minimum_required(VERSION 3.26)
|
||
|
||
project(MetaCore
|
||
VERSION 1.0.0
|
||
DESCRIPTION "MetaCore Panda3D-based Unity-like editor prototype"
|
||
LANGUAGES CXX
|
||
)
|
||
|
||
set(CMAKE_CXX_STANDARD 20)
|
||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||
|
||
if(MSVC)
|
||
# Debug 使用调试运行库,Release 使用可分发运行库,避免不同配置之间的 CRT 冲突。
|
||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
|
||
endif()
|
||
|
||
option(METACORE_BUILD_TESTS "Build MetaCore tests" ON)
|
||
option(METACORE_AUTO_PREPARE_PANDA3D "Automatically prepare Panda3D SDK during configure" ON)
|
||
|
||
list(PREPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
||
|
||
if(EXISTS "${CMAKE_SOURCE_DIR}/vcpkg_installed/x64-windows/share/imgui/imgui-config.cmake")
|
||
list(PREPEND CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/vcpkg_installed/x64-windows")
|
||
endif()
|
||
|
||
include(MetaCorePanda3D)
|
||
metacore_prepare_panda3d()
|
||
|
||
find_package(glm CONFIG REQUIRED)
|
||
find_package(imgui CONFIG REQUIRED)
|
||
|
||
set(METACORE_COMMON_WARNINGS)
|
||
if(MSVC)
|
||
set(METACORE_COMMON_WARNINGS /W4 /permissive- /EHsc)
|
||
else()
|
||
set(METACORE_COMMON_WARNINGS -Wall -Wextra -Wpedantic)
|
||
endif()
|
||
|
||
add_executable(MetaCoreHeaderTool
|
||
Tools/MetaCoreHeaderTool/main.cpp
|
||
)
|
||
|
||
target_compile_options(MetaCoreHeaderTool PRIVATE ${METACORE_COMMON_WARNINGS})
|
||
|
||
add_executable(MetaCoreRuntimeConfigTool
|
||
Tools/MetaCoreRuntimeConfigTool/main.cpp
|
||
)
|
||
|
||
target_compile_options(MetaCoreRuntimeConfigTool PRIVATE ${METACORE_COMMON_WARNINGS})
|
||
|
||
add_executable(MetaCoreTcpSenderTool
|
||
Tools/MetaCoreTcpSenderTool/main.cpp
|
||
)
|
||
|
||
target_compile_options(MetaCoreTcpSenderTool PRIVATE ${METACORE_COMMON_WARNINGS})
|
||
target_link_libraries(MetaCoreTcpSenderTool PRIVATE ws2_32)
|
||
|
||
function(metacore_generate_reflection module_name function_name output_var)
|
||
set(generated_headers ${ARGN})
|
||
set(absolute_headers)
|
||
foreach(header IN LISTS generated_headers)
|
||
list(APPEND absolute_headers "${CMAKE_SOURCE_DIR}/${header}")
|
||
endforeach()
|
||
|
||
set(generated_cpp "${CMAKE_BINARY_DIR}/Generated/${module_name}/${module_name}GeneratedReflection.cpp")
|
||
add_custom_command(
|
||
OUTPUT "${generated_cpp}"
|
||
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/Generated/${module_name}"
|
||
COMMAND $<TARGET_FILE:MetaCoreHeaderTool>
|
||
--output "${generated_cpp}"
|
||
--function "${function_name}"
|
||
--module "${module_name}"
|
||
${absolute_headers}
|
||
DEPENDS
|
||
MetaCoreHeaderTool
|
||
${absolute_headers}
|
||
VERBATIM
|
||
)
|
||
|
||
set(${output_var} "${generated_cpp}" PARENT_SCOPE)
|
||
endfunction()
|
||
|
||
set(METACORE_FOUNDATION_HEADERS
|
||
Source/MetaCoreFoundation/Public/MetaCoreFoundation/MetaCoreArchive.h
|
||
Source/MetaCoreFoundation/Public/MetaCoreFoundation/MetaCoreAssetGuid.h
|
||
Source/MetaCoreFoundation/Public/MetaCoreFoundation/MetaCoreGeneratedReflection.h
|
||
Source/MetaCoreFoundation/Public/MetaCoreFoundation/MetaCoreHash.h
|
||
Source/MetaCoreFoundation/Public/MetaCoreFoundation/MetaCoreId.h
|
||
Source/MetaCoreFoundation/Public/MetaCoreFoundation/MetaCoreLogService.h
|
||
Source/MetaCoreFoundation/Public/MetaCoreFoundation/MetaCorePackage.h
|
||
Source/MetaCoreFoundation/Public/MetaCoreFoundation/MetaCoreReflection.h
|
||
)
|
||
|
||
set(METACORE_FOUNDATION_SOURCES
|
||
Source/MetaCoreFoundation/Private/MetaCoreArchive.cpp
|
||
Source/MetaCoreFoundation/Private/MetaCoreAssetGuid.cpp
|
||
Source/MetaCoreFoundation/Private/MetaCoreHash.cpp
|
||
Source/MetaCoreFoundation/Private/MetaCoreId.cpp
|
||
Source/MetaCoreFoundation/Private/MetaCoreLogService.cpp
|
||
Source/MetaCoreFoundation/Private/MetaCorePackage.cpp
|
||
Source/MetaCoreFoundation/Private/MetaCoreReflection.cpp
|
||
)
|
||
|
||
metacore_generate_reflection(
|
||
Foundation
|
||
MetaCoreRegisterFoundationGeneratedTypes
|
||
METACORE_FOUNDATION_GENERATED_SOURCE
|
||
Source/MetaCoreFoundation/Public/MetaCoreFoundation/MetaCoreAssetGuid.h
|
||
Source/MetaCoreFoundation/Public/MetaCoreFoundation/MetaCorePackage.h
|
||
)
|
||
|
||
add_library(MetaCoreFoundation STATIC
|
||
${METACORE_FOUNDATION_HEADERS}
|
||
${METACORE_FOUNDATION_SOURCES}
|
||
${METACORE_FOUNDATION_GENERATED_SOURCE}
|
||
)
|
||
|
||
target_include_directories(MetaCoreFoundation
|
||
PUBLIC
|
||
Source/MetaCoreFoundation/Public
|
||
)
|
||
|
||
target_link_libraries(MetaCoreFoundation
|
||
PUBLIC
|
||
glm::glm
|
||
)
|
||
|
||
target_compile_options(MetaCoreFoundation PRIVATE ${METACORE_COMMON_WARNINGS})
|
||
|
||
set(METACORE_PLATFORM_HEADERS
|
||
Source/MetaCorePlatform/Public/MetaCorePlatform/MetaCoreInput.h
|
||
Source/MetaCorePlatform/Public/MetaCorePlatform/MetaCoreWindow.h
|
||
)
|
||
|
||
set(METACORE_PLATFORM_SOURCES
|
||
Source/MetaCorePlatform/Private/MetaCoreInput.cpp
|
||
Source/MetaCorePlatform/Private/MetaCoreWindow.cpp
|
||
)
|
||
|
||
add_library(MetaCorePlatform STATIC
|
||
${METACORE_PLATFORM_HEADERS}
|
||
${METACORE_PLATFORM_SOURCES}
|
||
)
|
||
|
||
target_include_directories(MetaCorePlatform
|
||
PUBLIC
|
||
Source/MetaCorePlatform/Public
|
||
)
|
||
|
||
target_link_libraries(MetaCorePlatform
|
||
PUBLIC
|
||
MetaCoreFoundation
|
||
MetaCorePanda3D::SDK
|
||
glm::glm
|
||
)
|
||
|
||
target_compile_options(MetaCorePlatform PRIVATE ${METACORE_COMMON_WARNINGS})
|
||
target_compile_definitions(MetaCorePlatform PRIVATE WIN32_LEAN_AND_MEAN NOMINMAX)
|
||
|
||
set(METACORE_SCENE_HEADERS
|
||
Source/MetaCoreScene/Public/MetaCoreScene/MetaCoreComponents.h
|
||
Source/MetaCoreScene/Public/MetaCoreScene/MetaCoreGameObject.h
|
||
Source/MetaCoreScene/Public/MetaCoreScene/MetaCoreSceneDocument.h
|
||
Source/MetaCoreScene/Public/MetaCoreScene/MetaCoreScenePackage.h
|
||
Source/MetaCoreScene/Public/MetaCoreScene/MetaCoreScene.h
|
||
)
|
||
|
||
set(METACORE_SCENE_SOURCES
|
||
Source/MetaCoreScene/Private/MetaCoreScenePackage.cpp
|
||
Source/MetaCoreScene/Private/MetaCoreScene.cpp
|
||
)
|
||
|
||
metacore_generate_reflection(
|
||
Scene
|
||
MetaCoreRegisterSceneGeneratedTypes
|
||
METACORE_SCENE_GENERATED_SOURCE
|
||
Source/MetaCoreScene/Public/MetaCoreScene/MetaCoreComponents.h
|
||
Source/MetaCoreScene/Public/MetaCoreScene/MetaCoreGameObject.h
|
||
Source/MetaCoreScene/Public/MetaCoreScene/MetaCoreSceneDocument.h
|
||
Source/MetaCoreScene/Public/MetaCoreScene/MetaCoreScene.h
|
||
)
|
||
|
||
add_library(MetaCoreScene STATIC
|
||
${METACORE_SCENE_HEADERS}
|
||
${METACORE_SCENE_SOURCES}
|
||
${METACORE_SCENE_GENERATED_SOURCE}
|
||
)
|
||
|
||
target_include_directories(MetaCoreScene
|
||
PUBLIC
|
||
Source/MetaCoreScene/Public
|
||
)
|
||
|
||
target_link_libraries(MetaCoreScene
|
||
PUBLIC
|
||
MetaCoreFoundation
|
||
glm::glm
|
||
)
|
||
|
||
target_compile_options(MetaCoreScene PRIVATE ${METACORE_COMMON_WARNINGS})
|
||
|
||
set(METACORE_RENDER_HEADERS
|
||
Source/MetaCoreRender/Public/MetaCoreRender/MetaCoreEditorViewportRenderer.h
|
||
Source/MetaCoreRender/Public/MetaCoreRender/MetaCorePandaSceneBridge.h
|
||
Source/MetaCoreRender/Public/MetaCoreRender/MetaCoreRenderDevice.h
|
||
Source/MetaCoreRender/Public/MetaCoreRender/MetaCoreRenderTypes.h
|
||
)
|
||
|
||
set(METACORE_RENDER_SOURCES
|
||
Source/MetaCoreRender/Private/MetaCoreEditorViewportRenderer.cpp
|
||
Source/MetaCoreRender/Private/MetaCorePandaSceneBridge.cpp
|
||
Source/MetaCoreRender/Private/MetaCoreRenderDevice.cpp
|
||
)
|
||
|
||
add_library(MetaCoreRender STATIC
|
||
${METACORE_RENDER_HEADERS}
|
||
${METACORE_RENDER_SOURCES}
|
||
)
|
||
|
||
target_include_directories(MetaCoreRender
|
||
PUBLIC
|
||
Source/MetaCoreRender/Public
|
||
)
|
||
|
||
target_link_libraries(MetaCoreRender
|
||
PUBLIC
|
||
MetaCoreFoundation
|
||
MetaCorePlatform
|
||
MetaCoreScene
|
||
MetaCorePanda3D::SDK
|
||
glm::glm
|
||
)
|
||
|
||
target_compile_options(MetaCoreRender PRIVATE ${METACORE_COMMON_WARNINGS})
|
||
|
||
set(METACORE_RUNTIME_DATA_HEADERS
|
||
Source/MetaCoreRuntimeData/Public/MetaCoreRuntimeData/MetaCoreRuntimeDataDispatcher.h
|
||
Source/MetaCoreRuntimeData/Public/MetaCoreRuntimeData/MetaCoreRuntimeDataProject.h
|
||
Source/MetaCoreRuntimeData/Public/MetaCoreRuntimeData/MetaCoreRuntimeDataSource.h
|
||
Source/MetaCoreRuntimeData/Public/MetaCoreRuntimeData/MetaCoreRuntimeDataTypes.h
|
||
)
|
||
|
||
set(METACORE_RUNTIME_DATA_SOURCES
|
||
Source/MetaCoreRuntimeData/Private/MetaCoreRuntimeDataDispatcher.cpp
|
||
Source/MetaCoreRuntimeData/Private/MetaCoreRuntimeDataProject.cpp
|
||
Source/MetaCoreRuntimeData/Private/MetaCoreRuntimeDataSource.cpp
|
||
)
|
||
|
||
metacore_generate_reflection(
|
||
RuntimeData
|
||
MetaCoreRegisterRuntimeDataGeneratedTypes
|
||
METACORE_RUNTIME_DATA_GENERATED_SOURCE
|
||
Source/MetaCoreRuntimeData/Public/MetaCoreRuntimeData/MetaCoreRuntimeDataProject.h
|
||
Source/MetaCoreRuntimeData/Public/MetaCoreRuntimeData/MetaCoreRuntimeDataTypes.h
|
||
)
|
||
|
||
add_library(MetaCoreRuntimeData STATIC
|
||
${METACORE_RUNTIME_DATA_HEADERS}
|
||
${METACORE_RUNTIME_DATA_SOURCES}
|
||
${METACORE_RUNTIME_DATA_GENERATED_SOURCE}
|
||
)
|
||
|
||
target_include_directories(MetaCoreRuntimeData
|
||
PUBLIC
|
||
Source/MetaCoreRuntimeData/Public
|
||
)
|
||
|
||
target_link_libraries(MetaCoreRuntimeData
|
||
PUBLIC
|
||
MetaCoreFoundation
|
||
MetaCoreScene
|
||
glm::glm
|
||
PRIVATE
|
||
ws2_32
|
||
)
|
||
|
||
target_compile_options(MetaCoreRuntimeData PRIVATE ${METACORE_COMMON_WARNINGS})
|
||
|
||
target_link_libraries(MetaCoreRuntimeConfigTool
|
||
PRIVATE
|
||
MetaCoreFoundation
|
||
MetaCoreRuntimeData
|
||
MetaCoreScene
|
||
)
|
||
|
||
set(METACORE_EDITOR_HEADERS
|
||
Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreBuiltinModules.h
|
||
Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorApp.h
|
||
Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorAssetTypes.h
|
||
Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorCommandService.h
|
||
Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorContext.h
|
||
Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorModule.h
|
||
Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorServices.h
|
||
Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreSceneInteractionService.h
|
||
)
|
||
|
||
set(METACORE_EDITOR_PRIVATE_HEADERS
|
||
Source/MetaCoreEditor/Private/MetaCoreBuiltinEditorModule.h
|
||
Source/MetaCoreEditor/Private/MetaCoreEditorCameraController.h
|
||
third_party/ImGuizmo/ImGuizmo.h
|
||
)
|
||
|
||
set(METACORE_EDITOR_SOURCES
|
||
Source/MetaCoreEditor/Private/MetaCoreBuiltinCoreServicesModule.cpp
|
||
Source/MetaCoreEditor/Private/MetaCoreBuiltinEditorModule.cpp
|
||
Source/MetaCoreEditor/Private/MetaCoreEditorApp.cpp
|
||
Source/MetaCoreEditor/Private/MetaCoreEditorCameraController.cpp
|
||
Source/MetaCoreEditor/Private/MetaCoreEditorCommandService.cpp
|
||
Source/MetaCoreEditor/Private/MetaCoreEditorContext.cpp
|
||
Source/MetaCoreEditor/Private/MetaCoreEditorServices.cpp
|
||
Source/MetaCoreEditor/Private/MetaCoreEditorModule.cpp
|
||
Source/MetaCoreEditor/Private/MetaCoreSceneInteractionService.cpp
|
||
third_party/ImGuizmo/ImGuizmo.cpp
|
||
)
|
||
|
||
metacore_generate_reflection(
|
||
Editor
|
||
MetaCoreRegisterEditorGeneratedTypes
|
||
METACORE_EDITOR_GENERATED_SOURCE
|
||
Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorAssetTypes.h
|
||
Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorContext.h
|
||
)
|
||
|
||
add_library(MetaCoreEditor STATIC
|
||
${METACORE_EDITOR_HEADERS}
|
||
${METACORE_EDITOR_PRIVATE_HEADERS}
|
||
${METACORE_EDITOR_SOURCES}
|
||
${METACORE_EDITOR_GENERATED_SOURCE}
|
||
)
|
||
|
||
target_include_directories(MetaCoreEditor
|
||
PUBLIC
|
||
Source/MetaCoreEditor/Public
|
||
PRIVATE
|
||
Source/MetaCoreEditor/Private
|
||
third_party
|
||
third_party/ImGuizmo
|
||
)
|
||
|
||
target_link_libraries(MetaCoreEditor
|
||
PUBLIC
|
||
MetaCoreFoundation
|
||
MetaCorePlatform
|
||
MetaCoreRender
|
||
MetaCoreRuntimeData
|
||
MetaCoreScene
|
||
glm::glm
|
||
imgui::imgui
|
||
)
|
||
|
||
target_compile_options(MetaCoreEditor PRIVATE ${METACORE_COMMON_WARNINGS})
|
||
target_compile_definitions(MetaCoreEditor PRIVATE WIN32_LEAN_AND_MEAN NOMINMAX)
|
||
|
||
add_executable(MetaCoreEditorApp
|
||
Apps/MetaCoreEditor/main.cpp
|
||
)
|
||
|
||
target_link_libraries(MetaCoreEditorApp
|
||
PRIVATE
|
||
MetaCoreEditor
|
||
)
|
||
|
||
metacore_stage_panda3d_runtime(MetaCoreEditorApp)
|
||
metacore_stage_simplepbr_runtime(MetaCoreEditorApp)
|
||
|
||
add_executable(MetaCorePlayer
|
||
Apps/MetaCorePlayer/main.cpp
|
||
)
|
||
|
||
target_link_libraries(MetaCorePlayer
|
||
PRIVATE
|
||
MetaCoreFoundation
|
||
MetaCorePlatform
|
||
MetaCoreRender
|
||
MetaCoreRuntimeData
|
||
MetaCoreScene
|
||
MetaCorePanda3D::SDK
|
||
)
|
||
|
||
metacore_stage_panda3d_runtime(MetaCorePlayer)
|
||
metacore_stage_simplepbr_runtime(MetaCorePlayer)
|
||
|
||
if(METACORE_BUILD_TESTS)
|
||
enable_testing()
|
||
|
||
add_executable(MetaCoreSmokeTests
|
||
tests/MetaCoreSmokeTests.cpp
|
||
)
|
||
|
||
target_link_libraries(MetaCoreSmokeTests
|
||
PRIVATE
|
||
MetaCoreEditor
|
||
MetaCoreRuntimeData
|
||
)
|
||
|
||
metacore_stage_panda3d_runtime(MetaCoreSmokeTests)
|
||
metacore_stage_simplepbr_runtime(MetaCoreSmokeTests)
|
||
add_test(NAME MetaCoreSmokeTests COMMAND MetaCoreSmokeTests)
|
||
endif()
|