Skip to content

Commit f227a01

Browse files
committed
Fix Test CMake project for Windows and parametrize paths
1 parent a263344 commit f227a01

File tree

4 files changed

+65
-33
lines changed

4 files changed

+65
-33
lines changed

.github/workflows/ci.yml

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ jobs:
5959
6060
- name: Build test GDNative library
6161
run: |
62-
cd test && cmake -DCMAKE_BUILD_TYPE=Release .
62+
cd test && cmake -DCMAKE_BUILD_TYPE=Release -DGODOT_HEADERS_PATH="../godot-headers" -DCPP_BINDINGS_PATH=".." .
6363
make -j $(nproc)
6464
6565
linux-cmake-ninja:
@@ -83,7 +83,7 @@ jobs:
8383
8484
- name: Build test GDNative library
8585
run: |
86-
cd test && cmake -DCMAKE_BUILD_TYPE=Release -GNinja .
86+
cd test && cmake -DCMAKE_BUILD_TYPE=Release -DGODOT_HEADERS_PATH="../godot-headers" -DCPP_BINDINGS_PATH=".." -GNinja .
8787
cmake --build . -j $(nproc)
8888
8989
windows-msvc:
@@ -119,6 +119,25 @@ jobs:
119119
name: godot-cpp-windows-msvc2019-x86_64-release
120120
path: bin/libgodot-cpp.windows.release.64.lib
121121
if-no-files-found: error
122+
123+
windows-msvc-cmake:
124+
name: Build (Windows, MSVC, CMake)
125+
runs-on: windows-2019
126+
steps:
127+
- name: Checkout
128+
uses: actions/checkout@v2
129+
with:
130+
submodules: recursive
131+
132+
- name: Build godot-cpp
133+
run: |
134+
cmake -DCMAKE_BUILD_TYPE=Release -G"Visual Studio 16 2019" .
135+
cmake --build .
136+
137+
- name: Build test GDNative library
138+
run: |
139+
cd test && cmake -DCMAKE_BUILD_TYPE=Release -DGODOT_HEADERS_PATH="../godot-headers" -DCPP_BINDINGS_PATH=".." -G"Visual Studio 16 2019" .
140+
cmake --build .
122141
123142
windows-mingw:
124143
name: Build (Windows, MinGW)

CMakeLists.txt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@ 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+
set(BUILD_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin)
43+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${BUILD_PATH}")
44+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${BUILD_PATH}")
45+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${BUILD_PATH}")
46+
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${BUILD_PATH}")
47+
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH}")
48+
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${BUILD_PATH}")
49+
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH}")
50+
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${BUILD_PATH}")
51+
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH}")
52+
4253
# Default build type is Debug in the SConstruct
4354
if(CMAKE_BUILD_TYPE STREQUAL "")
4455
set(CMAKE_BUILD_TYPE Debug)
@@ -68,8 +79,8 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
6879
string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
6980
endif(CMAKE_BUILD_TYPE MATCHES Debug)
7081

71-
# Disable conversion warning, trunkation, unreferenced var, signed missmatch
72-
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /wd4244 /wd4305 /wd4101 /wd4018 /wd4267")
82+
# Disable conversion warning, truncation, unreferenced var, signed missmatch, different type
83+
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /wd4244 /wd4305 /wd4101 /wd4018 /wd4267 /wd4099")
7384

7485
# Todo: Check if needed.
7586
add_definitions(-DWIN32_LEAN_AND_MEAN -D_CRT_SECURE_NO_WARNINGS)
@@ -171,7 +182,6 @@ target_include_directories(${PROJECT_NAME}
171182
set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY COMPILE_FLAGS ${GODOT_COMPILE_FLAGS})
172183
set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY LINK_FLAGS ${GODOT_LINKER_FLAGS})
173184

