Author: ericwf Date: Thu Oct 15 17:41:51 2015 New Revision: 250469 URL: http://llvm.org/viewvc/llvm-project?rev=250469&view=rev Log: [libcxx] Make libc++.so a linker script by default on most platforms.
Summary: 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! Reviewers: mclow.lists, danalbert, compnerd, jroelofs Subscribers: emaste, rengolin, cbergstrom, cfe-commits Differential Revision: http://reviews.llvm.org/D13739 Modified: libcxx/trunk/CMakeLists.txt libcxx/trunk/cmake/Modules/HandleOutOfTreeLLVM.cmake libcxx/trunk/docs/BuildingLibcxx.rst libcxx/trunk/docs/UsingLibcxx.rst Modified: libcxx/trunk/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/CMakeLists.txt?rev=250469&r1=250468&r2=250469&view=diff ============================================================================== --- libcxx/trunk/CMakeLists.txt (original) +++ libcxx/trunk/CMakeLists.txt Thu Oct 15 17:41:51 2015 @@ -67,12 +67,22 @@ set(LIBCXX_CXX_ABI "${LIBCXX_CXX_ABI}" C 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(ENABLE_LINKER_SCRIPT_DEFAULT_VALUE OFF) +if (LLVM_HAVE_LINK_VERSION_SCRIPT AND NOT LIBCXX_ENABLE_STATIC_ABI_LIBRARY) + set(ENABLE_LINKER_SCRIPT_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" + ${ENABLE_LINKER_SCRIPT_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. Modified: libcxx/trunk/cmake/Modules/HandleOutOfTreeLLVM.cmake URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/cmake/Modules/HandleOutOfTreeLLVM.cmake?rev=250469&r1=250468&r2=250469&view=diff ============================================================================== --- libcxx/trunk/cmake/Modules/HandleOutOfTreeLLVM.cmake (original) +++ libcxx/trunk/cmake/Modules/HandleOutOfTreeLLVM.cmake Thu Oct 15 17:41:51 2015 @@ -109,6 +109,30 @@ if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURR 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() Modified: libcxx/trunk/docs/BuildingLibcxx.rst URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/docs/BuildingLibcxx.rst?rev=250469&r1=250468&r2=250469&view=diff ============================================================================== --- libcxx/trunk/docs/BuildingLibcxx.rst (original) +++ libcxx/trunk/docs/BuildingLibcxx.rst Thu Oct 15 17:41:51 2015 @@ -170,6 +170,14 @@ ABI Library Specific Options If this option is enabled, libc++ will try and link the selected ABI library statically. +.. option:: LIBCXX_ENABLE_ABI_LINKER_SCRIPT:BOOL + + **Default**: ``ON`` by default on UNIX platforms other than Apple unless + 'LIBCXX_ENABLE_STATIC_ABI_LIBRARY' is ON. Otherwise the default value is ``OFF``. + + 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`` Modified: libcxx/trunk/docs/UsingLibcxx.rst URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/docs/UsingLibcxx.rst?rev=250469&r1=250468&r2=250469&view=diff ============================================================================== --- libcxx/trunk/docs/UsingLibcxx.rst (original) +++ libcxx/trunk/docs/UsingLibcxx.rst Thu Oct 15 17:41:51 2015 @@ -54,10 +54,10 @@ An example of using ``LD_LIBRARY_PATH``: 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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits