@@ -88,6 +88,8 @@ set(CLANG_LT_13_CXX_WARNING_FLAGS "-Wreserved-id-macro")
8888set (CLANG_GE_13_CXX_WARNING_FLAGS "-Wreserved-identifier" )
8989# Do not enable clang 16+ -Wunsafe-buffer-usage because it warns on all memcpy
9090# calls and our pointer- and span-like class implementations.
91+ set (CLANG_GE_21_CXX_WARNING_FLAGS "-Wnrvo" "-Wunique-object-duplication"
92+ "-Wshift-bool" "-Wc99-designator" "-Wms-bitfield-padding" )
9193
9294set (GCC_CXX_WARNING_FLAGS
9395 # Warning groups
@@ -296,6 +298,9 @@ if(SANITIZE_UB)
296298 if (is_clang AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0)
297299 list (APPEND SANITIZER_CXX_FLAGS "-fsanitize=implicit-bitfield-conversion" )
298300 endif ()
301+ if (is_clang AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 21.0)
302+ list (APPEND SANITIZER_CXX_FLAGS "-fsanitize=vptr" )
303+ endif ()
299304 endif ()
300305
301306 set (SANITIZER_LD_FLAGS "-fsanitize=undefined" )
@@ -396,15 +401,19 @@ set(is_clang_cl "$<AND:${is_windows_genex},${is_clang_genex}>")
396401set (is_any_msvc "$<OR :${is_msvc} ,${is_clang_cl} >" )
397402set (is_x86_64_any_msvc "$<AND :${is_any_msvc} ,${is_windows_x86_64} >" )
398403set (is_clang_not_windows "$<AND :${is_clang_genex} ,${is_not_windows} >" )
404+ set (is_darwin_clang_x86_64 "$<AND :$<PLATFORM_ID :Darwin >,${is_clang_genex} ,${is_not_windows_x86_64} >" )
405+ set (is_darwin_clang_arm64 "$<AND :$<PLATFORM_ID :Darwin >,${is_clang_genex} ,$<NOT :${is_not_windows_x86_64} >>" )
399406# Compiler version
400407set (cxx_ge_11 "$<VERSION_GREATER_EQUAL :$<CXX_COMPILER_VERSION >,11.0>" )
401408set (cxx_ge_12 "$<VERSION_GREATER_EQUAL :$<CXX_COMPILER_VERSION >,12.0>" )
402409set (cxx_lt_13 "$<VERSION_LESS :$<CXX_COMPILER_VERSION >,13.0>" )
403410set (cxx_ge_13 "$<VERSION_GREATER_EQUAL :$<CXX_COMPILER_VERSION >,13.0>" )
404411set (cxx_ge_14 "$<VERSION_GREATER_EQUAL :$<CXX_COMPILER_VERSION >,14.0>" )
412+ set (cxx_ge_21 "$<VERSION_GREATER_EQUAL :$<CXX_COMPILER_VERSION >,21.0>" )
405413set (is_clang_lt_13_not_windows "$<AND :${is_clang_not_windows} ,${cxx_lt_13} >" )
406414set (is_clang_ge_13_not_windows "$<AND :${is_clang_not_windows} ,${cxx_ge_13} >" )
407415set (is_clang_ge_14_not_windows "$<AND :${is_clang_not_windows} ,${cxx_ge_14} >" )
416+ set (is_clang_ge_21_not_windows "$<AND :${is_clang_not_windows} ,${cxx_ge_21} >" )
408417set (is_gxx_ge_11 "$<AND :${is_gxx_genex} ,${cxx_ge_11} >" )
409418set (is_gxx_ge_12 "$<AND :${is_gxx_genex} ,${cxx_ge_12} >" )
410419set (is_gxx_ge_14 "$<AND :${is_gxx_genex} ,${cxx_ge_14} >" )
@@ -674,7 +683,7 @@ if(IWYU)
674683 IWYU_VERSION_OUTPUT )
675684 message (STATUS
676685 "include-what-you-use found: ${IWYU_EXE} , --version: ${IWYU_VERSION_OUTPUT} " )
677- set (DO_IWYU "${IWYU_EXE} " )
686+ set (DO_IWYU "${IWYU_EXE} ;-Wno-unknown-warning-option " )
678687 endif ()
679688 endif ()
680689endif ()
@@ -709,6 +718,7 @@ function(COMMON_TARGET_PROPERTIES TARGET)
709718 "$<$<AND :${is_standalone} ,${is_any_clang_genex} ,${is_not_windows} >:${CLANG_CXX_WARNING_FLAGS} >"
710719 "$<$<AND :${is_standalone} ,${is_clang_lt_13_not_windows} >:${CLANG_LT_13_CXX_WARNING_FLAGS} >"
711720 "$<$<AND :${is_standalone} ,${is_clang_ge_13_not_windows} >:${CLANG_GE_13_CXX_WARNING_FLAGS} >"
721+ "$<$<AND :${is_standalone} ,${is_clang_ge_21_not_windows} >:${CLANG_GE_21_CXX_WARNING_FLAGS} >"
712722 "$<$<AND :${is_standalone} ,${is_gxx_genex} >:${GCC_CXX_WARNING_FLAGS} >"
713723 "$<$<AND :${is_standalone} ,${is_gxx_ge_11} >:${GCC_GE_11_CXX_WARNING_FLAGS} >"
714724 "$<$<AND :${is_standalone} ,${is_gxx_ge_12} >:${GCC_GE_12_CXX_WARNING_FLAGS} >"
@@ -721,6 +731,10 @@ function(COMMON_TARGET_PROPERTIES TARGET)
721731 target_link_options (${TARGET} INTERFACE "$<${coverage_on} :--coverage >" )
722732 target_link_options (${TARGET} PRIVATE
723733 "$<${is_apple_clang_genex} :-Wl ,-no_warn_duplicate_libraries >"
734+ "$<${is_darwin_clang_x86_64} :-L /usr /local /opt /llvm /lib /c ++>"
735+ "$<${is_darwin_clang_x86_64} :-Wl ,-rpath ,/usr /local /opt /llvm /lib /c ++>"
736+ "$<${is_darwin_clang_arm64} :-L /opt /homebrew /opt /llvm /lib /c ++>"
737+ "$<${is_darwin_clang_arm64} :-Wl ,-rpath ,/opt /homebrew /opt /llvm /lib /c ++>"
724738 "${SANITIZER_LD_FLAGS} "
725739 )
726740 target_link_libraries (${TARGET} PRIVATE
0 commit comments