[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