Преглед на файлове

Fix Test CMake project for Windows and parametrize paths

Nicolás Carrasco преди 3 години
родител
ревизия
f227a0179f
променени са 4 файла, в които са добавени 65 реда и са изтрити 33 реда
  1. 21 2
      .github/workflows/ci.yml
  2. 13 3
      CMakeLists.txt
  3. 4 0
      test/.gitignore
  4. 27 28
      test/CMakeLists.txt

+ 21 - 2
.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)

+ 13 - 3
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)
 

+ 4 - 0
test/.gitignore

@@ -1,3 +1,7 @@
+# Generated directories with binaries
+build
+bin
+
 # Godot 4+ specific ignores
 .godot/
 

+ 27 - 28
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}$<$<NOT:$<PLATFORM_ID:Android>>:.${BITS}>
-    )
+	target_link_directories(${PROJECT_NAME}
+		PRIVATE
+		${CPP_BINDINGS_PATH}/bin/
+	)
+
+	target_link_libraries(${PROJECT_NAME}
+		godot-cpp.${SYSTEM_NAME}.${BUILD_TYPE}$<$<NOT:$<PLATFORM_ID:Android>>:.${BITS}>
+	)
 else()
-    target_link_libraries(${PROJECT_NAME}
-            ${CPP_BINDINGS_PATH}/bin/libgodot-cpp.${SYSTEM_NAME}.${BUILD_TYPE}$<$<NOT:$<PLATFORM_ID:Android>>:.${BITS}>.a
-    )
+	target_link_libraries(${PROJECT_NAME}
+			${CPP_BINDINGS_PATH}/bin/libgodot-cpp.${SYSTEM_NAME}.${BUILD_TYPE}$<$<NOT:$<PLATFORM_ID:Android>>:.${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")
-
-