EricWF created this revision.
EricWF added reviewers: mclow.lists, jroelofs, danalbert, compnerd.
EricWF added subscribers: cfe-commits, cbergstrom, rengolin, emaste.
This patch turns on `LIBCXX_ENABLE_ABI_LINKER_SCRIPT` by default whenever
`LLVM_HAVE_LINK_VERSION_SCRIPT` is ON. This turns out to be whenever:
1. WIN32 is not defined.
2 UNIX is defined.
3. APPLE is not defined.
While `LLVM_HAVE_LINK_VERSION_SCRIPT` is meant to reflect exactly what we are
asking I think it's close enough.
After committing this patch Linux users will no longer have to use "-lc++abi"
explicitly!
http://reviews.llvm.org/D13739
Files:
CMakeLists.txt
cmake/Modules/HandleOutOfTreeLLVM.cmake
docs/BuildingLibcxx.rst
docs/UsingLibcxx.rst
Index: docs/UsingLibcxx.rst
===================================================================
--- docs/UsingLibcxx.rst
+++ docs/UsingLibcxx.rst
@@ -54,10 +54,10 @@
Using libc++ on Linux
=====================
-On Linux libc++ typically links to a shared version of libc++abi. Unfortunately
-you can't simply run clang with "-stdlib=libc++" as clang is not set up to
-link for this configuration. To get around this you'll have to manually
-link libc++abi yourself. For example:
+On Linux libc++ can typically be used with only '-stdlib=libc++'. However
+some libc++ installations require the user manually link libc++abi themselves.
+If you are running into linker errors when using libc++ try adding "-lc++abi"
+to the link line. For example:
.. code-block:: bash
Index: docs/BuildingLibcxx.rst
===================================================================
--- docs/BuildingLibcxx.rst
+++ docs/BuildingLibcxx.rst
@@ -170,6 +170,14 @@
If this option is enabled, libc++ will try and link the selected ABI library
statically.
+.. option:: LIBCXX_ENABLE_ABI_LINKER_SCRIPT:BOOL
+
+ **Default**: ``OFF`` On Windows and Apple or when
+ ``LIBCXX_ENABLE_STATIC_ABI_LIBRARY`` is specified and ``ON`` otherwise.
+
+ This option generate and installs a linker script as ``libc++.so`` which
+ links the correct ABI library.
+
.. option:: LIBCXXABI_USE_LLVM_UNWINDER:BOOL
**Default**: ``OFF``
Index: cmake/Modules/HandleOutOfTreeLLVM.cmake
===================================================================
--- cmake/Modules/HandleOutOfTreeLLVM.cmake
+++ cmake/Modules/HandleOutOfTreeLLVM.cmake
@@ -109,6 +109,30 @@
message(STATUS "Sphinx disabled.")
endif()
+ # FIXME - This is cribbed from HandleLLVMOptions.cmake.
+ if(WIN32)
+ set(LLVM_HAVE_LINK_VERSION_SCRIPT 0)
+ if(CYGWIN)
+ set(LLVM_ON_WIN32 0)
+ set(LLVM_ON_UNIX 1)
+ else(CYGWIN)
+ set(LLVM_ON_WIN32 1)
+ set(LLVM_ON_UNIX 0)
+ endif(CYGWIN)
+ else(WIN32)
+ if(UNIX)
+ set(LLVM_ON_WIN32 0)
+ set(LLVM_ON_UNIX 1)
+ if(APPLE)
+ set(LLVM_HAVE_LINK_VERSION_SCRIPT 0)
+ else(APPLE)
+ set(LLVM_HAVE_LINK_VERSION_SCRIPT 1)
+ endif(APPLE)
+ else(UNIX)
+ MESSAGE(SEND_ERROR "Unable to determine platform")
+ endif(UNIX)
+ endif(WIN32)
+
# Add LLVM Functions --------------------------------------------------------
include(AddLLVM OPTIONAL)
endif()
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -67,12 +67,21 @@
set(CXXABIS none libcxxabi libcxxrt libstdc++ libsupc++)
set_property(CACHE LIBCXX_CXX_ABI PROPERTY STRINGS ;${CXXABIS})
+# Use a static copy of the ABI library when linking libc++. This option
+# cannot be used with LIBCXX_ENABLE_ABI_LINKER_SCRIPT.
option(LIBCXX_ENABLE_STATIC_ABI_LIBRARY "Statically link the ABI library" OFF)
# Generate and install a linker script inplace of libc++.so. The linker script
-# will link libc++ to the correct ABI library.
+# will link libc++ to the correct ABI library. This option is ON by default
+# On UNIX platforms other than Apple unless 'LIBCXX_ENABLE_STATIC_ABI_LIBRARY'
+# is ON.
+set(DEFAULT_VALUE OFF)
+if (LLVM_HAVE_LINK_VERSION_SCRIPT AND NOT LIBCXX_ENABLE_STATIC_ABI_LIBRARY)
+ set(DEFAULT_VALUE ON)
+endif()
+
option(LIBCXX_ENABLE_ABI_LINKER_SCRIPT
- "Use and install a linker script for the given ABI library" OFF)
+ "Use and install a linker script for the given ABI library" ${DEFAULT_VALUE})
# Build libc++abi with libunwind. We need this option to determine whether to
# link with libunwind or libgcc_s while running the test cases.
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits