diff --git a/src/openrct2-ui/CMakeLists.txt b/src/openrct2-ui/CMakeLists.txt index d6f5cff0ff..d009c4122d 100644 --- a/src/openrct2-ui/CMakeLists.txt +++ b/src/openrct2-ui/CMakeLists.txt @@ -35,7 +35,8 @@ endif () # Sources file(GLOB_RECURSE OPENRCT2_UI_SOURCES - "${CMAKE_CURRENT_LIST_DIR}/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/*.cpp") +file(GLOB_RECURSE OPENRCT2_UI_HEADERS "${CMAKE_CURRENT_LIST_DIR}/*.h" "${CMAKE_CURRENT_LIST_DIR}/*.hpp") @@ -97,3 +98,19 @@ endif () if (MSVC) add_definitions(-D__DISABLE_DLL_PROXY__) endif () + +# Add headers check to verify all headers carry their dependencies. +# Only valid for Clang for now: +# - GCC 8 does not support -Wno-pragma-once-outside-header +# - Other compilers status unknown +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + set(OPENRCT2_HEADERS_CHECK ${OPENRCT2_UI_HEADERS}) + # OpenGLAPIProc.h is not meant to be included directly. + list(REMOVE_ITEM OPENRCT2_HEADERS_CHECK "${CMAKE_CURRENT_LIST_DIR}/drawing/engines/opengl/OpenGLAPIProc.h") + add_library(${PROJECT}-headers-check OBJECT ${OPENRCT2_HEADERS_CHECK}) + set_target_properties(${PROJECT}-headers-check PROPERTIES LINKER_LANGUAGE CXX) + set_source_files_properties(${OPENRCT2_HEADERS_CHECK} PROPERTIES LANGUAGE CXX) + add_definitions("-x c++ -Wno-pragma-once-outside-header -Wno-unused-const-variable") + get_target_property(OPENRCT2_INCLUDE_DIRS ${PROJECT} INCLUDE_DIRECTORIES) + set_target_properties(${PROJECT}-headers-check PROPERTIES INCLUDE_DIRECTORIES ${OPENRCT2_INCLUDE_DIRS}) +endif () diff --git a/src/openrct2/CMakeLists.txt b/src/openrct2/CMakeLists.txt index 1d59906fa2..61811ce0fc 100644 --- a/src/openrct2/CMakeLists.txt +++ b/src/openrct2/CMakeLists.txt @@ -59,8 +59,8 @@ if (NOT DISABLE_TTF) endif () # Sources -file(GLOB_RECURSE OPENRCT2_CORE_SOURCES "${CMAKE_CURRENT_LIST_DIR}/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/*.h" +file(GLOB_RECURSE OPENRCT2_CORE_SOURCES "${CMAKE_CURRENT_LIST_DIR}/*.cpp") +file(GLOB_RECURSE OPENRCT2_CORE_HEADERS "${CMAKE_CURRENT_LIST_DIR}/*.h" "${CMAKE_CURRENT_LIST_DIR}/*.hpp") if (APPLE) file(GLOB_RECURSE OPENRCT2_CORE_MM_SOURCES "${CMAKE_CURRENT_LIST_DIR}/*.mm") @@ -179,3 +179,19 @@ if((X86 OR X86_64) AND NOT MSVC) set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/drawing/SSE41Drawing.cpp PROPERTIES COMPILE_FLAGS -msse4.1) set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/drawing/AVX2Drawing.cpp PROPERTIES COMPILE_FLAGS -mavx2) endif() + +# Add headers check to verify all headers carry their dependencies. +# Only valid for Clang for now: +# - GCC 8 does not support -Wno-pragma-once-outside-header +# - Other compilers status unknown +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + add_library(${PROJECT}-headers-check OBJECT ${OPENRCT2_CORE_HEADERS}) + set_target_properties(${PROJECT}-headers-check PROPERTIES LINKER_LANGUAGE CXX) + set_source_files_properties(${OPENRCT2_CORE_HEADERS} PROPERTIES LANGUAGE CXX) + add_definitions("-x c++ -Wno-pragma-once-outside-header -Wno-unused-const-variable") + get_target_property(LIBOPENRCT2_INCLUDE_DIRS ${PROJECT} INCLUDE_DIRECTORIES) + set_target_properties(${PROJECT}-headers-check PROPERTIES INCLUDE_DIRECTORIES ${LIBOPENRCT2_INCLUDE_DIRS}) +else () + # Dummy target to ease invocation + add_custom_target(${PROJECT}-headers-check) +endif () diff --git a/src/openrct2/localisation/Localisation.h b/src/openrct2/localisation/Localisation.h index 7ec140d222..70eb7adb48 100644 --- a/src/openrct2/localisation/Localisation.h +++ b/src/openrct2/localisation/Localisation.h @@ -84,7 +84,7 @@ extern const rct_string_id DateDayNames[31]; extern const rct_string_id DateGameMonthNames[MONTH_COUNT]; extern const rct_string_id DateGameShortMonthNames[MONTH_COUNT]; -static inline void set_format_arg_body(uint8 *args, size_t offset, uintptr_t value, size_t size) +[[maybe_unused]] static inline void set_format_arg_body(uint8 *args, size_t offset, uintptr_t value, size_t size) { memcpy(args + offset, &value, size); }