-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
219 lines (182 loc) · 7.89 KB
/
CMakeLists.txt
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
cmake_minimum_required(VERSION 3.24)
set(CMAKE_CXX_STANDARD 20)
# set(CMAKE_TOOLCHAIN_FILE ${VCPKG_ROOT})
project(raum_sample_proj C CXX)
if (NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "")
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
endif ()
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_AUTOMOC ON)
#find_package(Qt6Vulkan CONFIG REQUIRED)
# if(MSVC)
# set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
# endif()
set(dependency_dir ${CMAKE_CURRENT_SOURCE_DIR}/dependencies CACHE INTERNAL "dependency_dir")
set(core_dir ${CMAKE_CURRENT_SOURCE_DIR}/core CACHE INTERNAL "core_dir")
set(renderer_dir ${CMAKE_CURRENT_SOURCE_DIR}/renderer CACHE INTERNAL "renderer_dir")
# core
find_package(spdlog CONFIG REQUIRED)
add_definitions(-DGLM_ENABLE_EXPERIMENTAL)
find_package(glm CONFIG REQUIRED)
file(GLOB_RECURSE raum_utils_h ${CMAKE_CURRENT_LIST_DIR}/core/utils/*.h)
source_group("raum_utils_h" FILES ${raum_utils_h})
file(GLOB_RECURSE raum_utils_cpp ${CMAKE_CURRENT_LIST_DIR}/core/utils/*.cpp)
source_group("raum_utils_cpp" FILES ${raum_utils_cpp})
file(GLOB_RECURSE raum_core_h ${CMAKE_CURRENT_LIST_DIR}/core/*.h)
source_group("raum_core_h" FILES ${raum_core_h})
file(GLOB_RECURSE raum_core_cpp ${CMAKE_CURRENT_LIST_DIR}/core/*.cpp)
source_group("raum_core_cpp" FILES ${raum_core_cpp})
add_library(raum_core
${raum_utils_h}
${raum_utils_cpp}
${raum_core_h}
${raum_core_cpp}
)
target_include_directories(raum_core PUBLIC
./
)
target_link_libraries(raum_core PUBLIC
spdlog::spdlog
)
# framework
find_package(Qt6 REQUIRED COMPONENTS Widgets)
file(GLOB_RECURSE raum_framework_platform_h ${CMAKE_CURRENT_LIST_DIR}/framework/platform/windows/*.h)
file(GLOB_RECURSE raum_framework_platform_cpp ${CMAKE_CURRENT_LIST_DIR}/framework/platform/windows/*.cpp)
file(GLOB_RECURSE raum_framework_platform_common_h ${CMAKE_CURRENT_LIST_DIR}/framework/platform/common/*.h)
file(GLOB_RECURSE raum_framework_platform_common_cpp ${CMAKE_CURRENT_LIST_DIR}/framework/platform/common/*.cpp)
file(GLOB_RECURSE raum_framework_game_h ${CMAKE_CURRENT_LIST_DIR}/framework/game/*.h)
file(GLOB_RECURSE raum_framework_game_cpp ${CMAKE_CURRENT_LIST_DIR}/framework/game/*.cpp)
file(GLOB_RECURSE raum_framework_h ${CMAKE_CURRENT_LIST_DIR}/framework/event/*.h)
file(GLOB_RECURSE raum_framework_cpp ${CMAKE_CURRENT_LIST_DIR}/framework/event/*.cpp)
source_group("raum_framework_h" FILES ${raum_framework_h})
source_group("raum_framework_cpp" FILES ${raum_framework_cpp})
list(APPEND raum_framework_h ${raum_framework_platform_common_h})
list(APPEND raum_framework_cpp ${raum_framework_platform_common_cpp})
list(APPEND raum_framework_h ${raum_framework_game_h})
list(APPEND raum_framework_cpp ${raum_framework_game_cpp})
if (WIN32)
file(GLOB_RECURSE raum_framework_platform_specific_cpp ${CMAKE_CURRENT_LIST_DIR}/framework/platform/windows/*.cpp)
source_group("raum_framework_platform_specific_cpp" FILES ${raum_framework_platform_specific_cpp})
endif ()
add_library(raum_framework
${raum_framework_platform_h}
${raum_framework_platform_cpp}
${raum_framework_h}
${raum_framework_cpp}
${raum_framework_platform_specific_cpp}
)
target_include_directories(raum_framework PUBLIC
${CMAKE_CURRENT_LIST_DIR}/framework/platform/windows/
${CMAKE_CURRENT_LIST_DIR}/framework/platform/common/
${CMAKE_CURRENT_LIST_DIR}/framework/event/
${CMAKE_CURRENT_LIST_DIR}/framework/game/
${CMAKE_CURRENT_LIST_DIR}/renderer/graph/
)
target_link_libraries(raum_framework PRIVATE
Qt6::Widgets
Qt6::Gui
raum_core
raum_renderer
raum_asset
)
# renderer
file(GLOB_RECURSE raum_graph_h ${CMAKE_CURRENT_LIST_DIR}/renderer/graph/*.h)
file(GLOB_RECURSE raum_graph_cpp ${CMAKE_CURRENT_LIST_DIR}/renderer/graph/*.cpp)
source_group("raum_graph_h" FILES ${raum_graph_h})
source_group("raum_graph_cpp" FILES ${raum_graph_cpp})
file(GLOB_RECURSE raum_scene_h ${CMAKE_CURRENT_LIST_DIR}/renderer/scene/*.h)
file(GLOB_RECURSE raum_scene_cpp ${CMAKE_CURRENT_LIST_DIR}/renderer/scene/*.cpp)
source_group("raum_scene_h" FILES ${raum_scene_h})
source_group("raum_scene_cpp" FILES ${raum_scene_cpp})
file(GLOB_RECURSE raum_feature_h ${CMAKE_CURRENT_LIST_DIR}/renderer/feature/*.h)
file(GLOB_RECURSE raum_feature_cpp ${CMAKE_CURRENT_LIST_DIR}/renderer/feature/*.cpp)
source_group("raum_feature_h" FILES ${raum_feature_h})
source_group("raum_feature_cpp" FILES ${raum_feature_cpp})
# renderer-rhi
add_subdirectory(renderer/rhi/vulkan)
add_library(raum_renderer
${raum_graph_h}
${raum_graph_cpp}
${raum_scene_h}
${raum_scene_cpp}
${raum_feature_h}
${raum_feature_cpp}
)
target_include_directories(raum_renderer PUBLIC
${CMAKE_CURRENT_LIST_DIR}/renderer/graph
${CMAKE_CURRENT_LIST_DIR}/renderer/scene
${CMAKE_CURRENT_LIST_DIR}/renderer/feature
)
target_link_libraries(raum_renderer PUBLIC
raum_rhi
Boost::graph
)
# Get the include directories for the target.
get_target_property(LIBA_INCLUDES raum_rhi INCLUDE_DIRECTORIES)
# Construct the compiler string for the include directories.
foreach (dir ${LIBA_INCLUDES})
string(APPEND INCLUDE_COMPILER_STRING "/I${dir} ")
endforeach ()
#asset
find_package(Boost REQUIRED COMPONENTS graph json)
find_package(stb REQUIRED)
find_path(TINYGLTF_INCLUDE_DIRS "tiny_gltf.h")
file(GLOB_RECURSE raum_asset_loader_h ${CMAKE_CURRENT_LIST_DIR}/asset/loader/*.h)
file(GLOB_RECURSE raum_asset_loader_cpp ${CMAKE_CURRENT_LIST_DIR}/asset/loader/*.cpp)
source_group("raum_asset_loader_h" FILES ${raum_asset_loader_h})
source_group("raum_asset_loader_cpp" FILES ${raum_asset_loader_cpp})
file(GLOB_RECURSE raum_asset_serialize_h ${CMAKE_CURRENT_LIST_DIR}/asset/serialization/*.h)
file(GLOB_RECURSE raum_asset_serialize_cpp ${CMAKE_CURRENT_LIST_DIR}/asset/serialization/*.cpp)
source_group("raum_asset_serialize_h" FILES ${raum_asset_serialize_h})
source_group("raum_asset_serialize_cpp" FILES ${raum_asset_serialize_cpp})
file(GLOB_RECURSE raum_asset_builtinres_h ${CMAKE_CURRENT_LIST_DIR}/asset/resources/builtin/*.h)
file(GLOB_RECURSE raum_asset_builtinres_cpp ${CMAKE_CURRENT_LIST_DIR}/asset/resources/builtin/*.cpp)
source_group("raum_asset_builtinres_h" FILES ${raum_asset_builtinres_h})
source_group("raum_asset_builtinres_cpp" FILES ${raum_asset_builtinres_cpp})
add_library(raum_asset
${raum_asset_loader_h}
${raum_asset_loader_cpp}
${raum_asset_serialize_h}
${raum_asset_serialize_cpp}
${raum_asset_builtinres_h}
${raum_asset_builtinres_cpp}
)
target_include_directories(raum_asset PUBLIC
${Stb_INCLUDE_DIR}
${CMAKE_CURRENT_LIST_DIR}/asset/loader
${CMAKE_CURRENT_LIST_DIR}/asset/serialization
${CMAKE_CURRENT_LIST_DIR}/asset/resources/builtin
${TINYGLTF_INCLUDE_DIRS}
)
target_link_libraries(raum_asset PUBLIC
Boost::json
raum_core
raum_renderer
)
file(GLOB_RECURSE Sample
${CMAKE_CURRENT_SOURCE_DIR}/Sample/*.*
)
add_executable(raum_sample
${Sample}
)
# if(WIN32)
# set_target_properties(raum_sample
# PROPERTIES
# LINK_FLAGS_DEBUG "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup"
# LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup"
# LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup"
# LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup"
# )
# endif(WIN32)
target_link_libraries(raum_sample PRIVATE
raum_renderer
raum_framework
raum_asset
raum_core
Qt6::Widgets
)
# set_target_properties(raum_sample PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
file(COPY asset/resources/files DESTINATION ${CMAKE_BINARY_DIR})
file(COPY framework/platform/windows/builds/qt6.conf DESTINATION ${CMAKE_BINARY_DIR})
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT raum_sample)