[libcxx-commits] [PATCH] D139493: [libc++] Allow for omitting __cxa_demangle from libc++[abi].so
Ryan Prichard via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Dec 6 17:54:19 PST 2022
rprichard created this revision.
rprichard added a reviewer: danalbert.
Herald added a project: All.
rprichard requested review of this revision.
Herald added a project: libc++abi.
Herald added a subscriber: libcxx-commits.
Herald added a reviewer: libc++abi.
The motivation is to reduce the size of libc++.so on Android. The flag
is always used with LIBCXXABI_NON_DEMANGLING_TERMINATE.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D139493
Files:
libcxxabi/CMakeLists.txt
libcxxabi/src/CMakeLists.txt
Index: libcxxabi/src/CMakeLists.txt
===================================================================
--- libcxxabi/src/CMakeLists.txt
+++ libcxxabi/src/CMakeLists.txt
@@ -3,7 +3,6 @@
# C++ABI files
cxa_aux_runtime.cpp
cxa_default_handlers.cpp
- cxa_demangle.cpp
cxa_exception_storage.cpp
cxa_guard.cpp
cxa_handlers.cpp
@@ -19,6 +18,12 @@
private_typeinfo.cpp
)
+if (NOT LIBCXXABI_STATIC_DEMANGLE_LIBRARY)
+ list(APPEND LIBCXXABI_SOURCES
+ cxa_demangle.cpp
+ )
+endif()
+
if (LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS)
list(APPEND LIBCXXABI_SOURCES
stdlib_new_delete.cpp
@@ -158,6 +163,24 @@
message(STATUS "Could not find ParallelSTL, libc++abi will not attempt to use it but the build may fail if the libc++ in use needs it to be available.")
endif()
+if (LIBCXXABI_STATIC_DEMANGLE_LIBRARY)
+ add_library(cxxabi_demangle_static STATIC cxa_demangle.cpp ${LIBCXXABI_HEADERS})
+ target_link_libraries(cxxabi_demangle_static PRIVATE cxx-headers cxxabi-headers)
+ set_target_properties(cxxabi_demangle_static
+ PROPERTIES
+ CXX_EXTENSIONS OFF
+ CXX_STANDARD 20
+ CXX_STANDARD_REQUIRED OFF
+ COMPILE_FLAGS "${LIBCXXABI_COMPILE_FLAGS}"
+ LINK_FLAGS "${LIBCXXABI_LINK_FLAGS}"
+ OUTPUT_NAME "c++demangle"
+ )
+ list(APPEND LIBCXXABI_BUILD_TARGETS "cxxabi_demangle_static")
+ if (LIBCXXABI_INSTALL_STATIC_LIBRARY)
+ list(APPEND LIBCXXABI_INSTALL_TARGETS "cxxabi_demangle_static")
+ endif()
+endif()
+
# Build the shared library.
add_library(cxxabi_shared_objects OBJECT EXCLUDE_FROM_ALL ${LIBCXXABI_SOURCES} ${LIBCXXABI_HEADERS})
if (LIBCXXABI_USE_LLVM_UNWINDER)
Index: libcxxabi/CMakeLists.txt
===================================================================
--- libcxxabi/CMakeLists.txt
+++ libcxxabi/CMakeLists.txt
@@ -130,6 +130,14 @@
option(LIBCXXABI_NON_DEMANGLING_TERMINATE "Set this to make the terminate handler
avoid demangling" OFF)
+# Omit __cxa_demangle to reduce the size of libc++[abi].so. Package it into a
+# separate static library for when it is actually needed.
+option(LIBCXXABI_STATIC_DEMANGLE_LIBRARY "Put __cxa_demangle into a separate static library" OFF)
+
+if (LIBCXXABI_STATIC_DEMANGLE_LIBRARY AND NOT LIBCXXABI_NON_DEMANGLING_TERMINATE)
+ message(FATAL_ERROR "libc++demangle is only supported when libc++abi doesn't use demangling")
+endif()
+
if (NOT LIBCXXABI_ENABLE_SHARED AND NOT LIBCXXABI_ENABLE_STATIC)
message(FATAL_ERROR "libc++abi must be built as either a shared or static library.")
endif()
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D139493.480723.patch
Type: text/x-patch
Size: 2529 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20221207/b0d4b7bd/attachment-0001.bin>
More information about the libcxx-commits
mailing list