|
| 1 | +project(godot-cpp-test) |
| 2 | +cmake_minimum_required(VERSION 3.6) |
| 3 | + |
| 4 | +# Local dependency paths, adapt them to your setup |
| 5 | +set(GODOT_HEADERS_PATH ../godot-headers/) |
| 6 | +set(CPP_BINDINGS_PATH ../) |
| 7 | + |
| 8 | +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") |
| 9 | + set(TARGET_PATH x11) |
| 10 | +elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") |
| 11 | + set(TARGET_PATH win64) |
| 12 | +elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") |
| 13 | + set(TARGET_PATH osx) |
| 14 | +else() |
| 15 | + message(FATAL_ERROR "Not implemented support for ${CMAKE_SYSTEM_NAME}") |
| 16 | +endif() |
| 17 | + |
| 18 | +# Change the output directory to the bin directory |
| 19 | +set(BUILD_PATH ${CMAKE_SOURCE_DIR}/bin/${TARGET_PATH}) |
| 20 | +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${BUILD_PATH}") |
| 21 | +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${BUILD_PATH}") |
| 22 | +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${BUILD_PATH}") |
| 23 | +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${BUILD_PATH}") |
| 24 | +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH}") |
| 25 | +SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${BUILD_PATH}") |
| 26 | +SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH}") |
| 27 | +SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${BUILD_PATH}") |
| 28 | +SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${BUILD_PATH}") |
| 29 | + |
| 30 | +# Set the c++ standard to c++14 |
| 31 | +set(CMAKE_CXX_STANDARD 14) |
| 32 | +set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| 33 | +set(CMAKE_CXX_EXTENSIONS OFF) |
| 34 | + |
| 35 | +set(GODOT_COMPILE_FLAGS ) |
| 36 | +set(GODOT_LINKER_FLAGS ) |
| 37 | + |
| 38 | +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") |
| 39 | + # using Visual Studio C++ |
| 40 | + set(GODOT_COMPILE_FLAGS "/EHsc /WX") # /GF /MP |
| 41 | + |
| 42 | + if(CMAKE_BUILD_TYPE MATCHES Debug) |
| 43 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /MDd") # /Od /RTC1 /Zi |
| 44 | + else() |
| 45 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /MD /O2") # /Oy /GL /Gy |
| 46 | + STRING(REGEX REPLACE "/RTC(su|[1su])" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
| 47 | + string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) |
| 48 | + endif(CMAKE_BUILD_TYPE MATCHES Debug) |
| 49 | + |
| 50 | + # Disable conversion warning, trunkation, unreferenced var, signed missmatch |
| 51 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /wd4244 /wd4305 /wd4101 /wd4018 /wd4267") |
| 52 | + |
| 53 | + # Todo: Check if needed. |
| 54 | + add_definitions(-DWIN32_LEAN_AND_MEAN -D_CRT_SECURE_NO_WARNINGS) |
| 55 | + |
| 56 | + # Unkomment for warning level 4 |
| 57 | + #if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |
| 58 | + # string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
| 59 | + #endif() |
| 60 | + |
| 61 | +else() |
| 62 | + |
| 63 | +#elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |
| 64 | + # using Clang |
| 65 | +#elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |
| 66 | + # using GCC and maybe MinGW? |
| 67 | + |
| 68 | + set(GODOT_LINKER_FLAGS "-static-libgcc -static-libstdc++ -Wl,-R,'$$ORIGIN'") |
| 69 | + |
| 70 | + # Hmm.. maybe to strikt? |
| 71 | + set(GODOT_COMPILE_FLAGS "-fPIC -g -Wwrite-strings") |
| 72 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wchar-subscripts -Wcomment -Wdisabled-optimization") |
| 73 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wformat -Wformat=2 -Wformat-security -Wformat-y2k") |
| 74 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wimport -Winit-self -Winline -Winvalid-pch") |
| 75 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wmissing-braces -Wmissing-format-attribute") |
| 76 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wpointer-arith") |
| 77 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wredundant-decls -Wreturn-type -Wsequence-point") |
| 78 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wswitch -Wswitch-enum -Wtrigraphs") |
| 79 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused-label") |
| 80 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wunused-value -Wvariadic-macros -Wvolatile-register-var -Wno-error=attributes") |
| 81 | + |
| 82 | + # -Wshadow -Wextra -Wall -Weffc++ -Wfloat-equal -Wstack-protector -Wunused-parameter -Wsign-compare -Wunused-variable -Wcast-align |
| 83 | + # -Wunused-function -Wstrict-aliasing -Wstrict-aliasing=2 -Wmissing-field-initializers |
| 84 | + |
| 85 | + if(NOT CMAKE_SYSTEM_NAME STREQUAL "Android") |
| 86 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wno-ignored-attributes") |
| 87 | + endif() |
| 88 | + |
| 89 | + if(CMAKE_BUILD_TYPE MATCHES Debug) |
| 90 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -fno-omit-frame-pointer -O0") |
| 91 | + else() |
| 92 | + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -O3") |
| 93 | + endif(CMAKE_BUILD_TYPE MATCHES Debug) |
| 94 | +endif() |
| 95 | + |
| 96 | +# Get Sources |
| 97 | +file(GLOB_RECURSE SOURCES src/*.c**) |
| 98 | +file(GLOB_RECURSE HEADERS include/*.h**) |
| 99 | + |
| 100 | +# Define our godot-cpp library |
| 101 | +add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS}) |
| 102 | + |
| 103 | +target_include_directories(${PROJECT_NAME} SYSTEM |
| 104 | + PRIVATE |
| 105 | + ${CPP_BINDINGS_PATH}/include |
| 106 | + ${CPP_BINDINGS_PATH}/include/core |
| 107 | + ${CPP_BINDINGS_PATH}/include/gen |
| 108 | + ${GODOT_HEADERS_PATH} |
| 109 | +) |
| 110 | + |
| 111 | +# Create the correct name (godot.os.build_type.system_bits) |
| 112 | +# Synchronized with godot-cpp's CMakeLists.txt |
| 113 | + |
| 114 | +set(BITS 32) |
| 115 | +if(CMAKE_SIZEOF_VOID_P EQUAL 8) |
| 116 | + set(BITS 64) |
| 117 | +endif(CMAKE_SIZEOF_VOID_P EQUAL 8) |
| 118 | + |
| 119 | +if(CMAKE_BUILD_TYPE MATCHES Debug) |
| 120 | + set(GODOT_CPP_BUILD_TYPE Debug) |
| 121 | +else() |
| 122 | + set(GODOT_CPP_BUILD_TYPE Release) |
| 123 | +endif() |
| 124 | + |
| 125 | +string(TOLOWER ${CMAKE_SYSTEM_NAME} SYSTEM_NAME) |
| 126 | +string(TOLOWER ${GODOT_CPP_BUILD_TYPE} BUILD_TYPE) |
| 127 | + |
| 128 | +if(ANDROID) |
| 129 | + # Added the android abi after system name |
| 130 | + set(SYSTEM_NAME ${SYSTEM_NAME}.${ANDROID_ABI}) |
| 131 | +endif() |
| 132 | + |
| 133 | +if(CMAKE_VERSION VERSION_GREATER "3.13") |
| 134 | + target_link_directories(${PROJECT_NAME} |
| 135 | + PRIVATE |
| 136 | + ${CPP_BINDINGS_PATH}/bin/ |
| 137 | + ) |
| 138 | + target_link_libraries(${PROJECT_NAME} |
| 139 | + godot-cpp.${SYSTEM_NAME}.${BUILD_TYPE}$<$<NOT:$<PLATFORM_ID:Android>>:.${BITS}> |
| 140 | + ) |
| 141 | +else() |
| 142 | + target_link_libraries(${PROJECT_NAME} |
| 143 | + ${CPP_BINDINGS_PATH}/bin/libgodot-cpp.${SYSTEM_NAME}.${BUILD_TYPE}$<$<NOT:$<PLATFORM_ID:Android>>:.${BITS}>.a |
| 144 | + ) |
| 145 | +endif() |
| 146 | + |
| 147 | +# Add the compile flags |
| 148 | +set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY COMPILE_FLAGS ${GODOT_COMPILE_FLAGS}) |
| 149 | +set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY LINK_FLAGS ${GODOT_LINKER_FLAGS}) |
| 150 | + |
| 151 | +set_property(TARGET ${PROJECT_NAME} PROPERTY OUTPUT_NAME "gdexample") |
| 152 | + |
0 commit comments