Skip to content

Commit a44e9aa

Browse files
authored
Merge pull request #602 from vnen/gdnative-extensions
Bindings for the new extension system
2 parents ee70866 + d5e0fc8 commit a44e9aa

File tree

118 files changed

+15239
-12174
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

118 files changed

+15239
-12174
lines changed

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
# Godot auto generated files
2+
*.gen.*
3+
.import/
4+
.godot/
5+
/gen/
6+
17
# Misc
28
logs/*
39

@@ -17,6 +23,7 @@ bin
1723
*.creator.user
1824
*.files
1925
*.includes
26+
*.idb
2027

2128
# Gprof output
2229
gmon.out

CMakeLists.txt

Lines changed: 21 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,65 @@
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)
3838
cmake_minimum_required(VERSION 3.6)
3939

4040
option(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
5543
if(CMAKE_BUILD_TYPE STREQUAL "")
5644
set(CMAKE_BUILD_TYPE Debug)
5745
endif()
5846

5947
if(CMAKE_BUILD_TYPE MATCHES Debug)
6048
add_definitions(-D_DEBUG)
49+
add_definitions(-DDEBUG_ENABLED)
50+
add_definitions(-DDEBUG_METHODS_ENABLED)
6151
else()
6252
add_definitions(-DNDEBUG)
6353
endif(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)
6757
set(CMAKE_CXX_STANDARD_REQUIRED ON)
6858
set(CMAKE_CXX_EXTENSIONS OFF)
6959

7060
# Input from user for godot headers and the api file
7161
set(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

7464
set(GODOT_COMPILE_FLAGS )
7565
set(GODOT_LINKER_FLAGS )
@@ -140,28 +130,18 @@ else()
140130
set(GENERATE_BINDING_PARAMETERS "False")
141131
endif()
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
172152
add_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})
178158
target_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

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
GENERATE_BINDINGS = no
1+
GENERATE_BINDINGS = auto
22
HEADERS = godot-headers
33
TARGET = debug
44
USE_CLANG = no

0 commit comments

Comments
 (0)