[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