@@ -30,6 +30,7 @@ include( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/linux.cmake)
3030include ( ${CMAKE_CURRENT_SOURCE_DIR} /cmake/macos.cmake)
3131include ( ${CMAKE_CURRENT_SOURCE_DIR} /cmake/web.cmake)
3232include ( ${CMAKE_CURRENT_SOURCE_DIR} /cmake/windows.cmake)
33+ include ( ${CMAKE_CURRENT_SOURCE_DIR} /cmake/python_callouts.cmake)
3334
3435# Detect number of processors 
3536include (ProcessorCount)
@@ -109,7 +110,9 @@ function( godotcpp_options )
109110 #TODO threads 
110111 #TODO compiledb 
111112 #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"  )
113116
114117 set (GODOT_USE_HOT_RELOAD ""  CACHE  BOOL 
115118 "Enable the extra accounting required to support hot reload. (ON|OFF)" )
@@ -193,40 +196,44 @@ function( godotcpp_generate )
193196 set (GODOT_SYSTEM_HEADERS_ATTRIBUTE SYSTEM )
194197 endif  ()
195198
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)
202-  endif ()
199+  #[[ Configure Binding Variables ]] 
200+  # Generate Binding Parameters (True|False) 
201+  set ( GENERATE_BINDING_PARAMETERS "$<IF:$<BOOL:${GODOT_GENERATE_TEMPLATE_GET_NODE} >,True,False>"  )
203202
203+  # Bits (32|64) 
204+  math ( EXPR  BITS "${CMAKE_SIZEOF_VOID_P}  * 8"  ) # CMAKE_SIZEOF_VOID_P refers to target architecture. 
205+ 
206+  # API json File 
204207 set (GODOT_GDEXTENSION_API_FILE "${GODOT_GDEXTENSION_DIR} /extension_api.json" )
205-  if  ( NOT   " ${ GODOT_CUSTOM_API_FILE} "   STREQUAL   "" ) # User-defined override. 
208+  if (  GODOT_CUSTOM_API_FILE  ) # User-defined override. 
206209 set (GODOT_GDEXTENSION_API_FILE "${GODOT_CUSTOM_API_FILE} " )
207210 endif ()
208211
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" )
212+  # Build Profile 
213+  if ( GODOT_BUILD_PROFILE )
214+  message ( STATUS  "Using build profile to trim api file" )
215+  message ( "\t BUILD_PROFILE = '${GODOT_BUILD_PROFILE} '" )
216+  message ( "\t API_SOURCE = '${GODOT_GDEXTENSION_API_FILE} '" )
217+  build_profile_generate_trimmed_api(
218+  "${GODOT_BUILD_PROFILE} " 
219+  "${GODOT_GDEXTENSION_API_FILE} " 
220+  "${CMAKE_CURRENT_BINARY_DIR} /extension_api.json"  )
221+  set ( GODOT_GDEXTENSION_API_FILE "${CMAKE_CURRENT_BINARY_DIR} /extension_api.json"  )
214222 endif ()
215223
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-  )
224+  message ( STATUS  "GODOT_GDEXTENSION_API_FILE = '${GODOT_GDEXTENSION_API_FILE} '" )
221225
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-  )
226+  # generate the file list to use 
227+  binding_generator_get_file_list( GENERATED_FILES_LIST
228+  "${GODOT_GDEXTENSION_API_FILE} " 
229+  "${CMAKE_CURRENT_BINARY_DIR} "  )
230+ 
231+  binding_generator_generate_bindings(
232+  "${GODOT_GDEXTENSION_API_FILE} " 
233+  "${GENERATE_BINDING_PARAMETERS} " 
234+  "${BITS} " 
235+  "${GODOT_PRECISION} " 
236+  "${CMAKE_CURRENT_BINARY_DIR} "  )
230237
231238 ### Platform is derived from the toolchain target 
232239 # See GeneratorExpressions PLATFORM_ID and CMAKE_SYSTEM_NAME 
0 commit comments