@@ -30,6 +30,7 @@ include( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/linux.cmake)
30
30
include ( ${CMAKE_CURRENT_SOURCE_DIR} /cmake/macos.cmake)
31
31
include ( ${CMAKE_CURRENT_SOURCE_DIR} /cmake/web.cmake)
32
32
include ( ${CMAKE_CURRENT_SOURCE_DIR} /cmake/windows.cmake)
33
+ include ( ${CMAKE_CURRENT_SOURCE_DIR} /cmake/python_callouts.cmake)
33
34
34
35
# Detect number of processors
35
36
include (ProcessorCount)
@@ -109,7 +110,9 @@ function( godotcpp_options )
109
110
#TODO threads
110
111
#TODO compiledb
111
112
#TODO compiledb_file
112
- #TODO build_profile
113
+
114
+ set ( GODOT_BUILD_PROFILE "" CACHE PATH
115
+ "Path to a file containing a feature build profile" )
113
116
114
117
set (GODOT_USE_HOT_RELOAD "" CACHE BOOL
115
118
"Enable the extra accounting required to support hot reload. (ON|OFF)" )
@@ -193,40 +196,47 @@ function( godotcpp_generate )
193
196
set (GODOT_SYSTEM_HEADERS_ATTRIBUTE SYSTEM )
194
197
endif ()
195
198
196
- #[[ Generate Bindings ]]
197
- if (NOT DEFINED BITS)
198
- set (BITS 32)
199
- if (CMAKE_SIZEOF_VOID_P EQUAL 8)
200
- set (BITS 64)
201
- endif (CMAKE_SIZEOF_VOID_P EQUAL 8)
199
+ #[[ Configure Binding Variables ]]
200
+ # Generate Binding Parameters (True|False)
201
+ set ( USE_TEMPLATE_GET_NODE "False" )
202
+ if ( GODOT_GENERATE_TEMPLATE_GET_NODE )
203
+ set ( USE_TEMPLATE_GET_NODE "True" )
202
204
endif ()
203
205
206
+ # Bits (32|64)
207
+ math ( EXPR BITS "${CMAKE_SIZEOF_VOID_P} * 8" ) # CMAKE_SIZEOF_VOID_P refers to target architecture.
208
+
209
+ # API json File
204
210
set (GODOT_GDEXTENSION_API_FILE "${GODOT_GDEXTENSION_DIR} /extension_api.json" )
205
- if ( NOT " ${ GODOT_CUSTOM_API_FILE} " STREQUAL "" ) # User-defined override.
211
+ if ( GODOT_CUSTOM_API_FILE ) # User-defined override.
206
212
set (GODOT_GDEXTENSION_API_FILE "${GODOT_CUSTOM_API_FILE} " )
207
213
endif ()
208
214
209
- # Code Generation option
210
- if (GODOT_GENERATE_TEMPLATE_GET_NODE)
211
- set (GENERATE_BINDING_PARAMETERS "True" )
212
- else ()
213
- set (GENERATE_BINDING_PARAMETERS "False" )
215
+ # Build Profile
216
+ if ( GODOT_BUILD_PROFILE )
217
+ message ( STATUS "Using build profile to trim api file" )
218
+ message ( "\t BUILD_PROFILE = '${GODOT_BUILD_PROFILE} '" )
219
+ message ( "\t API_SOURCE = '${GODOT_GDEXTENSION_API_FILE} '" )
220
+ build_profile_generate_trimmed_api(
221
+ "${GODOT_BUILD_PROFILE} "
222
+ "${GODOT_GDEXTENSION_API_FILE} "
223
+ "${CMAKE_CURRENT_BINARY_DIR} /extension_api.json" )
224
+ set ( GODOT_GDEXTENSION_API_FILE "${CMAKE_CURRENT_BINARY_DIR} /extension_api.json" )
214
225
endif ()
215
226
216
- execute_process (COMMAND "${Python3_EXECUTABLE} " "-c" "import binding_generator; binding_generator.print_file_list('${GODOT_GDEXTENSION_API_FILE} ', '${CMAKE_CURRENT_BINARY_DIR} ', headers=True, sources=True)"
217
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
218
- OUTPUT_VARIABLE GENERATED_FILES_LIST
219
- OUTPUT_STRIP_TRAILING_WHITESPACE
220
- )
227
+ message ( STATUS "GODOT_GDEXTENSION_API_FILE = '${GODOT_GDEXTENSION_API_FILE} '" )
221
228
222
- add_custom_command (OUTPUT ${GENERATED_FILES_LIST}
223
- COMMAND "${Python3_EXECUTABLE} " "-c" "import binding_generator; binding_generator.generate_bindings('${GODOT_GDEXTENSION_API_FILE} ', '${GENERATE_BINDING_PARAMETERS} ', '${BITS} ', '${GODOT_PRECISION} ', '${CMAKE_CURRENT_BINARY_DIR} ')"
224
- VERBATIM
225
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
226
- MAIN_DEPENDENCY ${GODOT_GDEXTENSION_API_FILE}
227
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /binding_generator.py
228
- COMMENT "Generating bindings"
229
- )
229
+ # generate the file list to use
230
+ binding_generator_get_file_list( GENERATED_FILES_LIST
231
+ "${GODOT_GDEXTENSION_API_FILE} "
232
+ "${CMAKE_CURRENT_BINARY_DIR} " )
233
+
234
+ binding_generator_generate_bindings(
235
+ "${GODOT_GDEXTENSION_API_FILE} "
236
+ "${USE_TEMPLATE_GET_NODE} "
237
+ "${BITS} "
238
+ "${GODOT_PRECISION} "
239
+ "${CMAKE_CURRENT_BINARY_DIR} " )
230
240
231
241
### Platform is derived from the toolchain target
232
242
# See GeneratorExpressions PLATFORM_ID and CMAKE_SYSTEM_NAME
0 commit comments