Skip to content

Commit e417acf

Browse files
committed
Changes by gersemi
1 parent 7744772 commit e417acf

File tree

12 files changed

+357
-359
lines changed

12 files changed

+357
-359
lines changed

CMakeLists.txt

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,23 +37,25 @@ function is run.
3737
The CMake equivalent is below.
3838
]=======================================================================]
3939

40-
include( cmake/godotcpp.cmake )
40+
include(cmake/godotcpp.cmake)
4141

4242
godotcpp_options()
4343

4444
# Define our project.
45-
project( godot-cpp
46-
VERSION 4.4
47-
DESCRIPTION "C++ bindings for the Godot Engine's GDExtensions API."
48-
HOMEPAGE_URL "https://github.com/godotengine/godot-cpp"
49-
LANGUAGES CXX)
45+
project(
46+
godot-cpp
47+
VERSION 4.4
48+
DESCRIPTION "C++ bindings for the Godot Engine's GDExtensions API."
49+
HOMEPAGE_URL "https://github.com/godotengine/godot-cpp"
50+
LANGUAGES CXX
51+
)
5052

5153
compiler_detection()
5254
godotcpp_generate()
5355

5456
# Conditionally enable the godot-cpp.test.<target> integration testing targets
55-
if( GODOTCPP_ENABLE_TESTING )
56-
add_subdirectory( test )
57+
if(GODOTCPP_ENABLE_TESTING)
58+
add_subdirectory(test)
5759
endif()
5860

5961
# If this is the top level CMakeLists.txt, Generators which honor the

cmake/GodotCPPModule.cmake

Lines changed: 76 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -26,121 +26,130 @@ The build_profile.py has a __main__ and is used as a tool
2626
Its usage is listed as:
2727
$ python build_profile.py BUILD_PROFILE INPUT_JSON [OUTPUT_JSON]
2828
]]
29-
function( build_profile_generate_trimmed_api BUILD_PROFILE INPUT_JSON OUTPUT_JSON )
29+
function(build_profile_generate_trimmed_api BUILD_PROFILE INPUT_JSON OUTPUT_JSON)
3030
execute_process(
31-
COMMAND "${Python3_EXECUTABLE}"
32-
"${godot-cpp_SOURCE_DIR}/build_profile.py"
33-
"${BUILD_PROFILE}"
34-
"${INPUT_JSON}"
35-
"${OUTPUT_JSON}"
36-
WORKING_DIRECTORY ${godot-cpp_SOURCE_DIR}
31+
COMMAND
32+
"${Python3_EXECUTABLE}" "${godot-cpp_SOURCE_DIR}/build_profile.py" "${BUILD_PROFILE}" "${INPUT_JSON}"
33+
"${OUTPUT_JSON}"
34+
WORKING_DIRECTORY ${godot-cpp_SOURCE_DIR}
3735
)
38-
endfunction( )
39-
36+
endfunction()
4037

4138
#[[ Generate File List
4239
4340
Use the binding_generator.py Python script to determine the list of files that
4441
will be passed to the code generator using extension_api.json.
4542
NOTE: This happens for every configure.]]
46-
function( binding_generator_get_file_list OUT_VAR_NAME API_FILEPATH OUTPUT_DIR )
47-
43+
function(binding_generator_get_file_list OUT_VAR_NAME API_FILEPATH OUTPUT_DIR)
4844
# This code snippet will be squashed into a single line
4945
# The two strings make this a list, in CMake lists are semicolon delimited strings.
50-
set( PYTHON_SCRIPT
51-
"from binding_generator import print_file_list"
52-
"print_file_list( api_filepath='${API_FILEPATH}',
46+
set(PYTHON_SCRIPT
47+
"from binding_generator import print_file_list"
48+
"print_file_list( api_filepath='${API_FILEPATH}',
5349
output_dir='${OUTPUT_DIR}',
5450
headers=True,
55-
sources=True)")
56-
message( DEBUG "Python:\n${PYTHON_SCRIPT}" )
51+
sources=True)"
52+
)
53+
message(DEBUG "Python:\n${PYTHON_SCRIPT}")
5754

