summaryrefslogtreecommitdiffstats
path: root/libcxx/cmake/Modules/HandleLibCXXABI.cmake
Commit message (Collapse)AuthorAgeFilesLines
* Revert "[libc++] Take 3: Do not cleverly link against libc++abi just because ↵Louis Dionne2019-08-081-1/+1
| | | | | | | | | | | it happens to be there" This also reverts "[libc++] Remove temporary hack for D63883". Clearly, I don't understand how the Linux build bots are configured. Differential Revision: https://reviews.llvm.org/D63883 llvm-svn: 368238
* [libc++] Take 3: Do not cleverly link against libc++abi just because it ↵Louis Dionne2019-08-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | happens to be there Summary: Otherwise, when libcxxabi is not an enabled project in the monorepo, we get a link error because we try to link against non-existent cxxabi_shared. More generally, we shouldn't change the behavior of the build based on implicit things like whether a file happens to be at a specific path or not. This is a re-application of r365222 that had been reverted in r365233 and then r365359 because it broke the build bots. The build bots should now specify explicitly what ABI library they want to use (libc++abi), so this commit should now be OK to merge. It takes a while for build bots to pick up configuration changes, which is why this failed the last time around. Differential Revision: https://reviews.llvm.org/D63883 llvm-svn: 368213
* Revert "[libc++] Take 2: Do not cleverly link against libc++abi just because ↵Vitaly Buka2019-07-081-1/+1
| | | | | | | | | | | | | | it happens to be there" r365326 still breaks bots: http://lab.llvm.org:8011/builders/netbsd-amd64/builds/20712/steps/ninja%20build%20local/logs/stdio http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/39477/steps/test%20tsan%20in%20debug%20compiler-rt%20build/logs/stdio And probably others This reverts commit 945b9ec0693390ef35fe8c6b774495312246b8b6. llvm-svn: 365359
* [libc++] Take 2: Do not cleverly link against libc++abi just because it ↵Louis Dionne2019-07-081-1/+1
| | | | | | | | | | | | | | | | | | | | | happens to be there Summary: Otherwise, when libcxxabi is not an enabled project in the monorepo, we get a link error because we try to link against non-existent cxxabi_shared. More generally, we shouldn't change the behavior of the build based on implicit things like whether a file happens to be at a specific path or not. This is a re-application of r365222 that had been reverted in r365233 because it broke the build bots. However, the build bots now specify explicitly what ABI library they want to use (libc++abi), so this commit should now be OK to merge. Differential Revision: https://reviews.llvm.org/D63883 llvm-svn: 365326
* Revert "[libc++] Do not cleverly link against libc++abi just because it ↵Louis Dionne2019-07-051-1/+1
| | | | | | | | happens to be there" This reverts r365222, which broke the libc++ build bots. llvm-svn: 365233
* [libc++] Do not cleverly link against libc++abi just because it happens to ↵Louis Dionne2019-07-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | be there Summary: Otherwise, when libcxxabi is not an enabled project in the monorepo, we get a link error because we try to link against non-existent cxxabi_shared. More generally, we shouldn't change the behavior of the build based on implicit things like whether a file happens to be at a specific path or not. Reviewers: EricWF Subscribers: mgorny, christof, jkorous, dexonsmith, libcxx-commits Tags: #libc Differential Revision: https://reviews.llvm.org/D63883 llvm-svn: 365222
* [CMake] Differentiate between static and shared libc++abiPetr Hosek2019-04-031-14/+18
| | | | | | | | | | | | | | | This addresses the issue introduced in r354212 which broke the case when static libc++abi is merged into static libc++, but shared libc++ is linked against shared libc++. There are 4 different possible combinations which is difficult to capture using a single variable. This change splits LIBCXX_CXX_ABI_LIBRARY into two: LIBCXX_CXX_SHARED_ABI_LIBRARY and LIBCXX_CXX_STATIC_ABI_LIBRARY to handle the shared and static cases. This in turn allows simplification of some of the logic around merging of static archives. Differential Revision: https://reviews.llvm.org/D60114 llvm-svn: 357556
* [libc++][CMake] Clean up some of the libc++ re-exporting logicLouis Dionne2019-03-201-1/+0
| | | | | | | | | | | | | | | | | | | | | | Summary: This change allows specifying the version of libc++abi's ABI to re-export when configuring CMake. It also clearly identifies which ABI version of libc++abi each export file contains. Finally, it removes hardcoded knowledge about the 10.9 SDK for MacOS, since that knowledge is not relevant anymore. Indeed, libc++ can't be built with the toolchain that came with the 10.9 SDK anyway because the version of Clang it includes is too old (for example if you want to build a working libc++.dylib, you need bugfixes to visibility attributes that are only in recent Clangs). Reviewers: dexonsmith, EricWF Subscribers: mgorny, christof, jkorous, arphaman, libcxx-commits Differential Revision: https://reviews.llvm.org/D59489 llvm-svn: 356587
* [compiler-rt] Build custom libcxx with libcxxabiJonas Hahnfeld2019-02-171-1/+1
| | | | | | | | | | | | | | | This changes add_custom_libcxx to also build libcxxabi and merges the two into a static and hermetic library. There are multiple advantages: 1) The resulting libFuzzer doesn't expose C++ internals and looks like a plain C library. 2) We don't have to manually link in libstdc++ to provide cxxabi. 3) The sanitizer tests cannot interfere with an installed version of libc++.so in LD_LIBRARY_PATH. Differential Revision: https://reviews.llvm.org/D58013 llvm-svn: 354212
* [CMake] Use just basename when copying C++ ABI headersPetr Hosek2018-10-041-1/+1
| | | | | | | | | | This avoids duplicate directories when the filename includes path. Fixes PR39145 Differential Revision: https://reviews.llvm.org/D52762 llvm-svn: 343753
* [CMake] Don't install c++abi headers in standalone libc++ buildPetr Hosek2018-07-251-1/+1
| | | | | | | | | | | This is a refinement on r337833. Previously we were installing two copies of c++abi headers in libc++ build directory, one in include/c++build and another one in include/c++/v1. However, the second copy is unnecessary when building libc++ standalone. Differential Revision: https://reviews.llvm.org/D49752 llvm-svn: 337979
* [CMake] Fix the setting of LIBCXX_HEADER_DIR in standalone buildPetr Hosek2018-07-241-6/+8
| | | | | | | | | | | | This is an alternative approach to r337727 which broke the build because libc++ headers were copied into the location outside of directories used by Clang. This change sets LIBCXX_HEADER_DIR to different values depending on whether libc++ is being built as part of LLVM w/ per-target multiarch runtime, LLVM or standalone. Differential Revision: https://reviews.llvm.org/D49711 llvm-svn: 337833
* Reland "[CMake] Support statically linking dependencies only to shared or ↵Petr Hosek2018-07-241-3/+3
| | | | | | | | static library" This is a reland of commit r337668. llvm-svn: 337814
* Revert "[CMake] Support statically linking dependencies only to shared or ↵Petr Hosek2018-07-231-3/+3
| | | | | | | | static library" This reverts commit r337668: broke the cxxabi build when using Make. llvm-svn: 337670
* [CMake] Support statically linking dependencies only to shared or static libraryPetr Hosek2018-07-231-3/+3
| | | | | | | | | | | | | | Currently it's possible to select whether to statically link unwinder or the C++ ABI library, but this option applies to both the shared and static library. However, in some scenarios it may be desirable to only statically link unwinder and C++ ABI library into static C++ library since for shared C++ library we can rely on dynamic linking and linker scripts. This change enables selectively enabling or disabling statically linking only to shared or static library. Differential Revision: https://reviews.llvm.org/D49502 llvm-svn: 337668
* [CMake] Install C++ ABI headers into the right locationPetr Hosek2018-07-201-10/+2
| | | | | | | | | | | This is a follow-up to r335809 and r337118. While libc++ headers are now installed into the right location in both standard as well as multiarch runtimes layout, turned out C++ ABI headers are still installed into the old location in the latter case. This change addresses that. Differential Revision: https://reviews.llvm.org/D49584 llvm-svn: 337630
* Support for multiarch runtimes layoutPetr Hosek2018-06-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | This change adds a support for multiarch style runtimes layout, so in addition to the existing layout where runtimes get installed to: lib/clang/$version/lib/$os Clang now allows runtimes to be installed to: lib/clang/$version/$target/lib This also includes libc++, libc++abi and libunwind; today those are assumed to be in Clang library directory built for host, with the new layout it is possible to install libc++, libc++abi and libunwind into the runtime directory built for different targets. The use of new layout is enabled by setting the LLVM_ENABLE_RUNTIME_TARGET_DIR CMake variable and is supported by both projects and runtimes layouts. The runtimes CMake build has been further modified to use the new layout when building runtimes for multiple targets. Differential Revision: https://reviews.llvm.org/D45604 llvm-svn: 335809
* [CMake] Use common variable for all header targets NFCPetr Hosek2018-06-121-2/+2
| | | | | | This simplifies the handling of header targets. llvm-svn: 334477
* [CMake] Add a missing target dependency on C++ ABI headersPetr Hosek2018-06-121-0/+1
| | | | | | | This resolves the breakage introduced in r334468 which results in build error when using CMake Makefile generator. llvm-svn: 334470
* Reland "Use custom command and target to install libc++ headers"Petr Hosek2018-06-121-7/+17
| | | | | | | | | | | | | | | | | | | Using file(COPY FILE...) has several downsides. Since the file command is only executed at configuration time, any changes to headers made after the initial CMake execution are ignored. This can lead to subtle errors since the just built Clang will be using stale libc++ headers. Furthermore, since the headers are copied prior to executing the build system, this may hide missing dependencies on libc++ from other LLVM components. This changes replaces the use of file(COPY FILE...) command with a custom command and target which addresses all aforementioned issues and matches the implementation already used by other LLVM components that also install headers like Clang builtin headers. Differential Revision: https://reviews.llvm.org/D44773 llvm-svn: 334468
* Revert "[CMake] Use custom command and target to install libc++ headers"Petr Hosek2018-04-091-17/+7
| | | | | | This reverts commit r329544 which is failing on libcxx standalone bots. llvm-svn: 329545
* [CMake] Use custom command and target to install libc++ headersPetr Hosek2018-04-091-7/+17
| | | | | | | | | | | | | | | | | | | Using file(COPY FILE...) has several downsides. Since the file command is only executed at configuration time, any changes to headers made after the initial CMake execution are ignored. This can lead to subtle errors since the just built Clang will be using stale libc++ headers. Furthermore, since the headers are copied prior to executing the build system, this may hide missing dependencies on libc++ from other LLVM components. This changes replaces the use of file(COPY FILE...) command with a custom command and target which addresses all aforementioned issues and matches the implementation already used by other LLVM components that also install headers like Clang builtin headers. Differential Revision: https://reviews.llvm.org/D44773 llvm-svn: 329544
* Fix installation of cxxabi.h through libc++.Eric Fiselier2017-11-251-1/+1
| | | | | | | | | | Previously, the install command for the cxxabi headers specified the wrong component, and therefore they were not being included in the install-cxx command. This patch corrects the component name. llvm-svn: 318989
* [libcxx][CMake] Add install path variable to allow overriding the destinationPetr Hosek2017-07-111-1/+1
| | | | | | | | | This is going to be used by the runtime build in the multi-target setup to allow using different install prefix for each target. Differential Revision: https://reviews.llvm.org/D33762 llvm-svn: 307615
* Recommit "Split exception.cpp and new.cpp implementation into different ↵Eric Fiselier2017-02-101-3/+5
| | | | | | | | | | | | | | | | | | | | | | files for different runtimes." This recommits r294707 with additional fixes. The main difference is libc++ now correctly builds without any ABI library. exception.cpp is a bloody mess. It's full of confusing #ifdef branches for each different ABI library we support, and it's getting unmaintainable. This patch breaks down exception.cpp into multiple different header files, roughly one per implementation. Additionally it moves the definitions of exceptions in new.cpp into the correct implementation header. This patch also removes an unmaintained libc++abi configuration. This configuration may still be used by Apple internally but there are no other possible users. If it turns out that Apple still uses this configuration internally I will re-add it in a later commit. See http://llvm.org/PR31904. llvm-svn: 294730
* Revert "Split exception.cpp and new.cpp implementation into different files ↵Eric Fiselier2017-02-101-5/+3
| | | | | | | | for different runtimes." The compiler-rt CMake configuration needs some tweaking before this can land. llvm-svn: 294727
* Correctly default to using the system libc++abi on Apple.Eric Fiselier2017-02-101-3/+5
| | | | | | | This patch fixes a regression where libc++ didn't correctly select the system libc++abi when no in-tree version was found. llvm-svn: 294712
* Improve CMake and LIT support for WindowsEric Fiselier2017-01-161-6/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch contains multiple cleanups and fixes to better support building on Windows. * [Test] Fix handling of library runtime search paths by correctly adding them to the PATH variable when running the tests. * [Test] Don't explicitly force "--target=i686-pc-windows" when running the test suite. Clang++ seems to deduce the correct target. * [Test] Fix `.sh.cpp` tests on Windows by properly escaping flags used in shell commands. Specifically windows style paths which included spaces were causing these tests to fail. * [CMake] Add "vcruntime" to the list of supported C++ ABI libraries in CMake, and teach the test suite how to handle it. For now libc++ defaults to using "vcruntime" on Windows except when libc++abi is in tree; That is probably a bug and should be changed to always use vcruntime, at least for now. * [Misc] Move the "c++-build" include directory to the libc++ binary dir instead of the top level project dir and rename it "c++build". This is just misc cleanup. Libc++ shouldn't be creating internal build files and directories at the top-level projects root. * [Misc] Build type_info's destructor when building for MSVC. This is a temporary work around to prevent link errors until we have a proper type_info implementation. llvm-svn: 292157
* PR31540: install libc++abi headers into include/c++/v1 in build area.Richard Smith2017-01-051-1/+9
| | | | | | This allows an in-build-area clang binary to find <cxxabi.h>. llvm-svn: 291065
* Recommit r290839 - Fix configuring and building libc++ w/o an ABI library.Eric Fiselier2017-01-031-3/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch re-commits a previous attempt to support building libc++ w/o an ABI library. That patch was originally reverted because: 1) It forgot to teach the test suite about "default" ABI libraries. 2) Some LLVM builders don't clear the CMake cache between builds. The previous patch caused those builders to fail since their old cache entry for LIBCXX_CXX_ABI="" is no longer valid. The updated patch addresses both issues. It works around (2) by adding a hack to force the builders to update their cache entries. The hack will be removed shortly once all LLVM builders have run. Original commit message ----------------------- Typically libc++ uses libc++abi or libcxxrt to provide the ABI and runtime bits of the C++ STL. However we also support building w/o an ABI library entirely. This patch fixes building libc++ w/o an ABI library (and incorporates the `~type_info()` fix in D28211). The main changes in this patch are: 1) Add `-DLIBCXX_CXX_ABI=default` instead of using the empty string to mean "default". 2) Fix CMake bits which treated "none" as "default" on OS X. 3) Teach the source files to respect `-D_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY`. 4) Define ~type_info() when _LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY is defined. Unfortunately this patch doesn't help clean up the macro mess that we use to configure for different ABI libraries. llvm-svn: 290849
* Revert r290839 - Fix configuring and building libc++ w/o an ABI libraryEric Fiselier2017-01-021-5/+1
| | | | llvm-svn: 290841
* Fix configuring and building libc++ w/o an ABI library.Eric Fiselier2017-01-021-1/+5
| | | | | | | | | | | | | | | | | | | Typically libc++ uses libc++abi or libcxxrt to provide the ABI and runtime bits of the C++ STL. However we also support building w/o an ABI library entirely. This patch fixes building libc++ w/o an ABI library (and incorporates the `~type_info()` fix in D28211). The main changes in this patch are: 1) Add `-DLIBCXX_CXX_ABI=default` instead of using the empty string to mean "default". 2) Fix CMake bits which treated "none" as "default" on OS X. 3) Teach the source files to respect `-D_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY`. 4) Define ~type_info() when _LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY is defined. Unfortunately this patch doesn't help clean up the macro mess that we use to configure for different ABI libraries. llvm-svn: 290839
* Put C++ ABI headers in a special build directory instead of the top level.Eric Fiselier2016-12-091-6/+8
| | | | | | | | | | | | | | This patch changes where the C++ ABI headers are put during the build. Previously they were put in the top level include directory (not the libc++ header directory). However that just polutes the top level directory. Instead this patch creates a special directory to put them in. The reason they can't be put under c++/v1 until after the build is because libc++ uses the in-source headers, so we can't add the include path of the libc++ headers in the object dir. Additionally this patch teaches the test suite how to find the ABI headers, and adds a demangling utility to help debug tests with. llvm-svn: 289195
* Remove dead CMake targetEric Fiselier2016-10-141-2/+0
| | | | llvm-svn: 284216
* Fix PR27875. Parse LIBCXX_CXX_ABI_LIBRARY_PATH as a path not a stringEric Fiselier2016-05-271-2/+4
| | | | llvm-svn: 271070
* Only disable linker script when LIBCXX_CXX_ABI_LIBNAME is noneEric Fiselier2015-10-221-13/+0
| | | | llvm-svn: 251063
* [libcxx] Remove installation rules on Darwin when it would overwrite the ↵Eric Fiselier2015-08-261-5/+7
| | | | | | | | | | | | | | | | | system installation. Summary: On Mac OS X overwriting `/usr/lib/libc++.dylib` can cause your computer to fail to boot. This patch tries to make it harder to do that accidentally. If `CMAKE_SYSTEM_NAME` is `Darwin` and `CMAKE_INSTALL_PREFIX` is `/usr` don't generate installation rules unless the user explicitly provides `LIBCXX_OVERRIDE_DARWIN_INSTALL=ON`. Note that `CMAKE_INSTALL_PREFIX` is always absolute so we don't need to worry about things like `/usr/../usr`. Reviewers: mclow.lists, beanz, jroelofs Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D12209 llvm-svn: 246070
* [libcxx] Add "install-libcxx" target.Eric Fiselier2015-08-191-0/+1
| | | | | | | | | | | | Summary: Currently you can't install libc++ from within the LLVM tree without installing all of LLVM. This patch adds an install rule for libc++. Reviewers: mclow.lists, danalbert, jroelofs, EricWF Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D11697 llvm-svn: 245470
* Reapply working parts of CMake cleanup.Eric Fiselier2015-07-301-0/+15
| | | | | | | This patch adds the working parts of r243503. The difference with this patch is that it doesn't include the HandleLLVMOptions.cmake file. llvm-svn: 243698
* Revert recent CMake changes again due to failing compiler-rt buildsEric Fiselier2015-07-291-15/+0
| | | | llvm-svn: 243593
* Recommit r243503 "[libcxx] Cleanup CMake configuration and integrate with LLVM"Eric Fiselier2015-07-291-0/+15
| | | | | | | | | This change was reverted in r243550 because it broke clang-format builds (see PR24306). This patch recommits a fixed version of the original. llvm-svn: 243574
* Revert r243503 "[libcxx] Cleanup CMake configuration and integrate with LLVM"Hans Wennborg2015-07-291-15/+0
| | | | | | This caused clang-format to stop linking on Mac; see PR24306. llvm-svn: 243550
* [libcxx] Cleanup CMake configuration and integrate with LLVMEric Fiselier2015-07-291-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | Summary: This patch contains the following changes: 1. Require that libc++ can find a LLVM source directory. This is done the same way as `libc++abi` currently does. 2. Cleanup ugly configuration code in CMakeLists.txt by using `add_flags`, `add_flags_if`, and `add_flags_if_supported` macros. The goals for this patch are: 1. Help libc++ be more consistent with how LLVM handles CMake options (see PR23670 PR23671). 2. Make it easier to use sanitizers using the `LLVM_USE_SANITIZER` option. 3. Make libc++'s CMakeLists.txt file easier to understand and change. 4. Move towards allowing libc++ to create Sphinx documentation (see http://efcs.ca/libcxx-docs). 5. Move towards allowing libc++ to use other LLVM utilities such as `not` and `FileCheck`. Reviewers: mclow.lists, jroelofs, danalbert Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D11308 llvm-svn: 243503
* Fix building and testing libc++ with GCC.Eric Fiselier2015-05-201-1/+1
| | | | | | | | | | | | | | | | The changes in src/exception.cpp and cmake/Modules/HandleLibCXXABI.cmake fix a bug when building libc++ with GCC. Because GCC does not support __has_include we need to explicitly tell it that we are building against libc++abi via the preprocessor definition `LIBCXX_BUILDING_LIBCXXABI`. The changes in include/ratio are to work around CWG defect 1712 (constexpr variable template declarations). GCC 4.8 and before has not adopted the resolution to this defect. The changes in include/exception work around an issue where is_final is used without it being defined in type_traits. llvm-svn: 237767
* [libcxx] Unify LIBCXX_<ABI-Name>_INCLUDE_PATHS to be ↵Eric Fiselier2015-03-191-6/+6
| | | | | | | | | | | | | | | | | | | | | | LIBCXX_CXX_ABI_INCLUDE_PATHS Summary: Clean up all the different possible CMake options for specifying the ABI include paths into one CMake option named `LIBCXX_CXX_ABI_INCLUDE_PATHS`. The documentation has been updated to reflect this change. For the next week I have added explicit errors if any of the old flags is used. These errors inform users of the change and the new option to use. Before committing the change I will announce this change on cfe-dev. Reviewers: danalbert, mclow.lists Reviewed By: danalbert, mclow.lists Subscribers: jroelofs, cbergstrom, cfe-commits Differential Revision: http://reviews.llvm.org/D5039 llvm-svn: 232762
* [libcxx] Add support for linking libc++ against a static ABI library.Eric Fiselier2015-03-031-1/+5
| | | | | | | | | | | | | | | | Summary: This patch add the CMake option `LIBCXX_ENABLE_STATIC_ABI_LIBRARY` which, when enabled, will link libc++ against the static version of the ABI library. Reviewers: mclow.lists, jroelofs, danalbert Reviewed By: danalbert Subscribers: compnerd, cfe-commits Differential Revision: http://reviews.llvm.org/D8017 llvm-svn: 231076
* [libcxx] Move to using libc++abi2.exp as the default symbol list for libc++Eric Fiselier2015-02-211-0/+1
| | | | | | | | | | | | | | | | | | | | Summary: libc++abi2.exp should be used whenever `cxxabi.h` defines `_LIBCPPABI_VERSION`. This macro was added to libc++abi in 2012 in r149632. For this reason we should use libc++abi2.exp as default unless otherwise specified. Also when building against an in-tree libc++abi we definitely want to use libc++abi2.exp. I would love to know what OSX was the last to use libc++abi.exp but I can only test on 10.9. Reviewers: danalbert, mclow.lists, EricWF Reviewed By: EricWF Subscribers: meadori, cfe-commits Differential Revision: http://reviews.llvm.org/D7773 llvm-svn: 230119
* Make ABI header not found a warning, not an error.Dan Albert2015-02-101-1/+1
| | | | | | | | | | Since we've added a new header to libc++abi (__cxxabi_config.h), we now have a case where we might not always find all the ABI headers: building libc++ against the system's libc++abi on Darwin. Since this isn't actually a fatal error, degrade it to a warning. llvm-svn: 228720
* Add __cxxabi_config.h to libcxxabi headers.Dan Albert2015-02-051-2/+2
| | | | llvm-svn: 228364
* Fix build regression caused by not defining ABI library macrosEric Fiselier2014-11-151-1/+1
| | | | llvm-svn: 222085
OpenPOWER on IntegriCloud