[libc++] Use a function to set warning flags per target
This is part of a larger shift to move to per-target settings and eradicate global variables from the CMake build. I'm starting small with warnings only because those are easy to transition over and I want to see how it pans out, but we can handle all flags like exceptions and RTTI in the future. llvm-svn: 373511
This commit is contained in:
parent
3c1084373d
commit
c78c0e08be
|
@ -568,19 +568,19 @@ if (LIBCXX_HAS_COMMENT_LIB_PRAGMA)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Warning flags ===============================================================
|
# Warning flags ===============================================================
|
||||||
add_definitions(-D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
function(cxx_add_warning_flags target)
|
||||||
add_compile_flags_if_supported(
|
target_compile_definitions(${target} PUBLIC -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||||
-Wall -Wextra -W -Wwrite-strings
|
target_add_compile_flags_if_supported(${target} PRIVATE -Wall -Wextra -W -Wwrite-strings
|
||||||
-Wno-unused-parameter -Wno-long-long
|
-Wno-unused-parameter -Wno-long-long
|
||||||
-Werror=return-type -Wextra-semi)
|
-Werror=return-type -Wextra-semi)
|
||||||
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
|
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
|
||||||
add_compile_flags_if_supported(
|
target_add_compile_flags_if_supported(${target} PRIVATE
|
||||||
-Wno-user-defined-literals
|
-Wno-user-defined-literals
|
||||||
-Wno-covered-switch-default
|
-Wno-covered-switch-default
|
||||||
-Wno-ignored-attributes # FIXME: Caused by _LIBCPP_NODEBUG_TYPE not being supported on older clangs
|
-Wno-ignored-attributes # FIXME: Caused by _LIBCPP_NODEBUG_TYPE not being supported on older clangs
|
||||||
)
|
)
|
||||||
if (LIBCXX_TARGETING_CLANG_CL)
|
if (LIBCXX_TARGETING_CLANG_CL)
|
||||||
add_compile_flags_if_supported(
|
target_add_compile_flags_if_supported(${target} PRIVATE
|
||||||
-Wno-c++98-compat
|
-Wno-c++98-compat
|
||||||
-Wno-c++98-compat-pedantic
|
-Wno-c++98-compat-pedantic
|
||||||
-Wno-c++11-compat
|
-Wno-c++11-compat
|
||||||
|
@ -597,26 +597,27 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
|
||||||
-Wno-double-promotion # FIXME: remove me
|
-Wno-double-promotion # FIXME: remove me
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
|
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
|
||||||
add_compile_flags_if_supported(
|
target_add_compile_flags_if_supported(${target} PRIVATE
|
||||||
-Wno-literal-suffix
|
-Wno-literal-suffix
|
||||||
-Wno-c++14-compat
|
-Wno-c++14-compat
|
||||||
-Wno-noexcept-type)
|
-Wno-noexcept-type)
|
||||||
endif()
|
endif()
|
||||||
if (LIBCXX_ENABLE_WERROR)
|
if (LIBCXX_ENABLE_WERROR)
|
||||||
add_compile_flags_if_supported(-Werror)
|
target_add_compile_flags_if_supported(${target} PRIVATE -Werror)
|
||||||
add_compile_flags_if_supported(-WX)
|
target_add_compile_flags_if_supported(${target} PRIVATE -WX)
|
||||||
else()
|
else()
|
||||||
# TODO(EricWF) Remove this. We shouldn't be suppressing errors when -Werror is
|
# TODO(EricWF) Remove this. We shouldn't be suppressing errors when -Werror is
|
||||||
# added elsewhere.
|
# added elsewhere.
|
||||||
add_compile_flags_if_supported(-Wno-error)
|
target_add_compile_flags_if_supported(${target} PRIVATE -Wno-error)
|
||||||
endif()
|
endif()
|
||||||
if (LIBCXX_ENABLE_PEDANTIC)
|
if (LIBCXX_ENABLE_PEDANTIC)
|
||||||
add_compile_flags_if_supported(-pedantic)
|
target_add_compile_flags_if_supported(${target} PRIVATE -pedantic)
|
||||||
endif()
|
endif()
|
||||||
if (LIBCXX_DISABLE_MACRO_CONFLICT_WARNINGS)
|
if (LIBCXX_DISABLE_MACRO_CONFLICT_WARNINGS)
|
||||||
add_definitions(-D_LIBCPP_DISABLE_MACRO_CONFLICT_WARNINGS)
|
target_compile_definitions(${target} PRIVATE -D_LIBCPP_DISABLE_MACRO_CONFLICT_WARNINGS)
|
||||||
endif()
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
# Exception flags =============================================================
|
# Exception flags =============================================================
|
||||||
if (LIBCXX_ENABLE_EXCEPTIONS)
|
if (LIBCXX_ENABLE_EXCEPTIONS)
|
||||||
|
|
|
@ -260,6 +260,7 @@ if (LIBCXX_ENABLE_SHARED)
|
||||||
DEFINE_SYMBOL ""
|
DEFINE_SYMBOL ""
|
||||||
)
|
)
|
||||||
cxx_set_common_defines(cxx_shared)
|
cxx_set_common_defines(cxx_shared)
|
||||||
|
cxx_add_warning_flags(cxx_shared)
|
||||||
|
|
||||||
# Link against LLVM libunwind
|
# Link against LLVM libunwind
|
||||||
if (LIBCXXABI_USE_LLVM_UNWINDER)
|
if (LIBCXXABI_USE_LLVM_UNWINDER)
|
||||||
|
@ -360,6 +361,7 @@ if (LIBCXX_ENABLE_STATIC)
|
||||||
OUTPUT_NAME "c++"
|
OUTPUT_NAME "c++"
|
||||||
)
|
)
|
||||||
cxx_set_common_defines(cxx_static)
|
cxx_set_common_defines(cxx_static)
|
||||||
|
cxx_add_warning_flags(cxx_static)
|
||||||
|
|
||||||
if (LIBCXX_HERMETIC_STATIC_LIBRARY)
|
if (LIBCXX_HERMETIC_STATIC_LIBRARY)
|
||||||
# If the hermetic library doesn't define the operator new/delete functions
|
# If the hermetic library doesn't define the operator new/delete functions
|
||||||
|
|
Loading…
Reference in New Issue