5855
# Strip newlines and whitespace to make it a one-liner.
59-
string( REGEX REPLACE "\n *" " " PYTHON_SCRIPT "${PYTHON_SCRIPT}" )
56+
string(REGEX REPLACE "\n *" " " PYTHON_SCRIPT "${PYTHON_SCRIPT}")
6057

61-
execute_process( COMMAND "${Python3_EXECUTABLE}" "-c" "${PYTHON_SCRIPT}"
62-
WORKING_DIRECTORY "${godot-cpp_SOURCE_DIR}"
63-
OUTPUT_VARIABLE GENERATED_FILES_LIST
64-
OUTPUT_STRIP_TRAILING_WHITESPACE
58+
execute_process(
59+
COMMAND "${Python3_EXECUTABLE}" "-c" "${PYTHON_SCRIPT}"
60+
WORKING_DIRECTORY "${godot-cpp_SOURCE_DIR}"
61+
OUTPUT_VARIABLE GENERATED_FILES_LIST
62+
OUTPUT_STRIP_TRAILING_WHITESPACE
6563
)
6664

6765
# Debug output
68-
message( DEBUG "FileList-Begin" )
69-
foreach( PATH ${GENERATED_FILES_LIST} )
70-
message( DEBUG ${PATH} )
66+
message(DEBUG "FileList-Begin")
67+
foreach(PATH ${GENERATED_FILES_LIST})
68+
message(DEBUG ${PATH})
7169
endforeach()
7270

7371
# Error out if the file list generator returned no files.
74-
list( LENGTH GENERATED_FILES_LIST LIST_LENGTH )
75-
if( NOT LIST_LENGTH GREATER 0 )
76-
message( FATAL_ERROR "File List Generation Failed")
72+
list(LENGTH GENERATED_FILES_LIST LIST_LENGTH)
73+
if(NOT LIST_LENGTH GREATER 0)
74+
message(FATAL_ERROR "File List Generation Failed")
7775
endif()
78-
message( STATUS "There are ${LIST_LENGTH} Files to generate" )
79-
80-
set( ${OUT_VAR_NAME} ${GENERATED_FILES_LIST} PARENT_SCOPE )
81-
endfunction( )
76+
message(STATUS "There are ${LIST_LENGTH} Files to generate")
8277

78+
set(${OUT_VAR_NAME} ${GENERATED_FILES_LIST} PARENT_SCOPE)
79+
endfunction()
8380

8481
#[[ Generate Bindings
8582
8683
Using the generated file list, use the binding_generator.py to generate the
8784
godot-cpp bindings. This will run at build time only if there are files
8885
missing. ]]
89-
function( binding_generator_generate_bindings API_FILE USE_TEMPLATE_GET_NODE, BITS, PRECISION, OUTPUT_DIR )
86+
function(
87+
binding_generator_generate_bindings
88+
API_FILE
89+
USE_TEMPLATE_GET_NODE,
90+
BITS,
91+
PRECISION,
92+
OUTPUT_DIR
93+
)
9094
# This code snippet will be squashed into a single line
91-
set( PYTHON_SCRIPT
92-
"from binding_generator import generate_bindings"
93-
"generate_bindings(
95+
set(PYTHON_SCRIPT
96+
"from binding_generator import generate_bindings"
97+
"generate_bindings(
9498
api_filepath='${API_FILE}',
9599
use_template_get_node='${USE_TEMPLATE_GET_NODE}',
96100
bits='${BITS}',
97101
precision='${PRECISION}',
98-
output_dir='${OUTPUT_DIR}')")
102+
output_dir='${OUTPUT_DIR}')"
103+
)
99104

100-
message( DEBUG "Python:\n${PYTHON_SCRIPT}" )
105+
message(DEBUG "Python:\n${PYTHON_SCRIPT}")
101106

