22
33### Options
44
5- set (CMAKE_CONFIGURATION_TYPES "template_debug;editor;template_release " )
5+ set (CONFIGS_WITH_DEBUG "Debug;RelWithDebInfo" CACHE STRING "Configurations that should have debug symbols (Modify if support for custom configurations is needed) " )
66
7+ # Default config
78if ("${CMAKE_BUILD_TYPE} " STREQUAL "" )
8- set (CMAKE_BUILD_TYPE template_debug )
9+ set (CMAKE_BUILD_TYPE "Debug" )
910endif ()
1011
12+ set (TARGET "TEMPLATE_DEBUG" CACHE STRING "Target platform (EDITOR, TEMPLATE_DEBUG, TEMPLATE_RELEASE)" )
1113# Auto-detect platform
1214if (CMAKE_SYSTEM_NAME STREQUAL "Linux" )
1315 set (DEFAULT_PLATFORM "LINUX" )
@@ -40,7 +42,7 @@ set(GODOT_CPP_LIBRARY_TYPE "STATIC" CACHE STRING "[Experimental] Library type (S
4042
4143option (DEV_BUILD "Developer build with dev-only debugging code" OFF )
4244
43- option (DEBUG_SYMBOLS "Build with debugging symbols" ON )
45+ option (DEBUG_SYMBOLS "Force build with debugging symbols" OFF )
4446
4547option (USE_HOT_RELOAD "Enable the extra accounting required to support hot reload" ON )
4648
@@ -69,7 +71,8 @@ option(GENERATE_TEMPLATE_GET_NODE "Generate a template version of the Node class
6971# Compiler warnings and compiler check generators
7072include (GodotCompilerWarnings)
7173
72- # Create the correct name (godot-cpp.platform.target.arch)
74+ # Create the correct name (godot-cpp.platform.target)
75+ # See more prefix appends in platform-specific configs
7376if (${DEV_BUILD} )
7477 string (APPEND LIBRARY_SUFFIX ".dev" )
7578endif ()
@@ -81,13 +84,21 @@ endif()
8184# Workaround of $<CONFIG> expanding to "" when default build set
8285set (CONFIG "$<IF:$<STREQUAL:,$<CONFIG>>,${CMAKE_BUILD_TYPE} ,$<CONFIG>>" )
8386
84- string (TOLOWER ".${PLATFORM} " platform )
85- string (PREPEND LIBRARY_SUFFIX " ${platform} . ${CONFIG} " )
87+ string (TOLOWER ".${PLATFORM} . ${TARGET} " platform_target )
88+ string (PREPEND LIBRARY_SUFFIX ${platform_target} )
8689
8790# Default optimization levels if OPTIMIZE=AUTO, for multi-config support
88- set (DEFAULT_OPTIMIZATION_DEV "$<AND:$<STREQUAL:${OPTIMIZE} ,AUTO>,$<BOOL:${DEV_BUILD} >>" )
89- set (DEFAULT_OPTIMIZATION_DEBUG_FEATURES "$<AND:$<NOT:${DEFAULT_OPTIMIZATION_DEV} >,$<STREQUAL:${OPTIMIZE} ,AUTO>,$<OR:$<STREQUAL:${CONFIG} ,editor>,$<STREQUAL:${CONFIG} ,template_debug>>>" )
90- set (DEFAULT_OPTIMIZATION "$<$<AND:$<NOT:$<OR:${DEFAULT_OPTIMIZATION_DEV} ,${DEFAULT_OPTIMIZATION_DEBUG_FEATURES} >>,STREQUAL:${OPTIMIZE} ,AUTO>>" )
91+ set (DEFAULT_OPTIMIZATION_DEBUG_FEATURES "$<OR:$<STREQUAL:${TARGET} ,EDITOR>,$<STREQUAL:${TARGET} ,TEMPLATE_DEBUG>>" )
92+ set (DEFAULT_OPTIMIZATION "$<NOT:${DEFAULT_OPTIMIZATION_DEBUG_FEATURES} >" )
93+
94+ set (DEBUG_SYMBOLS_ENABLED "$<OR:$<BOOL:${DEBUG_SYMBOLS} >,$<IN_LIST:${CONFIG} ,${CONFIGS_WITH_DEBUG} >>" )
95+
96+ # Clean default options
97+ set (CMAKE_CXX_FLAGS "" )
98+ set (CMAKE_CXX_FLAGS_DEBUG "" )
99+ set (CMAKE_CXX_FLAGS_RELEASE "" )
100+ set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "" )
101+ set (CMAKE_CXX_FLAGS_MINSIZEREL "" )
91102
92103list (APPEND GODOT_DEFINITIONS
93104 GDEXTENSION
@@ -101,10 +112,10 @@ list(APPEND GODOT_DEFINITIONS
101112 $<$<STREQUAL :${FLOAT_PRECISION} ,DOUBLE>:
102113 REAL_T_IS_DOUBLE
103114 >
104- $<$<AND :$<NOT :$<STREQUAL :${CONFIG} ,template_release >>,$<BOOL :${USE_HOT_RELOAD} >>:
115+ $<$<AND :$<NOT :$<STREQUAL :${TARGET} ,TEMPLATE_RELEASE >>,$<BOOL :${USE_HOT_RELOAD} >>:
105116 HOT_RELOAD_ENABLE
106117 >
107- $<$<STREQUAL :${CONFIG} ,editor >:
118+ $<$<STREQUAL :${TARGET} ,EDITOR >:
108119 TOOLS_ENABLED
109120 >
110121
@@ -115,36 +126,48 @@ list(APPEND GODOT_DEFINITIONS
115126 NDEBUG
116127 >
117128
118- $<$<NOT :$<STREQUAL :${CONFIG} ,template_release >>:
129+ $<$<NOT :$<STREQUAL :${TARGET} ,TEMPLATE_RELEASE >>:
119130 DEBUG_ENABLED
120131 DEBUG_METHODS_ENABLED
121132 >
122133)
123134
124135list (APPEND GODOT_CC_FLAGS
125136 $<${compiler_is_msvc} :
126- $<$< BOOL : ${DEBUG_SYMBOLS} > :
137+ $<${DEBUG_SYMBOLS_ENABLED} :
127138 /Zi
128139 /FS
129140 >
130141
131- $<$<OR :$<STREQUAL :${OPTIMIZE} ,SPEED>,${DEFAULT_OPTIMIZATION} >:
132- /O2
133- >
134- $<$<OR :$<STREQUAL :${OPTIMIZE} ,SPEED_TRACE>,${DEFAULT_OPTIMIZATION_DEBUG_FEATURES} >:
135- /O2
136- >
137- $<$<STREQUAL :${OPTIMIZE} ,SIZE>:
138- /O1
142+ $<$<STREQUAL :${OPTIMIZE} ,AUTO>:
143+ $<$<CONFIG:Release,RelWithDebInfo>:
144+ $<${DEFAULT_OPTIMIZATION} :
145+ /O2
146+ >
147+ $<${DEFAULT_OPTIMIZATION_DEBUG_FEATURES} :
148+ /O2
149+ >
150+ >
151+ $<$<CONFIG:MinSizeRel>:
152+ /O1
153+ >
154+ $<$<CONFIG:Debug,>:
155+ /Od
156+ >
139157 >
140- $<$<OR :$<STREQUAL :${OPTIMIZE} ,DEBUG>,$<STREQUAL :${OPTIMIZE} ,NONE>,${DEFAULT_OPTIMIZATION_DEV} >:
141- /Od
158+ $<$<NOT :$<STREQUAL :${OPTIMIZE} ,AUTO>>:
159+ $<$<STREQUAL :${OPTIMIZE} ,SPEED>:/O2>
160+ $<$<STREQUAL :${OPTIMIZE} ,SPEED_TRACE>:/O2>
161+ $<$<STREQUAL :${OPTIMIZE} ,SIZE>:/O1>
162+ $<$<STREQUAL :${OPTIMIZE} ,DEBUG>:/Od>
163+ $<$<STREQUAL :${OPTIMIZE} ,NONE>:/Od>
142164 >
165+
143166 >
144167 $<$<NOT :${compiler_is_msvc} >:
145- $<$< BOOL : ${DEBUG_SYMBOLS} > :
168+ $<${DEBUG_SYMBOLS_ENABLED} :
146169 -gdwarf-4
147-
170+
148171 $<$<BOOL :${DEV_BUILD} >:
149172 -g3
150173 >
@@ -160,20 +183,28 @@ list(APPEND GODOT_CC_FLAGS
160183 -fvisibility=hidden
161184 >
162185
163- $<$<OR :$<STREQUAL :${OPTIMIZE} ,SPEED>>:
164- -O3
165- >
166- $<$<OR :$<STREQUAL :${OPTIMIZE} ,SPEED_TRACE>,${DEFAULT_OPTIMIZATION_DEBUG_FEATURES} >:
167- -O2
168- >
169- $<$<STREQUAL :${OPTIMIZE} ,SIZE>:
170- -Os
171- >
172- $<$<STREQUAL :${OPTIMIZE} ,DEBUG>:
173- -Og
186+ $<$<STREQUAL :${OPTIMIZE} ,AUTO>:
187+ $<$<CONFIG:Release,RelWithDebInfo>:
188+ $<${DEFAULT_OPTIMIZATION} :
189+ -O3
190+ >
191+ $<${DEFAULT_OPTIMIZATION_DEBUG_FEATURES} :
192+ -O2
193+ >
194+ >
195+ $<$<CONFIG:MinSizeRel>:
196+ -Os
197+ >
198+ $<$<CONFIG:Debug,>:
199+ -Og
200+ >
174201 >
175- $<$<OR :$<STREQUAL :${OPTIMIZE} ,NONE>,${DEFAULT_OPTIMIZATION_DEV} >:
176- -O0
202+ $<$<NOT :$<STREQUAL :${OPTIMIZE} ,AUTO>>:
203+ $<$<STREQUAL :${OPTIMIZE} ,SPEED>:-O3>
204+ $<$<STREQUAL :${OPTIMIZE} ,SPEED_TRACE>:-O2>
205+ $<$<STREQUAL :${OPTIMIZE} ,SIZE>:-Os>
206+ $<$<STREQUAL :${OPTIMIZE} ,DEBUG>:-Og>
207+ $<$<STREQUAL :${OPTIMIZE} ,NONE>:-O0>
177208 >
178209 >
179210)
@@ -186,26 +217,35 @@ list(APPEND GODOT_CXX_FLAGS
186217 >
187218 $<$<NOT :${compiler_is_msvc} >:
188219 $<$<BOOL :${GODOT_DISABLE_EXCEPTIONS} >:
189- -fno-exceptions
220+ -fno-exceptions
190221 >
191222 >
192223)
193224
194225list (APPEND GODOT_LINK_FLAGS
195226 $<${compiler_is_msvc} :
196- $<$< BOOL : ${DEBUG_SYMBOLS} > :
227+ $<${DEBUG_SYMBOLS_ENABLED} :
197228 /DEBUG:FULL
198229 >
199230
200- $<$<STREQUAL :${OPTIMIZE} ,SPEED>:
201- /OPT:REF
202- >
203- $<$<OR :$<STREQUAL :${OPTIMIZE} ,SPEED_TRACE>,${DEFAULT_OPTIMIZATION_DEBUG_FEATURES} >:
204- /OPT:REF
205- /OPT:NOICF
231+ $<$<STREQUAL :${OPTIMIZE} ,AUTO>:
232+ $<$<CONFIG:Release,RelWithDebInfo>:
233+ $<${DEFAULT_OPTIMIZATION} :
234+ /OPT:REF
235+ >
236+ $<${DEFAULT_OPTIMIZATION_DEBUG_FEATURES} :
237+ /OPT:REF
238+ /OPT:NOICF
239+ >
240+ >
241+ $<$<CONFIG:MinSizeRel>:
242+ /OPT:REF
243+ >
206244 >
207- $<$<STREQUAL :${OPTIMIZE} ,SIZE>:
208- /OPT:REF
245+ $<$<NOT :$<STREQUAL :${OPTIMIZE} ,AUTO>>:
246+ $<$<STREQUAL :${OPTIMIZE} ,SPEED>:/OPT:REF>
247+ $<$<STREQUAL :${OPTIMIZE} ,SPEED_TRACE>:/OPT:REF /OPT:NOICF>
248+ $<$<STREQUAL :${OPTIMIZE} ,SIZE>:/OPT:REF>
209249 >
210250 >
211251 $<$<NOT :${compiler_is_msvc} >:
@@ -216,7 +256,7 @@ list(APPEND GODOT_LINK_FLAGS
216256 -fvisibility=hidden
217257 >
218258
219- $<$<NOT :$< BOOL : ${DEBUG_SYMBOLS} > >:
259+ $<$<NOT :${DEBUG_SYMBOLS_ENABLED} >:
220260 $<$<CXX_COMPILER_ID:AppleClang>: # SCons: not is_vanilla_clang(env)
221261 "-Wl,-S"
222262 "-Wl,-x"
@@ -246,9 +286,15 @@ else()
246286 message (FATAL_ERROR "Platform not supported: ${PLATFORM} " )
247287endif ()
248288
289+ string (APPEND LIBRARY_SUFFIX ".${ARCH} " )
290+
291+ if (${IOS_SIMULATOR} )
292+ string (APPEND LIBRARY_SUFFIX ".simulator" )
293+ endif ()
294+
249295# Write all flags to file for cmake configuration debug
250- file (GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR} /flags.txt"
296+ file (GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR} /flags- ${CONFIG} .txt"
251297 CONTENT
252- "C_FLAGS '${GODOT_CC_FLAGS} '\n CXX_FLAGS '${GODOT_CXX_FLAGS} '\n LINK_FLAGS '${GODOT_LINK_FLAGS} '\n COMPILE_WARNING_FLAGS '${GODOT_COMPILE_WARNING_FLAGS} '\n "
298+ "C_FLAGS '${GODOT_CC_FLAGS} '\n CXX_FLAGS '${GODOT_CXX_FLAGS} '\n LINK_FLAGS '${GODOT_LINK_FLAGS} '\n COMPILE_WARNING_FLAGS '${GODOT_COMPILE_WARNING_FLAGS} '\n DEFINITIONS ' ${GODOT_DEFINITIONS} ' "
253299 TARGET ${PROJECT_NAME}
254300)
0 commit comments