diff options
author | Eric Fiselier <eric@efcs.ca> | 2017-03-02 19:34:35 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2017-03-02 19:34:35 +0000 |
commit | 2ee1d90cb903aa1e1c3b3c559284e93188f178a8 (patch) | |
tree | 8b58eed4c1c7bcc76331b6b989f44326659ece27 | |
parent | 066d3d21415b188a761a286387ab6739c2e25fba (diff) | |
download | bcm5719-llvm-2ee1d90cb903aa1e1c3b3c559284e93188f178a8.tar.gz bcm5719-llvm-2ee1d90cb903aa1e1c3b3c559284e93188f178a8.zip |
[libc++abi] Add option to enable definitions for the new/delete overloads.
Summary:
Currently both libc++ and libc++abi provide definitions for operator new/delete. However I believe this is incorrect and that one or the other should offer them.
This patch adds the CMake option `-DLIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS` which defaults to `OFF` unless otherwise specified. This means that by default
only libc++ provides the new/delete definitions.
Reviewers: mclow.lists, mehdi_amini, dexonsmith, beanz, jroelofs, danalbert, smeenai, rmaprath, mgorny
Reviewed By: mehdi_amini
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D30517
llvm-svn: 296801
-rw-r--r-- | libcxxabi/CMakeLists.txt | 8 | ||||
-rw-r--r-- | libcxxabi/src/CMakeLists.txt | 7 |
2 files changed, 10 insertions, 5 deletions
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt index f73d7593493..6f54b915c03 100644 --- a/libcxxabi/CMakeLists.txt +++ b/libcxxabi/CMakeLists.txt @@ -141,6 +141,9 @@ option(LIBCXXABI_HAS_EXTERNAL_THREAD_API option(LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY "Build libc++abi with an externalized threading library. This option may only be set to ON when LIBCXXABI_ENABLE_THREADS=ON" OFF) +option(LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS + "Build libc++abi with definitions for operator new/delete. Normally libc++ + provides these definitions" OFF) option(LIBCXXABI_BUILD_32_BITS "Build 32 bit libc++abi." ${LLVM_BUILD_32_BITS}) option(LIBCXXABI_INCLUDE_TESTS "Generate build targets for the libc++abi unit tests." ${LLVM_INCLUDE_TESTS}) set(LIBCXXABI_TARGET_TRIPLE "" CACHE STRING "Target triple for cross compiling.") @@ -409,7 +412,10 @@ if (LIBCXXABI_HAS_EXTERNAL_THREAD_API) endif() endif() -if (LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY AND LIBCXXABI_ENABLE_SHARED) +set(LIBCXXABI_HAS_UNDEFINED_SYMBOLS ((NOT LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS) + OR (LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY AND LIBCXXABI_ENABLE_SHARED))) + +if (LIBCXXABI_HAS_UNDEFINED_SYMBOLS) # Need to allow unresolved symbols if this is to work with shared library builds if (APPLE) add_link_flags("-undefined dynamic_lookup") diff --git a/libcxxabi/src/CMakeLists.txt b/libcxxabi/src/CMakeLists.txt index 8eb28d43745..a3477034ebf 100644 --- a/libcxxabi/src/CMakeLists.txt +++ b/libcxxabi/src/CMakeLists.txt @@ -20,10 +20,9 @@ set(LIBCXXABI_SOURCES private_typeinfo.cpp ) -# FIXME: This file should only be compiled in special configurations such -# as building the Apple system dylib where libc++abi is expected to provide -# the new/delete definitions instead of libc++. -list(APPEND LIBCXXABI_SOURCES stdlib_new_delete.cpp) +if (LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS) + list(APPEND LIBCXXABI_SOURCES stdlib_new_delete.cpp) +endif() if (LIBCXXABI_ENABLE_EXCEPTIONS) list(APPEND LIBCXXABI_SOURCES cxa_exception.cpp) |