102107
# Strip newlines and whitespace to make it a one-liner.
103-
string( REGEX REPLACE "\n *" " " PYTHON_SCRIPT "${PYTHON_SCRIPT}" )
104-
105-
add_custom_command(OUTPUT ${GENERATED_FILES_LIST}
106-
COMMAND "${Python3_EXECUTABLE}" "-c" "${PYTHON_SCRIPT}"
107-
VERBATIM
108-
WORKING_DIRECTORY ${godot-cpp_SOURCE_DIR}
109-
MAIN_DEPENDENCY ${GODOTCPP_GDEXTENSION_API_FILE}
110-
DEPENDS ${godot-cpp_SOURCE_DIR}/binding_generator.py
111-
COMMENT "Generating bindings"
108+
string(REGEX REPLACE "\n *" " " PYTHON_SCRIPT "${PYTHON_SCRIPT}")
109+
110+
add_custom_command(
111+
OUTPUT ${GENERATED_FILES_LIST}
112+
COMMAND "${Python3_EXECUTABLE}" "-c" "${PYTHON_SCRIPT}"
113+
VERBATIM
114+
WORKING_DIRECTORY ${godot-cpp_SOURCE_DIR}
115+
MAIN_DEPENDENCY ${GODOTCPP_GDEXTENSION_API_FILE}
116+
DEPENDS ${godot-cpp_SOURCE_DIR}/binding_generator.py
117+
COMMENT "Generating bindings"
112118
)
113-
endfunction( )
119+
endfunction()
114120

115121
#[[ Generate doc_data.cpp
116122
The documentation displayed in the Godot editor is compiled into the extension.
117123
It takes a list of XML source files, and transforms them into a cpp file that
118124
is added to the sources list.]]
119-
function( generate_doc_source OUTPUT_PATH SOURCES )
125+
function(generate_doc_source OUTPUT_PATH SOURCES)
120126
# Transform SOURCES CMake LIST
121127
# quote each path with ''
122128
# join with , to transform into a python list minus the surrounding []
123-
set( PYTHON_LIST "${SOURCES}")
124-
list( TRANSFORM PYTHON_LIST REPLACE "(.*\.xml)" "'\\1'" )
125-
list( JOIN PYTHON_LIST "," PYTHON_LIST )
129+
set(PYTHON_LIST "${SOURCES}")
130+
list(TRANSFORM PYTHON_LIST REPLACE "(.*\.xml)" "'\\1'")
131+
list(JOIN PYTHON_LIST "," PYTHON_LIST)
126132

127133
get_filename_component(OUTPUT_DIR "${OUTPUT_PATH}" DIRECTORY)
128-
file(MAKE_DIRECTORY ${OUTPUT_DIR} )
134+
file(MAKE_DIRECTORY ${OUTPUT_DIR})
129135

