From 485db276e3af845ecb0072f035b975ee6d75c06e Mon Sep 17 00:00:00 2001 From: OpenSauce04 Date: Sun, 31 Aug 2025 13:45:55 +0100 Subject: [PATCH] cmake: Corrected widespread incorrect usage of the SYSTEM property --- externals/CMakeLists.txt | 95 ++++++++++++++++++++++++---------------- 1 file changed, 58 insertions(+), 37 deletions(-) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 66cbbd52e..e9c1d5646 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -1,24 +1,37 @@ # Definitions for all external bundled libraries # Suppress warnings from external libraries -if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") +if (MSVC) add_compile_options(/W0) else() add_compile_options(-w) endif() +function(target_disable_warnings target) + if (MSVC) + target_compile_options(${target} INTERFACE /W0) + else() + target_compile_options(${target} INTERFACE -w) + endif() +endfunction() + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) include(DownloadExternals) include(ExternalProject) # Boost -if (NOT USE_SYSTEM_BOOST) +if (USE_SYSTEM_BOOST) + unset(BOOST_ROOT CACHE) + unset(Boost_INCLUDE_DIR CACHE) + set(Boost_NO_SYSTEM_PATHS OFF CACHE BOOL "" FORCE) +else() message(STATUS "Including vendored Boost library") set(BOOST_ROOT "${CMAKE_SOURCE_DIR}/externals/boost" CACHE STRING "") set(Boost_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/externals/boost" CACHE STRING "") set(Boost_NO_SYSTEM_PATHS ON CACHE BOOL "") add_library(boost INTERFACE) - target_include_directories(boost SYSTEM INTERFACE ${Boost_INCLUDE_DIR}) + target_include_directories(boost INTERFACE ${Boost_INCLUDE_DIR}) + target_disable_warnings(boost) # Boost::serialization file(GLOB boost_serialization_SRC "${CMAKE_SOURCE_DIR}/externals/boost/libs/serialization/src/*.cpp") @@ -33,11 +46,7 @@ if (NOT USE_SYSTEM_BOOST) ${CMAKE_SOURCE_DIR}/externals/boost/libs/iostreams/src/mapped_file.cpp ) target_link_libraries(boost_iostreams PUBLIC boost) -# Add additional boost libs here; remember to ALIAS them in the root CMakeLists! -else() - unset(BOOST_ROOT CACHE) - unset(Boost_INCLUDE_DIR CACHE) - set(Boost_NO_SYSTEM_PATHS OFF CACHE BOOL "" FORCE) + # Add additional boost libs here; remember to ALIAS them in the root CMakeLists! endif() # Catch2 @@ -55,7 +64,7 @@ target_link_libraries(catch2 INTERFACE Catch2::Catch2WithMain) if(USE_SYSTEM_CRYPTOPP) find_package(cryptopp REQUIRED) add_library(cryptopp INTERFACE) - target_link_libraries(cryptopp INTERFACE cryptopp::cryptopp) + target_link_libraries(cryptopp SYSTEM INTERFACE cryptopp::cryptopp) else() if (WIN32 AND NOT MSVC AND "arm64" IN_LIST ARCHITECTURE) # TODO: CryptoPP ARM64 ASM does not seem to support Windows unless compiled with MSVC. @@ -73,13 +82,14 @@ endif() # dds-ktx add_library(dds-ktx INTERFACE) target_include_directories(dds-ktx INTERFACE ./dds-ktx) +target_disable_warnings(dds-ktx) # fmt and Xbyak need to be added before dynarmic # libfmt if(USE_SYSTEM_FMT) add_library(fmt INTERFACE) find_package(fmt REQUIRED) - target_link_libraries(fmt INTERFACE fmt::fmt) + target_link_libraries(fmt SYSTEM INTERFACE fmt::fmt) else() option(FMT_INSTALL "" ON) add_subdirectory(fmt EXCLUDE_FROM_ALL) @@ -91,7 +101,7 @@ if ("x86_64" IN_LIST ARCHITECTURE) if(USE_SYSTEM_XBYAK) find_package(xbyak REQUIRED) add_library(xbyak INTERFACE) - target_link_libraries(xbyak INTERFACE xbyak::xbyak) + target_link_libraries(xbyak SYSTEM INTERFACE xbyak::xbyak) else() add_subdirectory(xbyak EXCLUDE_FROM_ALL) endif() @@ -107,7 +117,7 @@ if ("x86_64" IN_LIST ARCHITECTURE OR "arm64" IN_LIST ARCHITECTURE) if(USE_SYSTEM_DYNARMIC) find_package(dynarmic REQUIRED) add_library(dynarmic INTERFACE) - target_link_libraries(dynarmic INTERFACE dynarmic::dynarmic) + target_link_libraries(dynarmic SYSTEM INTERFACE dynarmic::dynarmic) # The dynarmic package's cmake files are helpfully completely silent # so we have to inform the user of its status ourselves if(TARGET dynarmic::dynarmic) @@ -130,14 +140,15 @@ endif() if(USE_SYSTEM_INIH) find_package(inih REQUIRED COMPONENTS inih inir) add_library(inih INTERFACE) - target_link_libraries(inih INTERFACE inih::inih inih::inir) + target_link_libraries(inih SYSTEM INTERFACE inih::inih inih::inir) else() add_subdirectory(inih) endif() # MicroProfile add_library(microprofile INTERFACE) -target_include_directories(microprofile SYSTEM INTERFACE ./microprofile) +target_include_directories(microprofile INTERFACE ./microprofile) +target_disable_warnings(microprofile) if (ENABLE_MICROPROFILE) target_compile_definitions(microprofile INTERFACE MICROPROFILE_ENABLED=1) else() @@ -146,10 +157,11 @@ endif() # Nihstro add_library(nihstro-headers INTERFACE) -target_include_directories(nihstro-headers SYSTEM INTERFACE ./nihstro/include) -if (MSVC) - # TODO: For some reason MSVC still applies this warning even with /W0 for externals. - target_compile_options(nihstro-headers INTERFACE /wd4715) +target_include_directories(nihstro-headers INTERFACE ./nihstro/include) +target_disable_warnings(nihstro-headers) +if (NOT MSVC) + # TODO: For some reason MSYS2 still applied this warnin even with -w + target_compile_options(nihstro-headers INTERFACE -Wno-invalid-specialization) endif() # Open Source Archives @@ -173,7 +185,8 @@ if (USE_SYSTEM_FFMPEG_HEADERS) endif() if (NOT FOUND_FFMPEG_HEADERS) message(STATUS "Using bundled ffmpeg headers.") - target_include_directories(library-headers SYSTEM INTERFACE ./library-headers/ffmpeg/include) + target_include_directories(library-headers INTERFACE ./library-headers/ffmpeg/include) + target_disable_warnings(library-headers) endif() # SoundTouch @@ -208,7 +221,7 @@ if(USE_SYSTEM_ZSTD) if(TARGET zstd::libzstd_shared) message(STATUS "Found system Zstandard") endif() - target_link_libraries(zstd INTERFACE zstd::libzstd_shared) + target_link_libraries(zstd SYSTEM INTERFACE zstd::libzstd_shared) else() set(ZSTD_LEGACY_SUPPORT OFF) set(ZSTD_BUILD_PROGRAMS OFF) @@ -243,7 +256,7 @@ endif() if(USE_SYSTEM_ENET) find_package(libenet REQUIRED) add_library(enet INTERFACE) - target_link_libraries(enet INTERFACE libenet::libenet) + target_link_libraries(enet SYSTEM INTERFACE libenet::libenet) else() add_subdirectory(enet) target_include_directories(enet INTERFACE ./enet/include) @@ -254,7 +267,7 @@ if (ENABLE_CUBEB) if(USE_SYSTEM_CUBEB) find_package(cubeb REQUIRED) add_library(cubeb INTERFACE) - target_link_libraries(cubeb INTERFACE cubeb::cubeb) + target_link_libraries(cubeb SYSTEM INTERFACE cubeb::cubeb) if(TARGET cubeb::cubeb) message(STATUS "Found system cubeb") endif() @@ -294,7 +307,8 @@ if (USE_SYSTEM_JSON) # Citra uses "#include " so we have to add this manually target_include_directories(json-headers SYSTEM INTERFACE "${NLOHMANN_PREFIX}/nlohmann") else() - target_include_directories(json-headers SYSTEM INTERFACE ./json) + target_include_directories(json-headers INTERFACE ./json) + target_disable_warnings(json-headers) endif() # OpenSSL @@ -310,7 +324,8 @@ if (NOT OPENSSL_FOUND) set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "") set(OPENSSLDIR "/etc/ssl/") add_subdirectory(libressl EXCLUDE_FROM_ALL) - target_include_directories(ssl SYSTEM INTERFACE ./libressl/include) + target_include_directories(ssl INTERFACE ./libressl/include) + target_disable_warnings(ssl) target_compile_definitions(ssl PRIVATE -DHAVE_INET_NTOP) get_directory_property(OPENSSL_LIBRARIES DIRECTORY libressl @@ -327,17 +342,20 @@ if(USE_SYSTEM_CPP_HTTPLIB) get_target_property(HTTP_LIBS httplib::httplib INTERFACE_LINK_LIBRARIES) if(HTTP_LIBS) message(WARNING "Shared cpp-http (${HTTP_LIBS}) not supported. Falling back to bundled...") - target_include_directories(httplib SYSTEM INTERFACE ./httplib) + target_include_directories(httplib INTERFACE ./httplib) + target_disable_warnings(httplib) else() if(CppHttp_FOUND) - target_link_libraries(httplib INTERFACE httplib::httplib) + target_link_libraries(httplib SYSTEM INTERFACE httplib::httplib) else() message(STATUS "Cpp-httplib not found or not suitable version! Falling back to bundled...") - target_include_directories(httplib SYSTEM INTERFACE ./httplib) - endif() + target_include_directories(httplib INTERFACE ./httplib) + target_disable_warnings(httplib) + endif() endif() else() - target_include_directories(httplib SYSTEM INTERFACE ./httplib) + target_include_directories(httplib INTERFACE ./httplib) + target_disable_warnings(httplib) endif() target_compile_options(httplib INTERFACE -DCPPHTTPLIB_OPENSSL_SUPPORT) target_link_libraries(httplib INTERFACE ${OPENSSL_LIBRARIES}) @@ -351,10 +369,11 @@ if (ENABLE_WEB_SERVICE) if (USE_SYSTEM_CPP_JWT) find_package(cpp-jwt REQUIRED) add_library(cpp-jwt INTERFACE) - target_link_libraries(cpp-jwt INTERFACE cpp-jwt::cpp-jwt) + target_link_libraries(cpp-jwt SYSTEM INTERFACE cpp-jwt::cpp-jwt) else() add_library(cpp-jwt INTERFACE) - target_include_directories(cpp-jwt SYSTEM INTERFACE ./cpp-jwt/include) + target_include_directories(cpp-jwt INTERFACE ./cpp-jwt/include) + target_disable_warnings(cpp-jwt) target_compile_definitions(cpp-jwt INTERFACE CPP_JWT_USE_VENDORED_NLOHMANN_JSON) endif() endif() @@ -363,7 +382,7 @@ endif() if(USE_SYSTEM_LODEPNG) add_library(lodepng INTERFACE) find_package(lodepng REQUIRED) - target_link_libraries(lodepng INTERFACE lodepng::lodepng) + target_link_libraries(lodepng SYSTEM INTERFACE lodepng::lodepng) else() add_subdirectory(lodepng) endif() @@ -380,7 +399,7 @@ if (ENABLE_OPENAL) if(USE_SYSTEM_OPENAL) add_library(OpenAL INTERFACE) find_package(OpenAL REQUIRED) - target_link_libraries(OpenAL INTERFACE OpenAL::OpenAL) + target_link_libraries(OpenAL SYSTEM INTERFACE OpenAL::OpenAL) else() set(ALSOFT_EMBED_HRTF_DATA OFF CACHE BOOL "") set(ALSOFT_EXAMPLES OFF CACHE BOOL "") @@ -449,11 +468,12 @@ if (ENABLE_VULKAN) find_package(VulkanMemoryAllocator REQUIRED) if(TARGET GPUOpen::VulkanMemoryAllocator) message(STATUS "Found VulkanMemoryAllocator") - target_link_libraries(vma INTERFACE GPUOpen::VulkanMemoryAllocator) + target_link_libraries(vma SYSTEM INTERFACE GPUOpen::VulkanMemoryAllocator) endif() else() add_library(vma INTERFACE) - target_include_directories(vma SYSTEM INTERFACE ./vma/include) + target_include_directories(vma INTERFACE ./vma/include) + target_disable_warnings(vma) endif() # vulkan-headers @@ -462,10 +482,11 @@ if (ENABLE_VULKAN) find_package(Vulkan REQUIRED) if(TARGET Vulkan::Headers) message(STATUS "Found Vulkan headers") - target_link_libraries(vulkan-headers INTERFACE Vulkan::Headers) + target_link_libraries(vulkan-headers SYSTEM INTERFACE Vulkan::Headers) endif() else() - target_include_directories(vulkan-headers SYSTEM INTERFACE ./vulkan-headers/include) + target_include_directories(vulkan-headers INTERFACE ./vulkan-headers/include) + target_disable_warnings(vulkan-headers) endif() # adrenotools