mirror of
https://github.com/darlinghq/darling-libcxx.git
synced 2024-11-26 21:30:42 +00:00
[libc++] Move more CMake flags to per-target definitions
This daily refactoring tackles flags related to modules, exceptions and RTTI. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@373767 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2b539adf22
commit
c1da965864
@ -630,22 +630,26 @@ function(cxx_add_warning_flags target)
|
||||
endfunction()
|
||||
|
||||
# Exception flags =============================================================
|
||||
if (LIBCXX_ENABLE_EXCEPTIONS)
|
||||
# Catches C++ exceptions only and tells the compiler to assume that extern C
|
||||
# functions never throw a C++ exception.
|
||||
add_compile_flags_if_supported(-EHsc)
|
||||
else()
|
||||
add_definitions(-D_LIBCPP_NO_EXCEPTIONS)
|
||||
add_compile_flags_if_supported(-EHs- -EHa-)
|
||||
add_compile_flags_if_supported(-fno-exceptions)
|
||||
endif()
|
||||
function(cxx_add_exception_flags target)
|
||||
if (LIBCXX_ENABLE_EXCEPTIONS)
|
||||
# Catches C++ exceptions only and tells the compiler to assume that extern C
|
||||
# functions never throw a C++ exception.
|
||||
target_add_compile_flags_if_supported(${target} PUBLIC -EHsc)
|
||||
else()
|
||||
target_compile_definitions(${target} PUBLIC -D_LIBCPP_NO_EXCEPTIONS)
|
||||
target_add_compile_flags_if_supported(${target} PUBLIC -EHs- -EHa-)
|
||||
target_add_compile_flags_if_supported(${target} PUBLIC -fno-exceptions)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# RTTI flags ==================================================================
|
||||
if (NOT LIBCXX_ENABLE_RTTI)
|
||||
add_definitions(-D_LIBCPP_NO_RTTI)
|
||||
add_compile_flags_if_supported(-GR-)
|
||||
add_compile_flags_if_supported(-fno-rtti)
|
||||
endif()
|
||||
function(cxx_add_rtti_flags target)
|
||||
if (NOT LIBCXX_ENABLE_RTTI)
|
||||
target_compile_definitions(${target} PUBLIC -D_LIBCPP_NO_RTTI)
|
||||
target_add_compile_flags_if_supported(${target} PUBLIC -GR-)
|
||||
target_add_compile_flags_if_supported(${target} PUBLIC -fno-rtti)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Threading flags =============================================================
|
||||
if (LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY AND LIBCXX_ENABLE_SHARED)
|
||||
@ -672,11 +676,13 @@ endif()
|
||||
# FIXME The libc++ sources are fundamentally non-modular. They need special
|
||||
# versions of the headers in order to provide C++03 and legacy ABI definitions.
|
||||
# NOTE: The public headers can be used with modules in all other contexts.
|
||||
if (LLVM_ENABLE_MODULES)
|
||||
# Ignore that the rest of the modules flags are now unused.
|
||||
add_compile_flags_if_supported(-Wno-unused-command-line-argument)
|
||||
add_compile_flags(-fno-modules)
|
||||
endif()
|
||||
function(cxx_add_module_flags target)
|
||||
if (LLVM_ENABLE_MODULES)
|
||||
# Ignore that the rest of the modules flags are now unused.
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -Wno-unused-command-line-argument)
|
||||
target_compile_options(${target} PRIVATE -fno-modules)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Sanitizer flags =============================================================
|
||||
|
||||
|
@ -235,6 +235,9 @@ if (LIBCXX_ENABLE_SHARED)
|
||||
cxx_add_warning_flags(cxx_shared)
|
||||
cxx_add_windows_flags(cxx_shared)
|
||||
cxx_add_config_site(cxx_shared)
|
||||
cxx_add_exception_flags(cxx_shared)
|
||||
cxx_add_rtti_flags(cxx_shared)
|
||||
cxx_add_module_flags(cxx_shared)
|
||||
|
||||
# Link against LLVM libunwind
|
||||
if (LIBCXXABI_USE_LLVM_UNWINDER)
|
||||
@ -339,6 +342,9 @@ if (LIBCXX_ENABLE_STATIC)
|
||||
cxx_add_warning_flags(cxx_static)
|
||||
cxx_add_windows_flags(cxx_static)
|
||||
cxx_add_config_site(cxx_static)
|
||||
cxx_add_exception_flags(cxx_static)
|
||||
cxx_add_rtti_flags(cxx_static)
|
||||
cxx_add_module_flags(cxx_static)
|
||||
|
||||
if (LIBCXX_HERMETIC_STATIC_LIBRARY)
|
||||
# If the hermetic library doesn't define the operator new/delete functions
|
||||
|
Loading…
Reference in New Issue
Block a user