130136
# Python one-liner to run our command
131137
# lists in CMake are just strings delimited by ';', so this works.
132-
set( PYTHON_SCRIPT "from doc_source_generator import generate_doc_source"
133-
"generate_doc_source( '${OUTPUT_PATH}', [${PYTHON_LIST}] )" )
134-
135-
add_custom_command( OUTPUT "${OUTPUT_PATH}"
136-
COMMAND "${Python3_EXECUTABLE}" "-c" "${PYTHON_SCRIPT}"
137-
VERBATIM
138-
WORKING_DIRECTORY "${godot-cpp_SOURCE_DIR}"
139-
DEPENDS
138+
set(PYTHON_SCRIPT
139+
"from doc_source_generator import generate_doc_source"
140+
"generate_doc_source( '${OUTPUT_PATH}', [${PYTHON_LIST}] )"
141+
)
142+
143+
add_custom_command(
144+
OUTPUT "${OUTPUT_PATH}"
145+
COMMAND "${Python3_EXECUTABLE}" "-c" "${PYTHON_SCRIPT}"
146+
VERBATIM
147+
WORKING_DIRECTORY "${godot-cpp_SOURCE_DIR}"
148+
DEPENDS
140149
DEPENDS #
141150
"${godot-cpp_SOURCE_DIR}/doc_source_generator.py"
142151
"${SOURCES}"
143-
COMMENT "Generating: ${OUTPUT_PATH}"
152+
COMMENT "Generating: ${OUTPUT_PATH}"
144153
)
145154
endfunction()
146155

@@ -149,22 +158,22 @@ A simpler interface to add xml files as doc source to a output target.
149158
TARGET: The gdexension library target
150159
SOURCES: a list of xml files to use for source generation and inclusion.
151160
This function also adds a doc_gen target to test source generation.]]
152-
function( target_doc_sources TARGET SOURCES )
161+
function(target_doc_sources TARGET SOURCES)
153162
# set the generated file name
154-
set( DOC_SOURCE_FILE "${CMAKE_CURRENT_BINARY_DIR}/gen/doc_source.cpp" )
163+
set(DOC_SOURCE_FILE "${CMAKE_CURRENT_BINARY_DIR}/gen/doc_source.cpp")
155164

156165
# Create the file generation target, this won't be triggered unless a target
157166
# that depends on DOC_SOURCE_FILE is built
158167
generate_doc_source( "${DOC_SOURCE_FILE}" ${SOURCES} )
159168

160169
# Add DOC_SOURCE_FILE as a dependency to TARGET
161-
target_sources( ${TARGET} PRIVATE "${DOC_SOURCE_FILE}" )
170+
target_sources(${TARGET} PRIVATE "${DOC_SOURCE_FILE}")
162171

163172
# Create a dummy target that depends on the source so that users can
164173
# test the file generation task.
165-
if( TARGET doc_gen )
174+
if(TARGET doc_gen)
166175
else()
167-
add_custom_target( doc_gen )
176+
add_custom_target(doc_gen)
168177
endif()
169-
target_sources( doc_gen PRIVATE "${DOC_SOURCE_FILE}" )
178+
target_sources(doc_gen PRIVATE "${DOC_SOURCE_FILE}")
170179
endfunction()

cmake/android.cmake

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,12 @@ Android platforms.
2525
There is further information and examples in the doc/cmake.rst file.
2626
2727
]=======================================================================]
28-
function( android_options )
28+
function(android_options)
2929
# Android Options
3030
endfunction()
3131

32-
function( android_generate )
33-
target_compile_definitions(${TARGET_NAME}
34-
PUBLIC
35-
ANDROID_ENABLED
36-
UNIX_ENABLED
37-
)
32+
function(android_generate)
33+
target_compile_definitions(${TARGET_NAME} PUBLIC ANDROID_ENABLED UNIX_ENABLED)
3834

3935
common_compiler_flags()
4036
endfunction()

cmake/common_compiler_flags.cmake

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,20 @@ features. For target platform specific flags look to each of the
1010
]=======================================================================]
1111

1212
#[[ Compiler Configuration, not to be confused with build targets ]]
13-
set( DEBUG_SYMBOLS "$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>" )
13+
set(DEBUG_SYMBOLS "$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>")
1414

