MetaCore/CMakeLists.txt

407 lines
13 KiB
CMake
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
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/MetaCoreProject.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/MetaCoreProject.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
Source/MetaCoreFoundation/Public/MetaCoreFoundation/MetaCoreAssetTypes.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
third_party/cgltf/cgltf.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
third_party/cgltf/cgltf.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
third_party/cgltf
)
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()