Commit c78c0e08 authored by Louis Dionne's avatar Louis Dionne
Browse files

[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
parent 3c108437
Loading
Loading
Loading
Loading
+33 −32
Original line number Diff line number Diff line
@@ -568,19 +568,19 @@ if (LIBCXX_HAS_COMMENT_LIB_PRAGMA)
endif()

# Warning flags ===============================================================
add_definitions(-D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
add_compile_flags_if_supported(
    -Wall -Wextra -W -Wwrite-strings
function(cxx_add_warning_flags target)
  target_compile_definitions(${target} PUBLIC -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
  target_add_compile_flags_if_supported(${target} PRIVATE -Wall -Wextra -W -Wwrite-strings
                                                          -Wno-unused-parameter -Wno-long-long
                                                          -Werror=return-type -Wextra-semi)
  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-covered-switch-default
      -Wno-ignored-attributes # FIXME: Caused by _LIBCPP_NODEBUG_TYPE not being supported on older clangs
    )
    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-pedantic
        -Wno-c++11-compat
@@ -598,25 +598,26 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
      )
    endif()
  elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
    add_compile_flags_if_supported(
    target_add_compile_flags_if_supported(${target} PRIVATE
      -Wno-literal-suffix
      -Wno-c++14-compat
      -Wno-noexcept-type)
  endif()
  if (LIBCXX_ENABLE_WERROR)
  add_compile_flags_if_supported(-Werror)
  add_compile_flags_if_supported(-WX)
    target_add_compile_flags_if_supported(${target} PRIVATE -Werror)
    target_add_compile_flags_if_supported(${target} PRIVATE -WX)
  else()
    # TODO(EricWF) Remove this. We shouldn't be suppressing errors when -Werror is
    # added elsewhere.
  add_compile_flags_if_supported(-Wno-error)
    target_add_compile_flags_if_supported(${target} PRIVATE -Wno-error)
  endif()
  if (LIBCXX_ENABLE_PEDANTIC)
  add_compile_flags_if_supported(-pedantic)
    target_add_compile_flags_if_supported(${target} PRIVATE -pedantic)
  endif()
  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()
endfunction()

# Exception flags =============================================================
if (LIBCXX_ENABLE_EXCEPTIONS)
+2 −0
Original line number Diff line number Diff line
@@ -260,6 +260,7 @@ if (LIBCXX_ENABLE_SHARED)
      DEFINE_SYMBOL ""
  )
  cxx_set_common_defines(cxx_shared)
  cxx_add_warning_flags(cxx_shared)

  # Link against LLVM libunwind
  if (LIBCXXABI_USE_LLVM_UNWINDER)
@@ -360,6 +361,7 @@ if (LIBCXX_ENABLE_STATIC)
      OUTPUT_NAME   "c++"
  )
  cxx_set_common_defines(cxx_static)
  cxx_add_warning_flags(cxx_static)

  if (LIBCXX_HERMETIC_STATIC_LIBRARY)
    # If the hermetic library doesn't define the operator new/delete functions