chore(thirdparty): mark third-party include paths as SYSTEM (#413)

Add SYSTEM to target_include_directories in vendored CMake wrappers and
set INTERFACE_SYSTEM_INCLUDE_DIRECTORIES on imported / sub-project
targets so warnings from third-party headers no longer surface in our
build output. Introduces a mark_target_includes_system() helper in
cmake/utils.cmake (resolves aliases, skips missing targets) used by the
upstream-add_subdirectory wrappers (glog, gflags, googletest, yaml-cpp,
protobuf, antlr).
This commit is contained in:
egolearner 2026-05-19 15:03:07 +08:00 committed by GitHub
parent d580c08187
commit 51c6d9e0ec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 46 additions and 7 deletions

View File

@ -1,3 +1,22 @@
# Promote a target's INTERFACE_INCLUDE_DIRECTORIES to be treated as SYSTEM
# includes by consumers, suppressing warnings from third-party headers.
function(mark_target_includes_system)
foreach(_target ${ARGN})
if(NOT TARGET ${_target})
continue()
endif()
get_target_property(_aliased ${_target} ALIASED_TARGET)
if(_aliased)
set(_target ${_aliased})
endif()
get_target_property(_inc ${_target} INTERFACE_INCLUDE_DIRECTORIES)
if(_inc)
set_target_properties(${_target} PROPERTIES
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_inc}")
endif()
endforeach()
endfunction()
function(apply_patch_once patch_name target_dir patch_file)
set(mark_file "${target_dir}/.${patch_name}_patched")

View File

@ -31,7 +31,7 @@ set_target_properties(roaring PROPERTIES
# Two include roots:
# - CRoaring-2.0.4/ -> <roaring.h>, <roaring.hh>, <roaring64map.hh>
# - CRoaring-2.0.4/include/ -> <roaring/roaring.h> (legacy path used in code)
target_include_directories(roaring PUBLIC
target_include_directories(roaring SYSTEM PUBLIC
$<BUILD_INTERFACE:${_ROARING_AMAL_DIR}>
$<BUILD_INTERFACE:${_ROARING_AMAL_DIR}/include>
)

View File

@ -1,4 +1,4 @@
add_library(rabitqlib INTERFACE)
target_include_directories(
rabitqlib INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/RaBitQ-Library-0.1/include"
rabitqlib SYSTEM INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/RaBitQ-Library-0.1/include"
)

View File

@ -7,9 +7,10 @@ if(MSVC)
endif()
add_subdirectory(antlr4/runtime/Cpp/)
target_include_directories(antlr4_static INTERFACE
target_include_directories(antlr4_static SYSTEM INTERFACE
"${CMAKE_CURRENT_SOURCE_DIR}/antlr4/runtime/Cpp/runtime/src/"
)
mark_target_includes_system(antlr4_static)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
target_compile_options(antlr4_static PRIVATE -Wno-unknown-pragmas -Wno-unqualified-std-cast-call)

View File

@ -149,6 +149,7 @@ add_library(Arrow::arrow_depends UNKNOWN IMPORTED GLOBAL)
set_target_properties(
Arrow::arrow_depends PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${EXTERNAL_INC_DIR}
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ${EXTERNAL_INC_DIR}
IMPORTED_LOCATION "${LIB_ARROW_DEPENDS}"
)
add_dependencies(Arrow::arrow_depends ARROW.BUILD)
@ -158,6 +159,7 @@ add_library(Arrow::arrow_static UNKNOWN IMPORTED GLOBAL)
set_target_properties(
Arrow::arrow_static PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${EXTERNAL_INC_DIR}
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ${EXTERNAL_INC_DIR}
IMPORTED_LOCATION "${LIB_ARROW}"
INTERFACE_LINK_LIBRARIES "Arrow::arrow_depends"
INTERFACE_COMPILE_DEFINITIONS "ARROW_STATIC" #TODO(windows): see if this can be removed
@ -168,6 +170,7 @@ add_library(Arrow::parquet_static UNKNOWN IMPORTED GLOBAL)
set_target_properties(
Arrow::parquet_static PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${EXTERNAL_INC_DIR}
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ${EXTERNAL_INC_DIR}
IMPORTED_LOCATION "${LIB_PARQUET}"
INTERFACE_LINK_LIBRARIES "Arrow::arrow_depends;Arrow::arrow_static"
INTERFACE_COMPILE_DEFINITIONS "PARQUET_STATIC"
@ -178,6 +181,7 @@ add_library(Arrow::arrow_compute UNKNOWN IMPORTED GLOBAL)
set_target_properties(
Arrow::arrow_compute PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${EXTERNAL_INC_DIR}
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ${EXTERNAL_INC_DIR}
IMPORTED_LOCATION "${LIB_COMPUTE}"
INTERFACE_LINK_LIBRARIES "Arrow::arrow_depends;Arrow::arrow_static"
INTERFACE_COMPILE_DEFINITIONS "ARROW_COMPUTE_STATIC"
@ -188,6 +192,7 @@ add_library(Arrow::arrow_acero UNKNOWN IMPORTED GLOBAL)
set_target_properties(
Arrow::arrow_acero PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${EXTERNAL_INC_DIR}
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ${EXTERNAL_INC_DIR}
IMPORTED_LOCATION "${LIB_ACERO}"
INTERFACE_LINK_LIBRARIES "Arrow::arrow_depends;Arrow::arrow_static;Arrow::arrow_compute"
INTERFACE_COMPILE_DEFINITIONS "ARROW_ACERO_STATIC"
@ -198,6 +203,7 @@ add_library(Arrow::arrow_dataset UNKNOWN IMPORTED GLOBAL)
set_target_properties(
Arrow::arrow_dataset PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${EXTERNAL_INC_DIR}
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ${EXTERNAL_INC_DIR}
IMPORTED_LOCATION "${LIB_ARROW_DATASET}"
INTERFACE_LINK_LIBRARIES "Arrow::arrow_depends;Arrow::arrow_static;Arrow::arrow_compute;Arrow::arrow_acero"
INTERFACE_COMPILE_DEFINITIONS "ARROW_DS_STATIC"

View File

@ -15,6 +15,8 @@ add_subdirectory(gflags-2.2.2)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
unset(_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
mark_target_includes_system(gflags gflags_static gflags_nothreads_static)
get_target_property(gflags_OUTPUT_NAME gflags OUTPUT_NAME)
get_target_property(gflags_BINARY_DIR gflags BINARY_DIR)
get_target_property(gflags_SOURCE_DIR gflags SOURCE_DIR)

View File

@ -24,6 +24,8 @@ unset(_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
add_dependencies(glog gflags)
mark_target_includes_system(glog)
if(MSVC)
# Modern MSVC (1900+/VS2015+) provides snprintf in the CRT.
# Suppress glog's own declaration which conflicts with the SDK header.

View File

@ -20,6 +20,8 @@ add_subdirectory(googletest-1.10.0)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
unset(_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
mark_target_includes_system(gtest gtest_main gmock gmock_main)
get_target_property(GTEST_INCLUDE_DIRS gtest INTERFACE_INCLUDE_DIRECTORIES)
set(GTEST_FOUND TRUE PARENT_SCOPE)

View File

@ -130,6 +130,7 @@ add_library(lz4 STATIC IMPORTED GLOBAL)
set_target_properties(
lz4 PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${lz4_INCLUDE_DIR}"
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${lz4_INCLUDE_DIR}"
IMPORTED_LOCATION "${lz4_LIBRARY_DIR}/${LZ4_LIB_NAME}"
)
add_dependencies(lz4 Lz4.BUILD)

View File

@ -1,4 +1,4 @@
add_library(magic_enum INTERFACE)
target_include_directories(
magic_enum INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/magic_enum-0.9.7/include/"
magic_enum SYSTEM INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/magic_enum-0.9.7/include/"
)

View File

@ -10,6 +10,8 @@ add_subdirectory(protobuf-3.21.12/cmake protobuf-3.21.12)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
unset(_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
mark_target_includes_system(libprotobuf libprotobuf-lite libprotoc)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
target_compile_options(libprotobuf PRIVATE
-Wno-deprecated-declarations

View File

@ -57,6 +57,7 @@ if(NOT TARGET lz4::lz4)
IMPORTED_LOCATION_MINSIZEREL "${lz4_LIBRARY}"
IMPORTED_LOCATION_RELWITHDEBINFO "${lz4_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${lz4_INCLUDE_DIR}"
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${lz4_INCLUDE_DIR}"
)
add_dependencies(lz4::lz4 Lz4.BUILD)
endif()
@ -71,6 +72,7 @@ unset(_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
get_target_property(rocksdb_SOURCE_DIR rocksdb SOURCE_DIR)
set(ROCKSDB_INCLUDE_DIR ${rocksdb_SOURCE_DIR}/include)
target_include_directories(rocksdb PUBLIC $<BUILD_INTERFACE:${ROCKSDB_INCLUDE_DIR}>)
target_include_directories(rocksdb PRIVATE ${lz4_INCLUDE_DIR})
target_include_directories(rocksdb SYSTEM PUBLIC $<BUILD_INTERFACE:${ROCKSDB_INCLUDE_DIR}>)
target_include_directories(rocksdb SYSTEM PRIVATE ${lz4_INCLUDE_DIR})
mark_target_includes_system(rocksdb)
add_dependencies(rocksdb Lz4.BUILD)

View File

@ -12,5 +12,5 @@ endif()
add_library(sparsehash INTERFACE)
target_include_directories(
sparsehash INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/sparsehash-2.0.4/src/"
sparsehash SYSTEM INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/sparsehash-2.0.4/src/"
)

View File

@ -8,6 +8,8 @@ add_subdirectory(yaml-cpp-0.6.3)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
unset(_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
mark_target_includes_system(yaml-cpp)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
target_compile_options(yaml-cpp PRIVATE -Wno-shadow)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")