1515
#[[ Compiler Identification ]]
16-
set( IS_CLANG "$<CXX_COMPILER_ID:Clang>" )
17-
set( IS_APPLECLANG "$<CXX_COMPILER_ID:AppleClang>" )
18-
set( IS_GNU "$<CXX_COMPILER_ID:GNU>" )
19-
set( IS_MSVC "$<CXX_COMPILER_ID:MSVC>" )
20-
set( NOT_MSVC "$<NOT:$<CXX_COMPILER_ID:MSVC>>" )
21-
22-
set( GNU_LT_V8 "$<VERSION_LESS:$<CXX_COMPILER_VERSION>,8>" )
23-
set( GNU_GE_V9 "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,9>" )
24-
set( GNU_GT_V11 "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,11>" )
25-
set( GNU_LT_V11 "$<VERSION_LESS:$<CXX_COMPILER_VERSION>,11>" )
26-
set( GNU_GE_V12 "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,12>" )
16+
set(IS_CLANG "$<CXX_COMPILER_ID:Clang>")
17+
set(IS_APPLECLANG "$<CXX_COMPILER_ID:AppleClang>")
18+
set(IS_GNU "$<CXX_COMPILER_ID:GNU>")
19+
set(IS_MSVC "$<CXX_COMPILER_ID:MSVC>")
20+
set(NOT_MSVC "$<NOT:$<CXX_COMPILER_ID:MSVC>>")
21+
22+
set(GNU_LT_V8 "$<VERSION_LESS:$<CXX_COMPILER_VERSION>,8>")
23+
set(GNU_GE_V9 "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,9>")
24+
set(GNU_GT_V11 "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,11>")
25+
set(GNU_LT_V11 "$<VERSION_LESS:$<CXX_COMPILER_VERSION>,11>")
26+
set(GNU_GE_V12 "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,12>")
2727

2828
#[[ Check for clang-cl with MSVC frontend
2929
The compiler is tested and set when the project command is called.
@@ -33,19 +33,18 @@ until CMake 3.30 so we can't use it yet.
3333
3434
So to support clang downloaded from llvm.org which uses the MSVC frontend
3535
by default, we need to test for it. ]]
36-
function( compiler_detection )
37-
if( ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang )
38-
if( ${CMAKE_CXX_COMPILER_FRONTEND_VARIANT} STREQUAL MSVC )
39-
message( "Using clang-cl" )
40-
set( IS_CLANG "0" PARENT_SCOPE )
41-
set( IS_MSVC "1" PARENT_SCOPE )
42-
set( NOT_MSVC "0" PARENT_SCOPE )
43-
endif ()
44-
endif ()
45-
endfunction( )
46-
47-
function( common_compiler_flags )
36+
function(compiler_detection)
37+
if(${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
38+
if(${CMAKE_CXX_COMPILER_FRONTEND_VARIANT} STREQUAL MSVC)
39+
message("Using clang-cl")
40+
set(IS_CLANG "0" PARENT_SCOPE)
41+
set(IS_MSVC "1" PARENT_SCOPE)
42+
set(NOT_MSVC "0" PARENT_SCOPE)
43+
endif()
44+
endif()
45+
endfunction()
4846

47+
function(common_compiler_flags)
4948
# gersemi: off
5049
# These compiler options reflect what is in godot/SConstruct.
5150
target_compile_options(

cmake/emsdkHack.cmake

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,18 @@ More information on cmake's `code injection`_
2323
2424
Overwrite Shared Library Properties to allow shared libs to be generated.
2525
]=======================================================================]
26-
if( EMSCRIPTEN )
26+
if(EMSCRIPTEN)
2727
set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
2828
set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-sSIDE_MODULE=1")
2929
set(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "-sSIDE_MODULE=1")
3030
set(CMAKE_SHARED_LIBRARY_SUFFIX) # remove the suffix from the shared lib
31-
set(CMAKE_STRIP FALSE) # used by default in pybind11 on .so modules
31+
set(CMAKE_STRIP FALSE) # used by default in pybind11 on .so modules
3232

3333
# The Emscripten toolchain sets the default value for EMSCRIPTEN_SYSTEM_PROCESSOR to x86
3434
# and CMAKE_SYSTEM_PROCESSOR to this value. I don't want that.
35-
set(CMAKE_SYSTEM_PROCESSOR "wasm32" )
35+
set(CMAKE_SYSTEM_PROCESSOR "wasm32")
3636
# the above prevents the need for logic like:
3737
#if( ${CMAKE_SYSTEM_NAME} STREQUAL Emscripten )
3838
# set( SYSTEM_ARCH wasm32 )
3939
#endif ()
40-
endif ()
40+
endif()

0 commit comments

Comments
 (0)