-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
88 lines (73 loc) · 3.04 KB
/
Copy pathCMakeLists.txt
File metadata and controls
88 lines (73 loc) · 3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
cmake_minimum_required(VERSION 3.25)
set(VCPKG_OVERLAY_PORTS "${CMAKE_CURRENT_LIST_DIR}/cmake/vcpkg-overlays" CACHE STRING
"Project-local vcpkg overlay ports")
if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(_lumin_vcpkg_candidates
"$ENV{VCPKG_ROOT}"
"D:/Programs/vcpkg"
"D:/vcpkg"
"C:/vcpkg"
)
foreach(_lumin_vcpkg_root IN LISTS _lumin_vcpkg_candidates)
if(_lumin_vcpkg_root AND EXISTS "${_lumin_vcpkg_root}/scripts/buildsystems/vcpkg.cmake")
file(TO_CMAKE_PATH "${_lumin_vcpkg_root}/scripts/buildsystems/vcpkg.cmake" _lumin_vcpkg_toolchain)
set(CMAKE_TOOLCHAIN_FILE "${_lumin_vcpkg_toolchain}" CACHE FILEPATH "vcpkg toolchain file")
message(STATUS "Using vcpkg toolchain: ${CMAKE_TOOLCHAIN_FILE}")
break()
endif()
endforeach()
endif()
project(LuminEngine VERSION 0.1.0 LANGUAGES CXX)
# 模块在各自的 CMakeLists.txt 中发现依赖;将 imported targets 提升到目录树全局,供 tests/apps 复用。
set(CMAKE_FIND_PACKAGE_TARGETS_GLOBAL ON)
option(LUMIN_BUILD_EDITOR "Build the editor executable." ON)
option(LUMIN_BUILD_TESTS "Build the engine tests." ON)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
include(LuminTargets)
include(LuminRayTracing)
set(LUMIN_GENERATED_INCLUDE_DIR "${PROJECT_BINARY_DIR}/generated/include")
lumin_configure_ray_tracing_policy(OUTPUT_DIRECTORY "${LUMIN_GENERATED_INCLUDE_DIR}")
set(LUMIN_SHADER_SOURCE_DIR "${PROJECT_SOURCE_DIR}/shaders")
set(LUMIN_SHADER_OUTPUT_DIR "${PROJECT_BINARY_DIR}/generated/shaders")
set(LUMIN_SHADER_MANIFEST "${LUMIN_SHADER_OUTPUT_DIR}/shader-manifest.json" CACHE INTERNAL
"Generated shader manifest used by ABI validation")
set(LUMIN_ASSET_DIR "${PROJECT_SOURCE_DIR}/assets")
file(TO_CMAKE_PATH "${LUMIN_SHADER_OUTPUT_DIR}" LUMIN_SHADER_OUTPUT_DIR_CMAKE)
file(TO_CMAKE_PATH "${LUMIN_ASSET_DIR}" LUMIN_ASSET_DIR_CMAKE)
add_subdirectory(thirdparty)
add_subdirectory(shaders)
add_subdirectory(core)
add_subdirectory(render)
# Application 是组合层:它可以同时看到 Core 和 Render,但 Render 永远不反向依赖它。
add_library(lumin_application STATIC
application/Application.cpp
application/LogicRuntime.cpp
)
add_library(Lumin::Application ALIAS lumin_application)
add_library(Lumin::GameEngine ALIAS lumin_application)
lumin_configure_library(lumin_application)
target_link_libraries(lumin_application
PUBLIC
Lumin::Core
Lumin::Render
Lumin::Editor
)
target_compile_definitions(lumin_application
PRIVATE
$<$<CONFIG:Debug>:LUMIN_ENABLE_VALIDATION>
LUMIN_SHADER_DIR="${LUMIN_SHADER_OUTPUT_DIR_CMAKE}"
)
add_library(lumin_engine INTERFACE)
add_library(Lumin::Engine ALIAS lumin_engine)
target_link_libraries(lumin_engine INTERFACE Lumin::Application)
if(LUMIN_BUILD_EDITOR)
add_subdirectory(apps/editor)
endif()
if(LUMIN_BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif()