From f227a0179fa8ba38b43589843546297b586390d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Carrasco?= Date: Sun, 23 Jan 2022 19:54:51 +0100 Subject: [PATCH] Fix Test CMake project for Windows and parametrize paths --- .github/workflows/ci.yml | 23 +++++++++++++++-- CMakeLists.txt | 16 +++++++++--- test/.gitignore | 4 +++ test/CMakeLists.txt | 55 ++++++++++++++++++++-------------------- 4 files changed, 65 insertions(+), 33 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fce6c2d4..0ddf19ac 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -59,7 +59,7 @@ jobs: - name: Build test GDNative library run: | - cd test && cmake -DCMAKE_BUILD_TYPE=Release . + cd test && cmake -DCMAKE_BUILD_TYPE=Release -DGODOT_HEADERS_PATH="../godot-headers" -DCPP_BINDINGS_PATH=".." . make -j $(nproc) linux-cmake-ninja: @@ -83,7 +83,7 @@ jobs: - name: Build test GDNative library run: | - cd test && cmake -DCMAKE_BUILD_TYPE=Release -GNinja . + cd test && cmake -DCMAKE_BUILD_TYPE=Release -DGODOT_HEADERS_PATH="../godot-headers" -DCPP_BINDINGS_PATH=".." -GNinja . cmake --build . -j $(nproc) windows-msvc: @@ -119,6 +119,25 @@ jobs: name: godot-cpp-windows-msvc2019-x86_64-release path: bin/libgodot-cpp.windows.release.64.lib if-no-files-found: error + + windows-msvc-cmake: + name: Build (Windows, MSVC, CMake) + runs-on: windows-2019 + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Build godot-cpp + run: | + cmake -DCMAKE_BUILD_TYPE=Release -G"Visual Studio 16 2019" . + cmake --build . + + - name: Build test GDNative library + run: | + cd test && cmake -DCMAKE_BUILD_TYPE=Release -DGODOT_HEADERS_PATH="../godot-headers" -DCPP_BINDINGS_PATH=".." -G"Visual Studio 16 2019" . + cmake --build . windows-mingw: name: Build (Windows, MinGW) diff --git a/CMakeLists.txt b/CMakeLists.txt index 801b3620..dca7a7fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,17 @@ cmake_minimum_required(VERSION 3.6) option(GENERATE_TEMPLATE_GET_NODE "Generate a template version of the Node class's get_node." ON) +set(BUILD_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin) +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}") + # Default build type is Debug in the SConstruct if(CMAKE_BUILD_TYPE STREQUAL "") set(CMAKE_BUILD_TYPE Debug) @@ -68,8 +79,8 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") 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") + # Disable conversion warning, truncation, unreferenced var, signed missmatch, different type + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /wd4244 /wd4305 /wd4101 /wd4018 /wd4267 /wd4099") # Todo: Check if needed. add_definitions(-DWIN32_LEAN_AND_MEAN -D_CRT_SECURE_NO_WARNINGS) @@ -171,7 +182,6 @@ 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) diff --git a/test/.gitignore b/test/.gitignore index e0b51db7..c6d83943 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -1,3 +1,7 @@ +# Generated directories with binaries +build +bin + # Godot 4+ specific ignores .godot/ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e76d929e..05422bde 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,18 +1,17 @@ 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 ../) +set(GODOT_HEADERS_PATH ../godot-headers/ CACHE STRING "Path to Godot headers") +set(CPP_BINDINGS_PATH ../ CACHE STRING "Path to C++ bindings") if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(TARGET_PATH x11) + set(TARGET_PATH x11) elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") - set(TARGET_PATH win64) + set(TARGET_PATH win64) elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(TARGET_PATH osx) + set(TARGET_PATH osx) else() - message(FATAL_ERROR "Not implemented support for ${CMAKE_SYSTEM_NAME}") + message(FATAL_ERROR "Not implemented support for ${CMAKE_SYSTEM_NAME}") endif() # Change the output directory to the bin directory @@ -37,7 +36,8 @@ set(GODOT_LINKER_FLAGS ) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") # using Visual Studio C++ - set(GODOT_COMPILE_FLAGS "/EHsc /WX") # /GF /MP + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /EHsc /WX") # /GF /MP + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /DTYPED_METHOD_BIND") if(CMAKE_BUILD_TYPE MATCHES Debug) set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /MDd") # /Od /RTC1 /Zi @@ -101,10 +101,10 @@ file(GLOB_RECURSE HEADERS include/*.h**) add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS}) target_include_directories(${PROJECT_NAME} SYSTEM - PRIVATE - ${CPP_BINDINGS_PATH}/include + PRIVATE + ${CPP_BINDINGS_PATH}/include ${CPP_BINDINGS_PATH}/gen/include - ${GODOT_HEADERS_PATH} + ${GODOT_HEADERS_PATH} ) # Create the correct name (godot.os.build_type.system_bits) @@ -112,35 +112,36 @@ target_include_directories(${PROJECT_NAME} SYSTEM set(BITS 32) if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(BITS 64) + set(BITS 64) endif(CMAKE_SIZEOF_VOID_P EQUAL 8) if(CMAKE_BUILD_TYPE MATCHES Debug) - set(GODOT_CPP_BUILD_TYPE Debug) + set(GODOT_CPP_BUILD_TYPE Debug) else() - set(GODOT_CPP_BUILD_TYPE Release) + 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}) + # 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}> - ) + 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 - ) + target_link_libraries(${PROJECT_NAME} + ${CPP_BINDINGS_PATH}/bin/libgodot-cpp.${SYSTEM_NAME}.${BUILD_TYPE}$<$>:.${BITS}>.a + ) endif() # Add the compile flags @@ -148,5 +149,3 @@ set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY COMPILE_FLAGS ${GODOT set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY LINK_FLAGS ${GODOT_LINKER_FLAGS}) set_property(TARGET ${PROJECT_NAME} PROPERTY OUTPUT_NAME "gdexample") - -