11# cmake arguments
22# CMAKE_BUILD_TYPE: Compilation target (Debug or Release defaults to Debug)
3- #
3+ #
44# godot-cpp cmake arguments
55# GODOT_HEADERS_DIR: This is where the gdnative include folder is (godot_source/modules/gdnative/include)
66# GODOT_CUSTOM_API_FILE: This is if you have another path for the godot_api.json
7- #
7+ #
88# Android cmake arguments
99# CMAKE_TOOLCHAIN_FILE: The path to the android cmake toolchain ($ANDROID_NDK/build/cmake/android.toolchain.cmake)
1010# ANDROID_NDK: The path to the android ndk root folder
1111# ANDROID_TOOLCHAIN_NAME: The android toolchain (arm-linux-androideabi-4.9 or aarch64-linux-android-4.9 or x86-4.9 or x86_64-4.9)
1212# ANDROID_PLATFORM: The android platform version (android-23)
1313# More info here: https://godot.readthedocs.io/en/latest/development/compiling/compiling_for_android.html
14- #
14+ #
1515# Examples
16- #
16+ #
1717# Builds a debug version:
1818# cmake .
1919# cmake --build .
20- #
20+ #
2121# Builds a release version with clang
2222# CC=/usr/bin/clang CXX=/usr/bin/clang++ cmake -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" .
2323# cmake --build .
24- #
24+ #
2525# Builds an android armeabi-v7a debug version:
2626# cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake -DANDROID_NDK=$ANDROID_NDK \
2727# -DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.9 -DANDROID_PLATFORM=android-23 -DCMAKE_BUILD_TYPE=Debug .
2828# cmake --build .
29- #
29+ #
3030# Protip
3131# Generate the buildfiles in a sub directory to not clutter the root directory with build files:
3232# mkdir build && cd build && cmake -G "Unix Makefiles" .. && cmake --build .
33- #
33+ #
3434# Todo
3535# Test build for Windows, Mac and mingw.
3636
37- project (godot-cpp)
37+ project (godot-cpp LANGUAGES CXX )
3838cmake_minimum_required (VERSION 3.6)
3939
4040option (GENERATE_TEMPLATE_GET_NODE "Generate a template version of the Node class's get_node." ON )
4141
42- # Change the output directory to the bin directory
43- set (BUILD_PATH ${CMAKE_SOURCE_DIR} /bin)
44- set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${BUILD_PATH} " )
45- set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${BUILD_PATH} " )
46- set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${BUILD_PATH} " )
47- SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${BUILD_PATH} " )
48- SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH} " )
49- SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${BUILD_PATH} " )
50- SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH} " )
51- SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${BUILD_PATH} " )
52- SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH} " )
53-
5442# Default build type is Debug in the SConstruct
5543if (CMAKE_BUILD_TYPE STREQUAL "" )
5644 set (CMAKE_BUILD_TYPE Debug)
5745endif ()
5846
5947if (CMAKE_BUILD_TYPE MATCHES Debug)
6048 add_definitions (-D_DEBUG)
49+ add_definitions (-DDEBUG_ENABLED)
50+ add_definitions (-DDEBUG_METHODS_ENABLED)
6151else ()
6252 add_definitions (-DNDEBUG)
6353endif (CMAKE_BUILD_TYPE MATCHES Debug)
6454
65- # Set the c++ standard to c++14
66- set (CMAKE_CXX_STANDARD 14 )
55+ # Set the c++ standard to c++17
56+ set (CMAKE_CXX_STANDARD 17 )
6757set (CMAKE_CXX_STANDARD_REQUIRED ON )
6858set (CMAKE_CXX_EXTENSIONS OFF )
6959
7060# Input from user for godot headers and the api file
7161set (GODOT_HEADERS_DIR "godot-headers" CACHE STRING "" )
72- set (GODOT_CUSTOM_API_FILE "godot-headers/api .json" CACHE STRING "" )
62+ set (GODOT_CUSTOM_API_FILE "godot-headers/extension_api .json" CACHE STRING "" )
7363
7464set (GODOT_COMPILE_FLAGS )
7565set (GODOT_LINKER_FLAGS )
@@ -140,28 +130,18 @@ else()
140130 set (GENERATE_BINDING_PARAMETERS "False" )
141131endif ()
142132
143- message (STATUS "Generating Bindings" )
144- execute_process (COMMAND "${PYTHON_EXECUTABLE} " "-c" "import binding_generator; binding_generator.print_file_list(\" ${GODOT_CUSTOM_API_FILE} \" , \" ${CMAKE_CURRENT_BINARY_DIR} \" , headers=True)"
145- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
146- RESULT_VARIABLE HEADERS_FILE_LIST_RESULT
147- OUTPUT_VARIABLE HEADERS_FILE_LIST
148- )
149- set (HEADERS_FILE_LIST ${HEADERS_FILE_LIST} )
150-
151- execute_process (COMMAND "${PYTHON_EXECUTABLE} " "-c" "import binding_generator; binding_generator.print_file_list(\" ${GODOT_CUSTOM_API_FILE} \" , \" ${CMAKE_CURRENT_BINARY_DIR} \" , sources=True)"
133+ execute_process (COMMAND "${PYTHON_EXECUTABLE} " "-c" "import binding_generator; binding_generator.print_file_list(\" ${GODOT_CUSTOM_API_FILE} \" , \" ${CMAKE_CURRENT_BINARY_DIR} \" , headers=True, sources=True)"
152134 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
153- RESULT_VARIABLE SOURCES_FILE_LIST_RESULT
154- OUTPUT_VARIABLE SOURCES_FILE_LIST
135+ OUTPUT_VARIABLE GENERATED_FILES_LIST
155136)
156- set (SOURCES_FILE_LIST ${SOURCES_FILE_LIST} )
157137
158- add_custom_command (OUTPUT ${HEADERS_FILE_LIST} ${SOURCES_FILE_LIST }
138+ add_custom_command (OUTPUT ${GENERATED_FILES_LIST }
159139 COMMAND "${PYTHON_EXECUTABLE} " "-c" "import binding_generator; binding_generator.generate_bindings(\" ${GODOT_CUSTOM_API_FILE} \" , \" ${GENERATE_BINDING_PARAMETERS} \" , \" ${CMAKE_CURRENT_BINARY_DIR} \" )"
160140 VERBATIM
161141 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
162142 MAIN_DEPENDENCY ${GODOT_CUSTOM_API_FILE}
163143 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /binding_generator.py
164- COMMENT Generating Bindings
144+ COMMENT " Generating bindings"
165145)
166146
167147# Get Sources
@@ -171,15 +151,14 @@ file(GLOB_RECURSE HEADERS include/*.h**)
171151# Define our godot-cpp library
172152add_library (${PROJECT_NAME}
173153 ${SOURCES}
174- ${SOURCES_FILE_LIST}
175154 ${HEADERS}
176- ${HEADERS_FILE_LIST }
155+ ${GENERATED_FILES_LIST }
177156)
157+ add_library (godot::cpp ALIAS ${PROJECT_NAME} )
178158target_include_directories (${PROJECT_NAME}
179159 PUBLIC
180160 include
181- include /core
182- ${CMAKE_CURRENT_BINARY_DIR} /include /gen/
161+ ${CMAKE_CURRENT_BINARY_DIR} /gen/include
183162)
184163
185164# Put godot headers as SYSTEM PUBLIC to exclude warnings from irrelevant headers
0 commit comments