Skip to content

Commit 560f786

Browse files
authored
Merge pull request godotengine#1698 from enetheru/threads
CMake: Implement 'threads' Option
2 parents ee2a895 + 91f81f5 commit 560f786

File tree

4 files changed

+45
-38
lines changed

4 files changed

+45
-38
lines changed

cmake/common_compiler_flags.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ function( common_compiler_flags )
155155
$<$<STREQUAL:${GODOT_PRECISION},double>:REAL_T_IS_DOUBLE>
156156

157157
$<${IS_MSVC}:$<${DISABLE_EXCEPTIONS}:_HAS_EXCEPTIONS=0>>
158+
159+
$<${THREADS_ENABLED}:THREADS_ENABLED>
158160
)
159161

160162
target_link_options( ${TARGET_NAME}

cmake/godotcpp.cmake

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ function( godotcpp_options )
107107
set( GODOT_ARCH "" CACHE STRING "Target CPU Architecture")
108108
set_property( CACHE GODOT_ARCH PROPERTY STRINGS ${ARCH_LIST} )
109109

110-
#TODO threads
110+
set( GODOT_THREADS ON CACHE BOOL "Enable threading support" )
111+
111112
#TODO compiledb
112113
#TODO compiledb_file
113114

@@ -240,16 +241,15 @@ function( godotcpp_generate )
240241

241242
### Platform is derived from the toolchain target
242243
# See GeneratorExpressions PLATFORM_ID and CMAKE_SYSTEM_NAME
243-
set( SYSTEM_NAME
244-
$<$<PLATFORM_ID:Android>:android>
245-
$<$<PLATFORM_ID:iOS>:ios>
246-
$<$<PLATFORM_ID:Linux>:linux>
247-
$<$<PLATFORM_ID:Darwin>:macos>
248-
$<$<PLATFORM_ID:Emscripten>:web>
249-
$<$<PLATFORM_ID:Windows>:windows>
250-
$<$<PLATFORM_ID:Msys>:windows>
244+
string( CONCAT SYSTEM_NAME
245+
"$<$<PLATFORM_ID:Android>:android.${ANDROID_ABI}>"
246+
"$<$<PLATFORM_ID:iOS>:ios>"
247+
"$<$<PLATFORM_ID:Linux>:linux>"
248+
"$<$<PLATFORM_ID:Darwin>:macos>"
249+
"$<$<PLATFORM_ID:Emscripten>:web>"
250+
"$<$<PLATFORM_ID:Windows>:windows>"
251+
"$<$<PLATFORM_ID:Msys>:windows>"
251252
)
252-
string(REPLACE ";" "" SYSTEM_NAME "${SYSTEM_NAME}")
253253

254254
### Use the arch from the toolchain if it isn't set manually
255255
if( GODOT_ARCH )
@@ -263,6 +263,8 @@ function( godotcpp_generate )
263263

264264
set( DISABLE_EXCEPTIONS "$<BOOL:${GODOT_DISABLE_EXCEPTIONS}>")
265265

266+
set( THREADS_ENABLED "$<BOOL:${GODOT_THREADS}>" )
267+
266268
# GODOT_DEV_BUILD
267269
set( RELEASE_TYPES "Release;MinSizeRel")
268270
get_property( IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG )
@@ -272,8 +274,6 @@ function( godotcpp_generate )
272274
message( WARNING "=> GODOT_DEV_BUILD implies a Debug-like build but CMAKE_BUILD_TYPE is '${CMAKE_BUILD_TYPE}'")
273275
endif ()
274276
set( IS_DEV_BUILD "$<BOOL:${GODOT_DEV_BUILD}>")
275-
# The .dev portion of the name if GODOT_DEV_BUILD is true.
276-
set( DEV_TAG "$<${IS_DEV_BUILD}:.dev>" )
277277

278278
### Define our godot-cpp library targets
279279
foreach ( TARGET_ALIAS template_debug template_release editor )
@@ -283,6 +283,17 @@ function( godotcpp_generate )
283283
set( DEBUG_FEATURES "$<NOT:$<STREQUAL:${TARGET_ALIAS},template_release>>" )
284284
set( HOT_RELOAD "$<IF:${HOT_RELOAD-UNSET},${DEBUG_FEATURES},$<BOOL:${GODOT_USE_HOT_RELOAD}>>" )
285285

286+
# Suffix
287+
string( CONCAT GODOT_SUFFIX
288+
"$<1:.${SYSTEM_NAME}>"
289+
"$<1:.${TARGET_ALIAS}>"
290+
"$<${IS_DEV_BUILD}:.dev>"
291+
"$<$<STREQUAL:${GODOT_PRECISION},double>:.double>"
292+
"$<1:.${SYSTEM_ARCH}>"
293+
# TODO IOS_SIMULATOR
294+
"$<$<NOT:${THREADS_ENABLED}>:.nothreads>"
295+
)
296+
286297
# the godot-cpp.* library targets
287298
add_library( ${TARGET_NAME} STATIC EXCLUDE_FROM_ALL )
288299
add_library( godot-cpp::${TARGET_ALIAS} ALIAS ${TARGET_NAME} )
@@ -311,14 +322,17 @@ function( godotcpp_generate )
311322
POSITION_INDEPENDENT_CODE ON
312323
BUILD_RPATH_USE_ORIGIN ON
313324

314-
PREFIX lib
315-
OUTPUT_NAME "${PROJECT_NAME}.${SYSTEM_NAME}.${TARGET_ALIAS}${DEV_TAG}.${SYSTEM_ARCH}"
325+
PREFIX "lib"
326+
OUTPUT_NAME "${PROJECT_NAME}${GODOT_SUFFIX}"
327+
316328
ARCHIVE_OUTPUT_DIRECTORY "$<1:${CMAKE_BINARY_DIR}/bin>"
317329

318330
# Things that are handy to know for dependent targets
319-
GODOT_PLATFORM "${SYSTEM_NAME}"
320-
GODOT_TARGET "${TARGET_ALIAS}"
321-
GODOT_ARCH "${SYSTEM_ARCH}"
331+
GODOT_PLATFORM "${SYSTEM_NAME}"
332+
GODOT_TARGET "${TARGET_ALIAS}"
333+
GODOT_ARCH "${SYSTEM_ARCH}"
334+
GODOT_PRECISION "${GODOT_PRECISION}"
335+
GODOT_SUFFIX "${GODOT_SUFFIX}"
322336

323337
# Some IDE's respect this property to logically group targets
324338
FOLDER "godot-cpp"

cmake/web.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ function( web_generate )
2727
-sSIDE_MODULE
2828
-sSUPPORT_LONGJMP=wasm
2929
-fno-exceptions
30+
$<${THREADS_ENABLED}:-sUSE_PTHREADS=1>
3031
)
3132

3233
target_link_options( ${TARGET_NAME}

test/CMakeLists.txt

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ generate_doc_source( "${DOC_DATA_SOURCE}" "${DOC_XML}" )
1818

1919
foreach( TARGET_ALIAS template_debug template_release editor )
2020
set( TARGET_NAME "godot-cpp.test.${TARGET_ALIAS}" )
21-
set( LINK_TARGET "godot-cpp::${TARGET_ALIAS}" )
2221

2322
add_library( ${TARGET_NAME} SHARED EXCLUDE_FROM_ALL )
2423

@@ -31,20 +30,20 @@ foreach( TARGET_ALIAS template_debug template_release editor )
3130
src/tests.h
3231
)
3332

33+
set( OUTPUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/project/bin/" )
34+
3435
# conditionally add doc data to compile output
3536
if( TARGET_ALIAS MATCHES "editor|template_debug" )
3637
target_sources( ${TARGET_NAME} PRIVATE "${DOC_DATA_SOURCE}" )
37-
endif( )
38+
endif()
3839

40+
# Link to godot-cpp target
41+
set( LINK_TARGET "godot-cpp::${TARGET_ALIAS}" )
3942
target_link_libraries( ${TARGET_NAME} PRIVATE ${LINK_TARGET} )
4043

41-
### Get useful properties of the library
42-
get_target_property( GODOT_PLATFORM ${LINK_TARGET} GODOT_PLATFORM )
43-
get_target_property( GODOT_TARGET ${LINK_TARGET} GODOT_TARGET )
44-
get_target_property( GODOT_ARCH ${LINK_TARGET} GODOT_ARCH )
45-
46-
set( OUTPUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/project/bin/" )
47-
set( DEV_TAG "$<$<BOOL:${GODOT_DEV_BUILD}>:.dev>" )
44+
### Get useful properties from godot-cpp target
45+
get_target_property( GODOT_SUFFIX ${LINK_TARGET} GODOT_SUFFIX )
46+
get_target_property( OSX_ARCH ${LINK_TARGET} OSX_ARCHITECTURES )
4847

4948
set_target_properties( ${TARGET_NAME}
5049
PROPERTIES
@@ -66,29 +65,20 @@ foreach( TARGET_ALIAS template_debug template_release editor )
6665
PDB_OUTPUT_DIRECTORY "$<1:${OUTPUT_DIR}>" #MSVC Only, ignored on other platforms
6766

6867
PREFIX "lib"
69-
OUTPUT_NAME "gdexample.${GODOT_PLATFORM}.${GODOT_TARGET}${DEV_TAG}.${GODOT_ARCH}"
68+
OUTPUT_NAME "gdexample${GODOT_SUFFIX}"
7069

7170
# Some IDE's respect this property to logically group targets
7271
FOLDER "godot-cpp"
7372
)
7473

7574
# CMAKE_SYSTEM_NAME refers to the target system
7675
if( CMAKE_SYSTEM_NAME STREQUAL Darwin )
77-
get_target_property( OSX_ARCH ${LINK_TARGET} OSX_ARCHITECTURES )
78-
79-
set( OUTPUT_DIR "${OUTPUT_DIR}/libgdexample.macos.${TEST_TARGET}.framework")
80-
8176
set_target_properties( ${TARGET_NAME}
8277
PROPERTIES
83-
LIBRARY_OUTPUT_DIRECTORY "$<1:${OUTPUT_DIR}>"
84-
RUNTIME_OUTPUT_DIRECTORY "$<1:${OUTPUT_DIR}>"
85-
86-
OUTPUT_NAME "gdexample.macos.${TARGET_ALIAS}${DEV_TAG}"
8778
SUFFIX ""
88-
89-
#macos options
79+
OUTPUT_DIR "${OUTPUT_DIR}/libgdexample.macos.${TARGET_ALIAS}.framework"
9080
OSX_ARCHITECTURES "${OSX_ARCH}"
9181
)
92-
endif ()
82+
endif()
9383

9484
endforeach()

0 commit comments

Comments
 (0)