[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:
Louis Dionne 2019-10-02 19:31:30 +00:00
parent 3c1084373d
commit c78c0e08be
2 changed files with 35 additions and 32 deletions

View File

@ -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)

View File

@ -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