mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 08:16:05 +00:00

If testing for a warning option like -Wno-<foo> with GCC, GCC won't print any diagnostic at all, leading to the options being accepted incorrectly. However later, if compiling a file that actually prints another warning, GCC will also print warnings about these -Wno-<foo> options being unrecognized. This avoids warning spam like this, for every OpenMP source file that produces build warnings with GCC: cc1plus: warning: unrecognized command line option ‘-Wno-int-to-void-pointer-cast’ cc1plus: warning: unrecognized command line option ‘-Wno-return-type-c-linkage’ cc1plus: warning: unrecognized command line option ‘-Wno-covered-switch-default’ cc1plus: warning: unrecognized command line option ‘-Wno-enum-constexpr-conversion’ This matches how such warning options are detected and added in llvm/cmake/modules/HandleLLVMOptions.cmake, e.g. like this: check_cxx_compiler_flag("-Wclass-memaccess" CXX_SUPPORTS_CLASS_MEMACCESS_FLAG) append_if(CXX_SUPPORTS_CLASS_MEMACCESS_FLAG "-Wno-class-memaccess" CMAKE_CXX_FLAGS) This also matches how LLDB warning options were restructured for GCC compatibility in e546bbfda0ab91cf78c096d8c035851cc7c3b9f3. Differential Revision: https://reviews.llvm.org/D139922
41 lines
1.9 KiB
CMake
41 lines
1.9 KiB
CMake
include(CheckCXXCompilerFlag)
|
|
include(CheckCXXSourceCompiles)
|
|
|
|
# Check for oneAPI compiler (some older CMake versions detect as Clang)
|
|
if (CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
|
check_cxx_source_compiles("#if (defined(__INTEL_CLANG_COMPILER) || defined(__INTEL_LLVM_COMPILER))
|
|
int main() { return 0; }
|
|
#else
|
|
not oneAPI
|
|
#endif" OPENMP_HAVE_ONEAPI_COMPILER)
|
|
if (OPENMP_HAVE_ONEAPI_COMPILER)
|
|
# According to CMake documentation, the compiler id should
|
|
# be IntelLLVM when detected oneAPI
|
|
set(CMAKE_C_COMPILER_ID "IntelLLVM")
|
|
set(CMAKE_CXX_COMPILER_ID "IntelLLVM")
|
|
endif()
|
|
endif()
|
|
|
|
check_cxx_compiler_flag(-Wall OPENMP_HAVE_WALL_FLAG)
|
|
check_cxx_compiler_flag(-Werror OPENMP_HAVE_WERROR_FLAG)
|
|
|
|
# Additional warnings that are not enabled by -Wall.
|
|
check_cxx_compiler_flag(-Wcast-qual OPENMP_HAVE_WCAST_QUAL_FLAG)
|
|
check_cxx_compiler_flag(-Wformat-pedantic OPENMP_HAVE_WFORMAT_PEDANTIC_FLAG)
|
|
check_cxx_compiler_flag(-Wimplicit-fallthrough OPENMP_HAVE_WIMPLICIT_FALLTHROUGH_FLAG)
|
|
check_cxx_compiler_flag(-Wsign-compare OPENMP_HAVE_WSIGN_COMPARE_FLAG)
|
|
|
|
# Warnings that we want to disable because they are too verbose or fragile.
|
|
|
|
# GCC silently accepts any -Wno-<foo> option, but warns about those options
|
|
# being unrecognized only if the compilation triggers other warnings to be
|
|
# printed. Therefore, check for whether the compiler supports options in the
|
|
# form -W<foo>, and if supported, add the corresponding -Wno-<foo> option.
|
|
|
|
check_cxx_compiler_flag(-Wenum-constexpr-conversion OPENMP_HAVE_WENUM_CONSTEXPR_CONVERSION_FLAG)
|
|
check_cxx_compiler_flag(-Wextra OPENMP_HAVE_WEXTRA_FLAG)
|
|
check_cxx_compiler_flag(-Wpedantic OPENMP_HAVE_WPEDANTIC_FLAG)
|
|
check_cxx_compiler_flag(-Wmaybe-uninitialized OPENMP_HAVE_WMAYBE_UNINITIALIZED_FLAG)
|
|
|
|
check_cxx_compiler_flag(-std=c++17 OPENMP_HAVE_STD_CPP17_FLAG)
|