[libcxx] r250469 - [libcxx] Make libc++.so a linker script by default on most platforms.
Saleem Abdulrasool via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 15 19:28:01 PDT 2015
On Thu, Oct 15, 2015 at 3:41 PM, Eric Fiselier via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> 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.
>
I think that this probably is release-note-worthy.
> 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 at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
--
Saleem Abdulrasool
compnerd (at) compnerd (dot) org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151015/63f51693/attachment-0001.html>
More information about the cfe-commits
mailing list