22# CMAKE_BUILD_TYPE: Compilation target (Debug or Release defaults to Debug)
33#
44# godot-cpp cmake arguments
5- # GODOT_GDEXTENSION_DIR: Path to the directory containing GDExtension interface header and API JSON file
6- # GODOT_CPP_SYSTEM_HEADERS Mark the header files as SYSTEM. This may be useful to supress warnings in projects including this one.
7- # GODOT_CUSTOM_API_FILE: Path to a custom GDExtension API JSON file (takes precedence over `gdextension_dir`)
8- # FLOAT_PRECISION: Floating-point precision level ("single", "double")
5+ # GODOT_GDEXTENSION_DIR: Path to the directory containing GDExtension interface header and API JSON file
6+ # GODOT_CPP_SYSTEM_HEADERS Mark the header files as SYSTEM. This may be useful to supress warnings in projects including this one.
7+ # GODOT_CPP_WARNING_AS_ERROR Treat any warnings as errors
8+ # GODOT_CUSTOM_API_FILE: Path to a custom GDExtension API JSON file (takes precedence over `gdextension_dir`)
9+ # FLOAT_PRECISION: Floating-point precision level ("single", "double")
910#
1011# Android cmake arguments
1112# CMAKE_TOOLCHAIN_FILE: The path to the android cmake toolchain ($ANDROID_NDK/build/cmake/android.toolchain.cmake)
@@ -41,6 +42,15 @@ cmake_minimum_required(VERSION 3.12)
4142
4243option (GENERATE_TEMPLATE_GET_NODE "Generate a template version of the Node class's get_node." ON )
4344option (GODOT_CPP_SYSTEM_HEADERS "Expose headers as SYSTEM." OFF )
45+ option (GODOT_CPP_WARNING_AS_ERROR "Treat warnings as errors" OFF )
46+
47+ # Add path to modules
48+ list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR} /cmake/" )
49+
50+ # Check if we are building ourself or being included
51+ if (${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME} )
52+ set (GODOT_CPP_BUILDING_SELF ON )
53+ endif ()
4454
4555# Default build type is Debug in the SConstruct
4656if ("${CMAKE_BUILD_TYPE} " STREQUAL "" )
@@ -72,7 +82,7 @@ set(GODOT_LINKER_FLAGS )
7282
7383if ("${CMAKE_CXX_COMPILER_ID} " STREQUAL "MSVC" )
7484 # using Visual Studio C++
75- set (GODOT_COMPILE_FLAGS "/EHsc /WX " ) # /GF /MP
85+ set (GODOT_COMPILE_FLAGS "/EHsc" ) # /GF /MP
7686
7787 if (CMAKE_BUILD_TYPE MATCHES Debug)
7888 set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /MDd" ) # /Od /RTC1 /Zi
@@ -82,39 +92,14 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
8292 string (REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG} )
8393 endif (CMAKE_BUILD_TYPE MATCHES Debug)
8494
85- # Disable conversion warning, truncation, unreferenced var, signed mismatch, different type
86- set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /wd4244 /wd4305 /wd4101 /wd4018 /wd4267 /wd4099" )
87-
8895 add_definitions (-DNOMINMAX)
89-
90- # Unkomment for warning level 4
91- #if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
92- # string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
93- #endif()
94-
9596else () # GCC/Clang
9697 set (GODOT_LINKER_FLAGS "-static-libgcc -static-libstdc++ -Wl,-R,'$$ORIGIN'" )
9798
9899 if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows" )
99100 set (GODOT_COMPILE_FLAGS "-fPIC" )
100101 endif ()
101- set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -g -Wwrite-strings" )
102- set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wchar-subscripts -Wcomment -Wdisabled-optimization" )
103- set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wformat -Wformat=2 -Wformat-security -Wformat-y2k" )
104- set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wimport -Winit-self -Winline -Winvalid-pch" )
105- set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wmissing-braces -Wmissing-format-attribute" )
106- set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wpointer-arith" )
107- set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wredundant-decls -Wreturn-type -Wsequence-point" )
108- set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wswitch -Wswitch-enum -Wtrigraphs" )
109- set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused-label" )
110- set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wunused-value -Wvariadic-macros -Wvolatile-register-var -Wno-error=attributes" )
111-
112- # -Wshadow -Wextra -Wall -Weffc++ -Wfloat-equal -Wstack-protector -Wunused-parameter -Wsign-compare -Wunused-variable -Wcast-align
113- # -Wunused-function -Wstrict-aliasing -Wstrict-aliasing=2 -Wmissing-field-initializers
114-
115- if (NOT CMAKE_SYSTEM_NAME STREQUAL "Android" )
116- set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wno-ignored-attributes" )
117- endif ()
102+ set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -g" )
118103
119104 if (CMAKE_BUILD_TYPE MATCHES Debug)
120105 set (GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -fno-omit-frame-pointer -O0" )
@@ -157,6 +142,14 @@ add_library(${PROJECT_NAME}
157142)
158143add_library (godot::cpp ALIAS ${PROJECT_NAME} )
159144
145+ include (GodotCompilerWarnings)
146+
147+ # Treat warnings as errors if we are building ourself
148+ if (GODOT_CPP_BUILDING_SELF)
149+ unset ( GODOT_CPP_WARNING_AS_ERROR )
150+ set_warning_as_error()
151+ endif ()
152+
160153target_compile_features (${PROJECT_NAME}
161154 PRIVATE
162155 cxx_std_17
@@ -182,8 +175,6 @@ target_include_directories(${PROJECT_NAME} ${GODOT_CPP_SYSTEM_HEADERS_ATTRIBUTE}
182175 ${CMAKE_CURRENT_BINARY_DIR} /gen/include
183176)
184177
185- unset ( GODOT_CPP_SYSTEM_HEADERS_ATTRIBUTE )
186-
187178# Put godot headers as SYSTEM PUBLIC to exclude warnings from irrelevant headers
188179target_include_directories (${PROJECT_NAME}
189180 SYSTEM PUBLIC
0 commit comments