On Thu, Oct 15, 2015 at 3:41 PM, Eric Fiselier via cfe-commits < cfe-commits@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@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > -- Saleem Abdulrasool compnerd (at) compnerd (dot) org
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits