From cddf52c31ef35e4219a51cd61ab2a8ba5a4e4091 Mon Sep 17 00:00:00 2001 From: oleg Date: Thu, 25 Feb 2021 19:50:18 +0300 Subject: [PATCH 1/9] Test CMake project with CI --- .github/workflows/ci.yml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a3c1ca61e..3f2f66a0a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,6 +38,41 @@ jobs: path: bin/libgodot-cpp.linux.release.64.a if-no-files-found: error + linux-cmake: + name: Build (Linux, GCC, CMake) + runs-on: ubuntu-16.04 + steps: + - name: Checkout + uses: actions/checkout@v2.3.4 + with: + submodules: recursive + + - name: Set up Python (for SCons) + uses: actions/setup-python@v2 + with: + python-version: '3.9.1' + + - name: Install dependencies + run: | + sudo apt-get update -qq + sudo apt-get install -qqq build-essential pkg-config cmake + python -m pip install scons + curl -LO https://downloads.tuxfamily.org/godotengine/3.2.3/Godot_v3.2.3-stable_linux_server.64.zip + unzip Godot_v3.2.3-stable_linux_server.64.zip + + - name: Build godot-cpp + run: | + cmake -DCMAKE_BUILD_TYPE=Release . + make -j $(nproc) + + - name: Build test GDNative library + run: | + scons target=release platform=linux bits=64 -j $(nproc) -C test + + - name: Run test GDNative library + run: | + ./Godot_v3.2.3-stable_linux_server.64 --path test -s script.gd + windows-msvc: name: Build (Windows, MSVC) runs-on: windows-2019 From 9070ef6417735662787197370bfcba24b57340af Mon Sep 17 00:00:00 2001 From: oleg Date: Mon, 1 Mar 2021 13:00:17 +0300 Subject: [PATCH 2/9] Use cmake to build GDNative test library --- .github/workflows/ci.yml | 9 +-- test/CMakeLists.txt | 153 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 155 insertions(+), 7 deletions(-) create mode 100644 test/CMakeLists.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3f2f66a0a..4e71d9af0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,16 +47,10 @@ jobs: with: submodules: recursive - - name: Set up Python (for SCons) - uses: actions/setup-python@v2 - with: - python-version: '3.9.1' - - name: Install dependencies run: | sudo apt-get update -qq sudo apt-get install -qqq build-essential pkg-config cmake - python -m pip install scons curl -LO https://downloads.tuxfamily.org/godotengine/3.2.3/Godot_v3.2.3-stable_linux_server.64.zip unzip Godot_v3.2.3-stable_linux_server.64.zip @@ -67,7 +61,8 @@ jobs: - name: Build test GDNative library run: | - scons target=release platform=linux bits=64 -j $(nproc) -C test + cd test && cmake -DCMAKE_BUILD_TYPE=Release . + make -j $(nproc) - name: Run test GDNative library run: | diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 000000000..ae1bdf1f9 --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,153 @@ +project(godot-cpp-test) +cmake_minimum_required(VERSION 3.6) + +# Local dependency paths, adapt them to your setup +set(GODOT_HEADERS_PATH ../godot-headers/) +set(CPP_BINDINGS_PATH ../) + +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(TARGET_PATH x11) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(TARGET_PATH win64) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(TARGET_PATH osx) +else() + message(FATAL_ERROR "Not implemented support for ${CMAKE_SYSTEM_NAME}") +endif() + +# Change the output directory to the bin directory +set(BUILD_PATH ${CMAKE_SOURCE_DIR}/bin/${TARGET_PATH}) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${BUILD_PATH}") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${BUILD_PATH}") +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${BUILD_PATH}") +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${BUILD_PATH}") +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH}") +SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${BUILD_PATH}") +SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH}") +SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${BUILD_PATH}") +SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH}") + +# Set the c++ standard to c++14 +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +set(GODOT_COMPILE_FLAGS ) +set(GODOT_LINKER_FLAGS ) + +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") + # using Visual Studio C++ + set(GODOT_COMPILE_FLAGS "/EHsc /WX") # /GF /MP + + if(CMAKE_BUILD_TYPE MATCHES Debug) + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /MDd") # /Od /RTC1 /Zi + else() + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /MD /O2") # /Oy /GL /Gy + STRING(REGEX REPLACE "/RTC(su|[1su])" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) + endif(CMAKE_BUILD_TYPE MATCHES Debug) + + # Disable conversion warning, trunkation, unreferenced var, signed missmatch + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /wd4244 /wd4305 /wd4101 /wd4018 /wd4267") + + # Todo: Check if needed. + add_definitions(-DWIN32_LEAN_AND_MEAN -D_CRT_SECURE_NO_WARNINGS) + + # Unkomment for warning level 4 + #if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") + # string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + #endif() + +else() + +#elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + # using Clang +#elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + # using GCC and maybe MinGW? + + set(GODOT_LINKER_FLAGS "-static-libgcc -static-libstdc++ -Wl,-R,'$$ORIGIN'") + + # Hmm.. maybe to strikt? + set(GODOT_COMPILE_FLAGS "-fPIC -g -Wwrite-strings") + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wchar-subscripts -Wcomment -Wdisabled-optimization") + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wformat -Wformat=2 -Wformat-security -Wformat-y2k") + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wimport -Winit-self -Winline -Winvalid-pch -Werror") + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wmissing-braces -Wmissing-format-attribute") + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wpointer-arith") + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wredundant-decls -Wreturn-type -Wsequence-point") + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wswitch -Wswitch-enum -Wtrigraphs") + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused-label") + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wunused-value -Wvariadic-macros -Wvolatile-register-var -Wno-error=attributes") + + # -Wshadow -Wextra -Wall -Weffc++ -Wfloat-equal -Wstack-protector -Wunused-parameter -Wsign-compare -Wunused-variable -Wcast-align + # -Wunused-function -Wstrict-aliasing -Wstrict-aliasing=2 -Wmissing-field-initializers + + if(NOT CMAKE_SYSTEM_NAME STREQUAL "Android") + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wno-ignored-attributes") + endif() + + if(CMAKE_BUILD_TYPE MATCHES Debug) + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -fno-omit-frame-pointer -O0") + else() + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -O3") + endif(CMAKE_BUILD_TYPE MATCHES Debug) +endif() + +# Get Sources +file(GLOB_RECURSE SOURCES src/*.c**) +file(GLOB_RECURSE HEADERS include/*.h**) + +# Define our godot-cpp library +add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS}) + +target_include_directories(${PROJECT_NAME} SYSTEM + PRIVATE + ${CPP_BINDINGS_PATH}/include + ${CPP_BINDINGS_PATH}/include/core + ${CPP_BINDINGS_PATH}/include/gen + ${GODOT_HEADERS_PATH} +) + +# Create the correct name (godot.os.build_type.system_bits) +# Synchronized with godot-cpp's CMakeLists.txt + +set(BITS 32) +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(BITS 64) +endif(CMAKE_SIZEOF_VOID_P EQUAL 8) + +if(CMAKE_BUILD_TYPE MATCHES Debug) + set(GODOT_CPP_BUILD_TYPE Debug) +else() + set(GODOT_CPP_BUILD_TYPE Release) +endif() + +string(TOLOWER ${CMAKE_SYSTEM_NAME} SYSTEM_NAME) +string(TOLOWER ${GODOT_CPP_BUILD_TYPE} BUILD_TYPE) + +if(ANDROID) + # Added the android abi after system name + set(SYSTEM_NAME ${SYSTEM_NAME}.${ANDROID_ABI}) +endif() + +if(CMAKE_VERSION VERSION_GREATER "3.13") + target_link_directories(${PROJECT_NAME} + PRIVATE + ${CPP_BINDINGS_PATH}/bin/ + ) + target_link_libraries(${PROJECT_NAME} + godot-cpp.${SYSTEM_NAME}.${BUILD_TYPE}$<$>:.${BITS}> + ) +else() + target_link_libraries(${PROJECT_NAME} + ${CPP_BINDINGS_PATH}/bin/libgodot-cpp.${SYSTEM_NAME}.${BUILD_TYPE}$<$>:.${BITS}>.a + ) +endif() + +# Add the compile flags +set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY COMPILE_FLAGS ${GODOT_COMPILE_FLAGS}) +set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY LINK_FLAGS ${GODOT_LINKER_FLAGS}) + +set_property(TARGET ${PROJECT_NAME} PROPERTY OUTPUT_NAME "gdexample") + + From 3f94907376013136629d2dbe051e78a6dfa07718 Mon Sep 17 00:00:00 2001 From: O01eg Date: Fri, 14 May 2021 00:07:12 +0300 Subject: [PATCH 3/9] Test CMake with Ninja generator --- .github/workflows/ci.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4e71d9af0..93da423a2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -68,6 +68,36 @@ jobs: run: | ./Godot_v3.2.3-stable_linux_server.64 --path test -s script.gd + linux-cmake-ninja: + name: Build (Linux, GCC, CMake Ninja) + runs-on: ubuntu-16.04 + steps: + - name: Checkout + uses: actions/checkout@v2.3.4 + with: + submodules: recursive + + - name: Install dependencies + run: | + sudo apt-get update -qq + sudo apt-get install -qqq build-essential pkg-config cmake ninja-build + curl -LO https://downloads.tuxfamily.org/godotengine/3.2.3/Godot_v3.2.3-stable_linux_server.64.zip + unzip Godot_v3.2.3-stable_linux_server.64.zip + + - name: Build godot-cpp + run: | + cmake -DCMAKE_BUILD_TYPE=Release -GNinja . + cmake --build . -j $(nproc) + + - name: Build test GDNative library + run: | + cd test && cmake -DCMAKE_BUILD_TYPE=Release -GNinja . + cmake --build . -j $(nproc) + + - name: Run test GDNative library + run: | + ./Godot_v3.2.3-stable_linux_server.64 --path test -s script.gd + windows-msvc: name: Build (Windows, MSVC) runs-on: windows-2019 From d9254279b8fd98560cb29cc833b914bb7043048c Mon Sep 17 00:00:00 2001 From: O01eg Date: Mon, 24 May 2021 09:59:55 +0300 Subject: [PATCH 4/9] Require python with pathlib support --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d2ecf69b5..2901b32b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -115,7 +115,7 @@ else() endif() # Generate source from the bindings file -find_package(PythonInterp 3 REQUIRED) +find_package(PythonInterp 3.4 REQUIRED) # pathlib should be present if(GENERATE_TEMPLATE_GET_NODE) set(GENERATE_BINDING_PARAMETERS "True") else() From b321bcc117c52f82088d4f8ee4a6870e7b6b3615 Mon Sep 17 00:00:00 2001 From: oleg Date: Tue, 14 Dec 2021 13:53:49 +0300 Subject: [PATCH 5/9] Update CI image --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 93da423a2..53cf0f0d4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,10 +40,10 @@ jobs: linux-cmake: name: Build (Linux, GCC, CMake) - runs-on: ubuntu-16.04 + runs-on: ubuntu-18.04 steps: - name: Checkout - uses: actions/checkout@v2.3.4 + uses: actions/checkout@v2 with: submodules: recursive @@ -70,10 +70,10 @@ jobs: linux-cmake-ninja: name: Build (Linux, GCC, CMake Ninja) - runs-on: ubuntu-16.04 + runs-on: ubuntu-18.04 steps: - name: Checkout - uses: actions/checkout@v2.3.4 + uses: actions/checkout@v2 with: submodules: recursive From cccd74779068f1613b1b5a4cac2a51c969b41412 Mon Sep 17 00:00:00 2001 From: oleg Date: Tue, 14 Dec 2021 14:03:18 +0300 Subject: [PATCH 6/9] Remove not working part of code --- .github/workflows/ci.yml | 12 ------------ CMakeLists.txt | 2 +- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 53cf0f0d4..fce6c2d4f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,8 +51,6 @@ jobs: run: | sudo apt-get update -qq sudo apt-get install -qqq build-essential pkg-config cmake - curl -LO https://downloads.tuxfamily.org/godotengine/3.2.3/Godot_v3.2.3-stable_linux_server.64.zip - unzip Godot_v3.2.3-stable_linux_server.64.zip - name: Build godot-cpp run: | @@ -64,10 +62,6 @@ jobs: cd test && cmake -DCMAKE_BUILD_TYPE=Release . make -j $(nproc) - - name: Run test GDNative library - run: | - ./Godot_v3.2.3-stable_linux_server.64 --path test -s script.gd - linux-cmake-ninja: name: Build (Linux, GCC, CMake Ninja) runs-on: ubuntu-18.04 @@ -81,8 +75,6 @@ jobs: run: | sudo apt-get update -qq sudo apt-get install -qqq build-essential pkg-config cmake ninja-build - curl -LO https://downloads.tuxfamily.org/godotengine/3.2.3/Godot_v3.2.3-stable_linux_server.64.zip - unzip Godot_v3.2.3-stable_linux_server.64.zip - name: Build godot-cpp run: | @@ -94,10 +86,6 @@ jobs: cd test && cmake -DCMAKE_BUILD_TYPE=Release -GNinja . cmake --build . -j $(nproc) - - name: Run test GDNative library - run: | - ./Godot_v3.2.3-stable_linux_server.64 --path test -s script.gd - windows-msvc: name: Build (Windows, MSVC) runs-on: windows-2019 diff --git a/CMakeLists.txt b/CMakeLists.txt index 2901b32b9..af8ad33da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,7 +92,7 @@ else() set(GODOT_COMPILE_FLAGS "-fPIC -g -Wwrite-strings") set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wchar-subscripts -Wcomment -Wdisabled-optimization") set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wformat -Wformat=2 -Wformat-security -Wformat-y2k") - set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wimport -Winit-self -Winline -Winvalid-pch -Werror") + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wimport -Winit-self -Winline -Winvalid-pch") set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wmissing-braces -Wmissing-format-attribute") set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wpointer-arith") set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wredundant-decls -Wreturn-type -Wsequence-point") From 7c91be06b794fc87dbef8cf5968f86d04bb6f0d2 Mon Sep 17 00:00:00 2001 From: oleg Date: Tue, 14 Dec 2021 19:13:51 +0300 Subject: [PATCH 7/9] Remove missing folders --- test/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ae1bdf1f9..50721ee16 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -103,8 +103,7 @@ add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS}) target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE ${CPP_BINDINGS_PATH}/include - ${CPP_BINDINGS_PATH}/include/core - ${CPP_BINDINGS_PATH}/include/gen + ${CPP_BINDINGS_PATH}/gen/include ${GODOT_HEADERS_PATH} ) From 98c9e2b1de3cb99084f2a29c6b2de23c236559c0 Mon Sep 17 00:00:00 2001 From: oleg Date: Tue, 14 Dec 2021 19:25:58 +0300 Subject: [PATCH 8/9] Raise C++ standart version --- test/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 50721ee16..e76d929ea 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -27,8 +27,8 @@ SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH}") SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${BUILD_PATH}") SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH}") -# Set the c++ standard to c++14 -set(CMAKE_CXX_STANDARD 14) +# Set the c++ standard to c++17 +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) From 492a9e48380a43e5ad51ac4f47850d31fb796bad Mon Sep 17 00:00:00 2001 From: oleg Date: Wed, 15 Dec 2021 20:58:04 +0300 Subject: [PATCH 9/9] Place output archive to bin/ folder --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index af8ad33da..801b36207 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -171,6 +171,8 @@ target_include_directories(${PROJECT_NAME} set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY COMPILE_FLAGS ${GODOT_COMPILE_FLAGS}) set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY LINK_FLAGS ${GODOT_LINKER_FLAGS}) +set_property(TARGET ${PROJECT_NAME} PROPERTY ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") + # Create the correct name (godot.os.build_type.system_bits) set(BITS 32)