174-
set_property(TARGET ${PROJECT_NAME} PROPERTY ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
175185

176186
# Create the correct name (godot.os.build_type.system_bits)
177187

test/.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# Generated directories with binaries
2+
build
3+
bin
4+
15
# Godot 4+ specific ignores
26
.godot/
37

test/CMakeLists.txt

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
project(godot-cpp-test)
22
cmake_minimum_required(VERSION 3.6)
33

4-
# Local dependency paths, adapt them to your setup
5-
set(GODOT_HEADERS_PATH ../godot-headers/)
6-
set(CPP_BINDINGS_PATH ../)
4+
set(GODOT_HEADERS_PATH ../godot-headers/ CACHE STRING "Path to Godot headers")
5+
set(CPP_BINDINGS_PATH ../ CACHE STRING "Path to C++ bindings")
76

87
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
9-
set(TARGET_PATH x11)
8+
set(TARGET_PATH x11)
109
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
11-
set(TARGET_PATH win64)
10+
set(TARGET_PATH win64)
1211
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
13-
set(TARGET_PATH osx)
12+
set(TARGET_PATH osx)
1413
else()
15-
message(FATAL_ERROR "Not implemented support for ${CMAKE_SYSTEM_NAME}")
14+
message(FATAL_ERROR "Not implemented support for ${CMAKE_SYSTEM_NAME}")
1615
endif()
1716

1817
# Change the output directory to the bin directory
@@ -37,7 +36,8 @@ set(GODOT_LINKER_FLAGS )
3736

3837
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
3938
# using Visual Studio C++
40-
set(GODOT_COMPILE_FLAGS "/EHsc /WX") # /GF /MP
39+
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /EHsc /WX") # /GF /MP
40+
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /DTYPED_METHOD_BIND")
4141

4242
if(CMAKE_BUILD_TYPE MATCHES Debug)
4343
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /MDd") # /Od /RTC1 /Zi
@@ -101,52 +101,51 @@ file(GLOB_RECURSE HEADERS include/*.h**)
101101
add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS})
102102

103103
target_include_directories(${PROJECT_NAME} SYSTEM
104-
PRIVATE
105-
${CPP_BINDINGS_PATH}/include
104+
PRIVATE
105+
${CPP_BINDINGS_PATH}/include
106106
${CPP_BINDINGS_PATH}/gen/include
107-
${GODOT_HEADERS_PATH}
107+
${GODOT_HEADERS_PATH}
108108
)
109109

110110
# Create the correct name (godot.os.build_type.system_bits)
111111
# Synchronized with godot-cpp's CMakeLists.txt
112112

113113
set(BITS 32)
114114
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
115-
set(BITS 64)
115+
set(BITS 64)
116116
endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
117117

118118
if(CMAKE_BUILD_TYPE MATCHES Debug)
119-
set(GODOT_CPP_BUILD_TYPE Debug)
119+
set(GODOT_CPP_BUILD_TYPE Debug)
120120
else()
121-
set(GODOT_CPP_BUILD_TYPE Release)
121+
set(GODOT_CPP_BUILD_TYPE Release)
122122
endif()
123123

124124
string(TOLOWER ${CMAKE_SYSTEM_NAME} SYSTEM_NAME)
125125
string(TOLOWER ${GODOT_CPP_BUILD_TYPE} BUILD_TYPE)
126126

127127
if(ANDROID)
128-
# Added the android abi after system name
129-
set(SYSTEM_NAME ${SYSTEM_NAME}.${ANDROID_ABI})
128+
# Added the android abi after system name
129+
set(SYSTEM_NAME ${SYSTEM_NAME}.${ANDROID_ABI})
130130
endif()
131131

132132
if(CMAKE_VERSION VERSION_GREATER "3.13")
133-
target_link_directories(${PROJECT_NAME}
134-
PRIVATE
135-
${CPP_BINDINGS_PATH}/bin/
136-
)
137-
target_link_libraries(${PROJECT_NAME}
138-
godot-cpp.${SYSTEM_NAME}.${BUILD_TYPE}$<$<NOT:$<PLATFORM_ID:Android>>:.${BITS}>
139-
)
133+
target_link_directories(${PROJECT_NAME}
134+
PRIVATE
135+
${CPP_BINDINGS_PATH}/bin/
136+
)
137+
138+
target_link_libraries(${PROJECT_NAME}
139+
godot-cpp.${SYSTEM_NAME}.${BUILD_TYPE}$<$<NOT:$<PLATFORM_ID:Android>>:.${BITS}>
140+
)
140141
else()
141-
target_link_libraries(${PROJECT_NAME}
142-
${CPP_BINDINGS_PATH}/bin/libgodot-cpp.${SYSTEM_NAME}.${BUILD_TYPE}$<$<NOT:$<PLATFORM_ID:Android>>:.${BITS}>.a
143-
)
142+
target_link_libraries(${PROJECT_NAME}
143+
${CPP_BINDINGS_PATH}/bin/libgodot-cpp.${SYSTEM_NAME}.${BUILD_TYPE}$<$<NOT:$<PLATFORM_ID:Android>>:.${BITS}>.a
144+
)
144145
endif()
145146

146147
# Add the compile flags
147148
set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY COMPILE_FLAGS ${GODOT_COMPILE_FLAGS})
148149
set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY LINK_FLAGS ${GODOT_LINKER_FLAGS})
149150

150151
set_property(TARGET ${PROJECT_NAME} PROPERTY OUTPUT_NAME "gdexample")
151-
152-

0 commit comments

Comments
 (0)