-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
169 lines (103 loc) · 4.12 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
# Copyright (c) 2022 Sapphire's Suite. All Rights Reserved.
cmake_minimum_required(VERSION 3.16)
# Project
project(SA_Engine)
message("Main directory: ${CMAKE_SOURCE_DIR}")
# Outputs
### Setup output directory
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # .exe
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) # .lib / .a
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) # .dll / .so
# Input.
set(SA_SOURCE_DIR "Source/SA/Engine")
file(GLOB SA_ENGINE_SOURCES "${SA_SOURCE_DIR}/*" "${SA_SOURCE_DIR}/HI/*")
### Interface library for dependencies.
add_library(SA_EngineDeps INTERFACE)
target_link_libraries(SA_EngineDeps INTERFACE SA_Logger SA_Maths SA_Event)
## Render
option(SA_RENDER "Compile Engine Renderer module" ON)
option(SA_VULKAN "Compile Vulkan Renderer" ON)
option(SA_OPEN_GL "Compile OpenGL Renderer" OFF)
if(SA_RENDER)
target_compile_definitions(SA_EngineDeps INTERFACE SA_RENDER)
file(GLOB_RECURSE SA_RENDER_BASE_SOURCES "${SA_SOURCE_DIR}/Render/Base/*")
### Vulkan
if(SA_VULKAN)
file(GLOB_RECURSE SA_RENDER_VULKAN_SOURCES "${SA_SOURCE_DIR}/Render/Vulkan/*")
find_package(Vulkan REQUIRED FATAL_ERROR)
target_link_libraries(SA_EngineDeps INTERFACE Vulkan::Vulkan)
target_compile_definitions(SA_EngineDeps INTERFACE SA_VULKAN)
endif()
### OpenGL
if(SA_OPEN_GL)
file(GLOB_RECURSE SA_RENDER_OPEN_GL_SOURCES "${SA_SOURCE_DIR}/Render/OpenGL/*")
target_compile_definitions(SA_EngineDeps INTERFACE SA_OPEN_GL)
endif()
set(SA_ENGINE_SOURCES "${SA_ENGINE_SOURCES};${SA_RENDER_BASE_SOURCES};${SA_RENDER_VULKAN_SOURCES};${SA_RENDER_OPEN_GL_SOURCES}")
endif()
## Window
option(SA_WINDOW "Compile Engine Windowing module" ON)
option(SA_GLFW "Compile GLFW Window Manager" ON)
if(SA_WINDOW)
target_compile_definitions(SA_EngineDeps INTERFACE SA_WINDOW)
file(GLOB_RECURSE SA_WINDOW_BASE_SOURCES "${SA_SOURCE_DIR}/Window/Base/*")
### GLFW
if(SA_GLFW)
file(GLOB_RECURSE SA_WINDOW_GLFW_SOURCES "${SA_SOURCE_DIR}/Window/GLFW/*")
target_link_libraries(SA_EngineDeps INTERFACE glfw)
target_compile_definitions(SA_EngineDeps INTERFACE SA_GLFW)
endif()
set(SA_ENGINE_SOURCES "${SA_ENGINE_SOURCES};${SA_WINDOW_BASE_SOURCES};${SA_WINDOW_GLFW_SOURCES}")
endif()
## Input
option(SA_INPUT "Compile Engine Input module" ON)
if(SA_INPUT)
target_compile_definitions(SA_EngineDeps INTERFACE SA_INPUT)
file(GLOB_RECURSE SA_INPUT_BASE_SOURCES "${SA_SOURCE_DIR}/Input/Base/*")
### GLFW
if(SA_GLFW)
file(GLOB_RECURSE SA_INPUT_GLFW_SOURCES "${SA_SOURCE_DIR}/Input/GLFW/*")
target_link_libraries(SA_EngineDeps INTERFACE glfw)
target_compile_definitions(SA_EngineDeps INTERFACE SA_GLFW)
endif()
set(SA_ENGINE_SOURCES "${SA_ENGINE_SOURCES};${SA_INPUT_BASE_SOURCES};${SA_INPUT_GLFW_SOURCES}")
endif()
## SDK
option(SA_SDK "Compile Engine SDK module" ON)
if(SA_SDK)
target_link_libraries(SA_EngineDeps INTERFACE SA_Serialize)
target_compile_definitions(SA_EngineDeps INTERFACE SA_SDK)
file(GLOB_RECURSE SA_SDK_SOURCES "${SA_SOURCE_DIR}/SDK/*")
target_link_libraries(SA_EngineDeps INTERFACE assimp)
if(SA_RENDER)
target_link_libraries(SA_EngineDeps INTERFACE SA_STB)
if(SA_VULKAN OR SA_OPEN_GL)
target_link_libraries(SA_EngineDeps INTERFACE SA_GLSL_ShaderBuilder)
endif()
endif()
set(SA_ENGINE_SOURCES "${SA_ENGINE_SOURCES};${SA_SDK_SOURCES}")
endif()
# Library
## Add Static library
add_library(SA_Engine STATIC ${SA_ENGINE_SOURCES})
## Link dependencies.
target_link_libraries(SA_Engine PUBLIC SA_EngineDeps)
## Include directories
target_include_directories(SA_Engine PUBLIC Include)
target_include_directories(SA_Engine PRIVATE Include/SA/Engine)
## Compile features
### Standard
target_compile_features(SA_Engine PUBLIC c_std_11)
target_compile_features(SA_Engine PUBLIC cxx_std_20)
### SA_Engine module implementation preprocessor.
target_compile_definitions(SA_Engine PUBLIC SA_ENGINE_IMPL)
# Options
## Add SA-Engine's tests to build tree.
option(SA_ENGINE_BUILD_TESTS "Should build SA-Engine tests" OFF)
# Entrypoints
add_subdirectory(ThirdParty)
if(SA_ENGINE_BUILD_TESTS_OPT)
### Enable testing for this directory and below.
enable_testing()
add_subdirectory(Tests)
endif()