[libcxxabi] [libunwind] [libcxxabi][libunwind] Support for using LLVM libc (PR #101688)
ldionne wrote: Closing as stale, please reopen if you still want to pursue. https://github.com/llvm/llvm-project/pull/101688 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[libcxxabi] [libunwind] [libcxxabi][libunwind] Support for using LLVM libc (PR #101688)
https://github.com/ldionne closed https://github.com/llvm/llvm-project/pull/101688 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[libcxxabi] [libunwind] [libcxxabi][libunwind] Support for using LLVM libc (PR #101688)
ldionne wrote: Gentle ping https://github.com/llvm/llvm-project/pull/101688 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[libcxxabi] [libunwind] [libcxxabi][libunwind] Support for using LLVM libc (PR #101688)
@@ -0,0 +1,39 @@ +#=== ldionne wrote: For now, can't you include `libcxx/cmake/Modules/HandleLibC.cmake` instead? https://github.com/llvm/llvm-project/pull/101688 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[libcxxabi] [libunwind] [libcxxabi][libunwind] Support for using LLVM libc (PR #101688)
ldionne wrote: > @ldionne I'm starting to think that we should have a generic module in > https://github.com/llvm/llvm-project/tree/main/cmake/Modules that would be > controlled by `LLVM_USE_LIBC` and define `libc-headers`, `libc-static` and > `libc-shared`. That way we could avoid duplicating this logic in every > subproject. What do you think? I agree, but I might put it in `runtimes/cmake/Modules` where we already have some stuff. I also wonder if we want to use `LLVM_USE_LIBC` or `RUNTIMES_USE_LIBC` or something else. Historically, `LLVM_FOO` settings are mostly things that we've inherited from `/llvm/CMakeLists.txt` and tried to move away from. https://github.com/llvm/llvm-project/pull/101688 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[libcxxabi] [libunwind] [libcxxabi][libunwind] Support for using LLVM libc (PR #101688)
https://github.com/petrhosek updated
https://github.com/llvm/llvm-project/pull/101688
>From eb619c826eda5a4b0b27db17b43222748b5f2861 Mon Sep 17 00:00:00 2001
From: Petr Hosek
Date: Fri, 2 Aug 2024 08:25:53 -0700
Subject: [PATCH 1/2] [libcxxabi][libunwind] Support for using LLVM libc
This is analogous to #99287 and provides an option to build libc++abi
and libunwind against LLVM libc when selected.
---
libcxxabi/CMakeLists.txt | 8 +
libcxxabi/cmake/Modules/HandleLibC.cmake | 39
libcxxabi/src/CMakeLists.txt | 14 +
libunwind/CMakeLists.txt | 2 ++
libunwind/cmake/Modules/HandleLibC.cmake | 39
libunwind/src/CMakeLists.txt | 14 +
6 files changed, 104 insertions(+), 12 deletions(-)
create mode 100644 libcxxabi/cmake/Modules/HandleLibC.cmake
create mode 100644 libunwind/cmake/Modules/HandleLibC.cmake
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 43400c6e8d9af..66cc776edd416 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -168,6 +168,12 @@ message(STATUS "Using libc++abi testing configuration:
${LIBCXXABI_TEST_CONFIG}"
set(LIBCXXABI_TEST_PARAMS "" CACHE STRING
"A list of parameters to run the Lit test suite with.")
+set(LIBCXXABI_SUPPORTED_C_LIBRARIES system llvm-libc)
+set(LIBCXXABI_LIBC "system" CACHE STRING "Specify C library to use. Supported
values are ${LIBCXXABI_SUPPORTED_C_LIBRARIES}.")
+if (NOT "${LIBCXXABI_LIBC}" IN_LIST LIBCXXABI_SUPPORTED_C_LIBRARIES)
+ message(FATAL_ERROR "Unsupported C library: '${LIBCXXABI_CXX_ABI}'.
Supported values are ${LIBCXXABI_SUPPORTED_C_LIBRARIES}.")
+endif()
+
#===
# Configure System
#===
@@ -249,6 +255,8 @@ add_library_flags("${LIBCXXABI_ADDITIONAL_LIBRARIES}")
# Configure compiler. Must happen after setting the target flags.
include(config-ix)
+include(HandleLibC) # Setup the C library flags
+
if (CXX_SUPPORTS_NOSTDINCXX_FLAG)
list(APPEND LIBCXXABI_COMPILE_FLAGS -nostdinc++)
# cmake 3.14 and above remove system include paths that are explicitly
diff --git a/libcxxabi/cmake/Modules/HandleLibC.cmake
b/libcxxabi/cmake/Modules/HandleLibC.cmake
new file mode 100644
index 0..0dbf5125d0f9e
--- /dev/null
+++ b/libcxxabi/cmake/Modules/HandleLibC.cmake
@@ -0,0 +1,39 @@
+#===
+# Define targets for linking against the selected C library
+#
+# After including this file, the following targets are defined:
+# - libcxxabi-libc-headers: An interface target that allows getting access to
the
+#headers of the selected C library.
+# - libcxxabi-libc-shared: A target representing the selected shared C library.
+# - libcxxabi-libc-static: A target representing the selected static C library.
+#===
+
+# Link against a system-provided libc
+if (LIBCXXABI_LIBC STREQUAL "system")
+ add_library(libcxxabi-libc-headers INTERFACE)
+
+ add_library(libcxxabi-libc-static INTERFACE)
+ add_library(libcxxabi-libc-shared INTERFACE)
+
+# Link against the in-tree LLVM libc
+elseif (LIBCXXABI_LIBC STREQUAL "llvm-libc")
+ add_library(libcxxabi-libc-headers INTERFACE)
+ target_link_libraries(libcxxabi-libc-headers INTERFACE libc-headers)
+ if(CXX_SUPPORTS_NOSTDLIBINC_FLAG)
+target_compile_options(libcxxabi-libc-headers INTERFACE "-nostdlibinc")
+ endif()
+
+ add_library(libcxxabi-libc-static INTERFACE)
+ if (TARGET libc)
+target_link_libraries(libcxxabi-libc-static INTERFACE libc)
+ endif()
+ if (TARGET libm)
+target_link_libraries(libcxxabi-libc-static INTERFACE libm)
+ endif()
+ if (CXX_SUPPORTS_NOLIBC_FLAG)
+target_link_options(libcxxabi-libc-static INTERFACE "-nolibc")
+ endif()
+
+ # TODO: There's no support for building LLVM libc as a shared library yet.
+ add_library(libcxxabi-libc-shared INTERFACE)
+endif()
diff --git a/libcxxabi/src/CMakeLists.txt b/libcxxabi/src/CMakeLists.txt
index c1a7bcb14eb19..1d8596d48615d 100644
--- a/libcxxabi/src/CMakeLists.txt
+++ b/libcxxabi/src/CMakeLists.txt
@@ -166,11 +166,12 @@ if (LIBCXXABI_USE_LLVM_UNWINDER)
target_link_libraries(cxxabi_shared_objects PUBLIC unwind_shared)
endif()
endif()
-target_link_libraries(cxxabi_shared_objects PRIVATE cxx-headers
${LIBCXXABI_LIBRARIES})
+target_link_libraries(cxxabi_shared_objects
+ PUBLIC cxxabi-headers
+ PRIVATE cxx-headers libcxxabi-libc-headers ${LIBCXXABI_LIBRARIES})
if (NOT CXX_SUPPORTS_NOSTDLIBXX_FLAG)
target_link_libraries(cxxabi_shared_objects PRIVATE
${LIBCXXABI_BUILTINS_LIBRARY})
endif()
-target_link_libraries(cxxabi_shared_objects PUBLIC cxxabi-headers)
set_target_properties(cxxabi_shared_objects
PROPERTIES
CXX_EX
[libcxxabi] [libunwind] [libcxxabi][libunwind] Support for using LLVM libc (PR #101688)
petrhosek wrote: @ldionne I'm starting to think that we should have a generic module in https://github.com/llvm/llvm-project/tree/main/cmake/Modules that would be controlled by `LLVM_USE_LIBC` and define `libc-headers`, `libc-static` and `libc-shared`. That way we could avoid duplicating this logic in every subproject. What do you think? https://github.com/llvm/llvm-project/pull/101688 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[libcxxabi] [libunwind] [libcxxabi][libunwind] Support for using LLVM libc (PR #101688)
llvmbot wrote:
@llvm/pr-subscribers-libunwind
Author: Petr Hosek (petrhosek)
Changes
This is analogous to #99287 and provides an option to build libc++abi
and libunwind against LLVM libc when selected.
---
Full diff: https://github.com/llvm/llvm-project/pull/101688.diff
6 Files Affected:
- (modified) libcxxabi/CMakeLists.txt (+8)
- (added) libcxxabi/cmake/Modules/HandleLibC.cmake (+39)
- (modified) libcxxabi/src/CMakeLists.txt (+8-6)
- (modified) libunwind/CMakeLists.txt (+2)
- (added) libunwind/cmake/Modules/HandleLibC.cmake (+39)
- (modified) libunwind/src/CMakeLists.txt (+8-6)
``diff
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 43400c6e8d9af..66cc776edd416 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -168,6 +168,12 @@ message(STATUS "Using libc++abi testing configuration:
${LIBCXXABI_TEST_CONFIG}"
set(LIBCXXABI_TEST_PARAMS "" CACHE STRING
"A list of parameters to run the Lit test suite with.")
+set(LIBCXXABI_SUPPORTED_C_LIBRARIES system llvm-libc)
+set(LIBCXXABI_LIBC "system" CACHE STRING "Specify C library to use. Supported
values are ${LIBCXXABI_SUPPORTED_C_LIBRARIES}.")
+if (NOT "${LIBCXXABI_LIBC}" IN_LIST LIBCXXABI_SUPPORTED_C_LIBRARIES)
+ message(FATAL_ERROR "Unsupported C library: '${LIBCXXABI_CXX_ABI}'.
Supported values are ${LIBCXXABI_SUPPORTED_C_LIBRARIES}.")
+endif()
+
#===
# Configure System
#===
@@ -249,6 +255,8 @@ add_library_flags("${LIBCXXABI_ADDITIONAL_LIBRARIES}")
# Configure compiler. Must happen after setting the target flags.
include(config-ix)
+include(HandleLibC) # Setup the C library flags
+
if (CXX_SUPPORTS_NOSTDINCXX_FLAG)
list(APPEND LIBCXXABI_COMPILE_FLAGS -nostdinc++)
# cmake 3.14 and above remove system include paths that are explicitly
diff --git a/libcxxabi/cmake/Modules/HandleLibC.cmake
b/libcxxabi/cmake/Modules/HandleLibC.cmake
new file mode 100644
index 0..0dbf5125d0f9e
--- /dev/null
+++ b/libcxxabi/cmake/Modules/HandleLibC.cmake
@@ -0,0 +1,39 @@
+#===
+# Define targets for linking against the selected C library
+#
+# After including this file, the following targets are defined:
+# - libcxxabi-libc-headers: An interface target that allows getting access to
the
+#headers of the selected C library.
+# - libcxxabi-libc-shared: A target representing the selected shared C library.
+# - libcxxabi-libc-static: A target representing the selected static C library.
+#===
+
+# Link against a system-provided libc
+if (LIBCXXABI_LIBC STREQUAL "system")
+ add_library(libcxxabi-libc-headers INTERFACE)
+
+ add_library(libcxxabi-libc-static INTERFACE)
+ add_library(libcxxabi-libc-shared INTERFACE)
+
+# Link against the in-tree LLVM libc
+elseif (LIBCXXABI_LIBC STREQUAL "llvm-libc")
+ add_library(libcxxabi-libc-headers INTERFACE)
+ target_link_libraries(libcxxabi-libc-headers INTERFACE libc-headers)
+ if(CXX_SUPPORTS_NOSTDLIBINC_FLAG)
+target_compile_options(libcxxabi-libc-headers INTERFACE "-nostdlibinc")
+ endif()
+
+ add_library(libcxxabi-libc-static INTERFACE)
+ if (TARGET libc)
+target_link_libraries(libcxxabi-libc-static INTERFACE libc)
+ endif()
+ if (TARGET libm)
+target_link_libraries(libcxxabi-libc-static INTERFACE libm)
+ endif()
+ if (CXX_SUPPORTS_NOLIBC_FLAG)
+target_link_options(libcxxabi-libc-static INTERFACE "-nolibc")
+ endif()
+
+ # TODO: There's no support for building LLVM libc as a shared library yet.
+ add_library(libcxxabi-libc-shared INTERFACE)
+endif()
diff --git a/libcxxabi/src/CMakeLists.txt b/libcxxabi/src/CMakeLists.txt
index c1a7bcb14eb19..1d8596d48615d 100644
--- a/libcxxabi/src/CMakeLists.txt
+++ b/libcxxabi/src/CMakeLists.txt
@@ -166,11 +166,12 @@ if (LIBCXXABI_USE_LLVM_UNWINDER)
target_link_libraries(cxxabi_shared_objects PUBLIC unwind_shared)
endif()
endif()
-target_link_libraries(cxxabi_shared_objects PRIVATE cxx-headers
${LIBCXXABI_LIBRARIES})
+target_link_libraries(cxxabi_shared_objects
+ PUBLIC cxxabi-headers
+ PRIVATE cxx-headers libcxxabi-libc-headers ${LIBCXXABI_LIBRARIES})
if (NOT CXX_SUPPORTS_NOSTDLIBXX_FLAG)
target_link_libraries(cxxabi_shared_objects PRIVATE
${LIBCXXABI_BUILTINS_LIBRARY})
endif()
-target_link_libraries(cxxabi_shared_objects PUBLIC cxxabi-headers)
set_target_properties(cxxabi_shared_objects
PROPERTIES
CXX_EXTENSIONS OFF
@@ -205,7 +206,7 @@ if (LIBCXXABI_ENABLE_SHARED)
endif ()
target_link_libraries(cxxabi_shared
-PUBLIC cxxabi_shared_objects
+PUBLIC cxxabi_shared_objects libcxxabi-libc-shared
PRIVATE ${LIBCXXABI_LIBRARIES})
list(APPEND LIBCXXABI_BUILD_TARGETS "cxxabi_shared")
@@ -253,8 +254,9 @@ if
[libcxxabi] [libunwind] [libcxxabi][libunwind] Support for using LLVM libc (PR #101688)
llvmbot wrote:
@llvm/pr-subscribers-libcxxabi
Author: Petr Hosek (petrhosek)
Changes
This is analogous to #99287 and provides an option to build libc++abi
and libunwind against LLVM libc when selected.
---
Full diff: https://github.com/llvm/llvm-project/pull/101688.diff
6 Files Affected:
- (modified) libcxxabi/CMakeLists.txt (+8)
- (added) libcxxabi/cmake/Modules/HandleLibC.cmake (+39)
- (modified) libcxxabi/src/CMakeLists.txt (+8-6)
- (modified) libunwind/CMakeLists.txt (+2)
- (added) libunwind/cmake/Modules/HandleLibC.cmake (+39)
- (modified) libunwind/src/CMakeLists.txt (+8-6)
``diff
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 43400c6e8d9af..66cc776edd416 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -168,6 +168,12 @@ message(STATUS "Using libc++abi testing configuration:
${LIBCXXABI_TEST_CONFIG}"
set(LIBCXXABI_TEST_PARAMS "" CACHE STRING
"A list of parameters to run the Lit test suite with.")
+set(LIBCXXABI_SUPPORTED_C_LIBRARIES system llvm-libc)
+set(LIBCXXABI_LIBC "system" CACHE STRING "Specify C library to use. Supported
values are ${LIBCXXABI_SUPPORTED_C_LIBRARIES}.")
+if (NOT "${LIBCXXABI_LIBC}" IN_LIST LIBCXXABI_SUPPORTED_C_LIBRARIES)
+ message(FATAL_ERROR "Unsupported C library: '${LIBCXXABI_CXX_ABI}'.
Supported values are ${LIBCXXABI_SUPPORTED_C_LIBRARIES}.")
+endif()
+
#===
# Configure System
#===
@@ -249,6 +255,8 @@ add_library_flags("${LIBCXXABI_ADDITIONAL_LIBRARIES}")
# Configure compiler. Must happen after setting the target flags.
include(config-ix)
+include(HandleLibC) # Setup the C library flags
+
if (CXX_SUPPORTS_NOSTDINCXX_FLAG)
list(APPEND LIBCXXABI_COMPILE_FLAGS -nostdinc++)
# cmake 3.14 and above remove system include paths that are explicitly
diff --git a/libcxxabi/cmake/Modules/HandleLibC.cmake
b/libcxxabi/cmake/Modules/HandleLibC.cmake
new file mode 100644
index 0..0dbf5125d0f9e
--- /dev/null
+++ b/libcxxabi/cmake/Modules/HandleLibC.cmake
@@ -0,0 +1,39 @@
+#===
+# Define targets for linking against the selected C library
+#
+# After including this file, the following targets are defined:
+# - libcxxabi-libc-headers: An interface target that allows getting access to
the
+#headers of the selected C library.
+# - libcxxabi-libc-shared: A target representing the selected shared C library.
+# - libcxxabi-libc-static: A target representing the selected static C library.
+#===
+
+# Link against a system-provided libc
+if (LIBCXXABI_LIBC STREQUAL "system")
+ add_library(libcxxabi-libc-headers INTERFACE)
+
+ add_library(libcxxabi-libc-static INTERFACE)
+ add_library(libcxxabi-libc-shared INTERFACE)
+
+# Link against the in-tree LLVM libc
+elseif (LIBCXXABI_LIBC STREQUAL "llvm-libc")
+ add_library(libcxxabi-libc-headers INTERFACE)
+ target_link_libraries(libcxxabi-libc-headers INTERFACE libc-headers)
+ if(CXX_SUPPORTS_NOSTDLIBINC_FLAG)
+target_compile_options(libcxxabi-libc-headers INTERFACE "-nostdlibinc")
+ endif()
+
+ add_library(libcxxabi-libc-static INTERFACE)
+ if (TARGET libc)
+target_link_libraries(libcxxabi-libc-static INTERFACE libc)
+ endif()
+ if (TARGET libm)
+target_link_libraries(libcxxabi-libc-static INTERFACE libm)
+ endif()
+ if (CXX_SUPPORTS_NOLIBC_FLAG)
+target_link_options(libcxxabi-libc-static INTERFACE "-nolibc")
+ endif()
+
+ # TODO: There's no support for building LLVM libc as a shared library yet.
+ add_library(libcxxabi-libc-shared INTERFACE)
+endif()
diff --git a/libcxxabi/src/CMakeLists.txt b/libcxxabi/src/CMakeLists.txt
index c1a7bcb14eb19..1d8596d48615d 100644
--- a/libcxxabi/src/CMakeLists.txt
+++ b/libcxxabi/src/CMakeLists.txt
@@ -166,11 +166,12 @@ if (LIBCXXABI_USE_LLVM_UNWINDER)
target_link_libraries(cxxabi_shared_objects PUBLIC unwind_shared)
endif()
endif()
-target_link_libraries(cxxabi_shared_objects PRIVATE cxx-headers
${LIBCXXABI_LIBRARIES})
+target_link_libraries(cxxabi_shared_objects
+ PUBLIC cxxabi-headers
+ PRIVATE cxx-headers libcxxabi-libc-headers ${LIBCXXABI_LIBRARIES})
if (NOT CXX_SUPPORTS_NOSTDLIBXX_FLAG)
target_link_libraries(cxxabi_shared_objects PRIVATE
${LIBCXXABI_BUILTINS_LIBRARY})
endif()
-target_link_libraries(cxxabi_shared_objects PUBLIC cxxabi-headers)
set_target_properties(cxxabi_shared_objects
PROPERTIES
CXX_EXTENSIONS OFF
@@ -205,7 +206,7 @@ if (LIBCXXABI_ENABLE_SHARED)
endif ()
target_link_libraries(cxxabi_shared
-PUBLIC cxxabi_shared_objects
+PUBLIC cxxabi_shared_objects libcxxabi-libc-shared
PRIVATE ${LIBCXXABI_LIBRARIES})
list(APPEND LIBCXXABI_BUILD_TARGETS "cxxabi_shared")
@@ -253,8 +254,9 @@ if
[libcxxabi] [libunwind] [libcxxabi][libunwind] Support for using LLVM libc (PR #101688)
https://github.com/petrhosek created
https://github.com/llvm/llvm-project/pull/101688
This is analogous to #99287 and provides an option to build libc++abi and
libunwind against LLVM libc when selected.
>From eb619c826eda5a4b0b27db17b43222748b5f2861 Mon Sep 17 00:00:00 2001
From: Petr Hosek
Date: Fri, 2 Aug 2024 08:25:53 -0700
Subject: [PATCH] [libcxxabi][libunwind] Support for using LLVM libc
This is analogous to #99287 and provides an option to build libc++abi
and libunwind against LLVM libc when selected.
---
libcxxabi/CMakeLists.txt | 8 +
libcxxabi/cmake/Modules/HandleLibC.cmake | 39
libcxxabi/src/CMakeLists.txt | 14 +
libunwind/CMakeLists.txt | 2 ++
libunwind/cmake/Modules/HandleLibC.cmake | 39
libunwind/src/CMakeLists.txt | 14 +
6 files changed, 104 insertions(+), 12 deletions(-)
create mode 100644 libcxxabi/cmake/Modules/HandleLibC.cmake
create mode 100644 libunwind/cmake/Modules/HandleLibC.cmake
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 43400c6e8d9af..66cc776edd416 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -168,6 +168,12 @@ message(STATUS "Using libc++abi testing configuration:
${LIBCXXABI_TEST_CONFIG}"
set(LIBCXXABI_TEST_PARAMS "" CACHE STRING
"A list of parameters to run the Lit test suite with.")
+set(LIBCXXABI_SUPPORTED_C_LIBRARIES system llvm-libc)
+set(LIBCXXABI_LIBC "system" CACHE STRING "Specify C library to use. Supported
values are ${LIBCXXABI_SUPPORTED_C_LIBRARIES}.")
+if (NOT "${LIBCXXABI_LIBC}" IN_LIST LIBCXXABI_SUPPORTED_C_LIBRARIES)
+ message(FATAL_ERROR "Unsupported C library: '${LIBCXXABI_CXX_ABI}'.
Supported values are ${LIBCXXABI_SUPPORTED_C_LIBRARIES}.")
+endif()
+
#===
# Configure System
#===
@@ -249,6 +255,8 @@ add_library_flags("${LIBCXXABI_ADDITIONAL_LIBRARIES}")
# Configure compiler. Must happen after setting the target flags.
include(config-ix)
+include(HandleLibC) # Setup the C library flags
+
if (CXX_SUPPORTS_NOSTDINCXX_FLAG)
list(APPEND LIBCXXABI_COMPILE_FLAGS -nostdinc++)
# cmake 3.14 and above remove system include paths that are explicitly
diff --git a/libcxxabi/cmake/Modules/HandleLibC.cmake
b/libcxxabi/cmake/Modules/HandleLibC.cmake
new file mode 100644
index 0..0dbf5125d0f9e
--- /dev/null
+++ b/libcxxabi/cmake/Modules/HandleLibC.cmake
@@ -0,0 +1,39 @@
+#===
+# Define targets for linking against the selected C library
+#
+# After including this file, the following targets are defined:
+# - libcxxabi-libc-headers: An interface target that allows getting access to
the
+#headers of the selected C library.
+# - libcxxabi-libc-shared: A target representing the selected shared C library.
+# - libcxxabi-libc-static: A target representing the selected static C library.
+#===
+
+# Link against a system-provided libc
+if (LIBCXXABI_LIBC STREQUAL "system")
+ add_library(libcxxabi-libc-headers INTERFACE)
+
+ add_library(libcxxabi-libc-static INTERFACE)
+ add_library(libcxxabi-libc-shared INTERFACE)
+
+# Link against the in-tree LLVM libc
+elseif (LIBCXXABI_LIBC STREQUAL "llvm-libc")
+ add_library(libcxxabi-libc-headers INTERFACE)
+ target_link_libraries(libcxxabi-libc-headers INTERFACE libc-headers)
+ if(CXX_SUPPORTS_NOSTDLIBINC_FLAG)
+target_compile_options(libcxxabi-libc-headers INTERFACE "-nostdlibinc")
+ endif()
+
+ add_library(libcxxabi-libc-static INTERFACE)
+ if (TARGET libc)
+target_link_libraries(libcxxabi-libc-static INTERFACE libc)
+ endif()
+ if (TARGET libm)
+target_link_libraries(libcxxabi-libc-static INTERFACE libm)
+ endif()
+ if (CXX_SUPPORTS_NOLIBC_FLAG)
+target_link_options(libcxxabi-libc-static INTERFACE "-nolibc")
+ endif()
+
+ # TODO: There's no support for building LLVM libc as a shared library yet.
+ add_library(libcxxabi-libc-shared INTERFACE)
+endif()
diff --git a/libcxxabi/src/CMakeLists.txt b/libcxxabi/src/CMakeLists.txt
index c1a7bcb14eb19..1d8596d48615d 100644
--- a/libcxxabi/src/CMakeLists.txt
+++ b/libcxxabi/src/CMakeLists.txt
@@ -166,11 +166,12 @@ if (LIBCXXABI_USE_LLVM_UNWINDER)
target_link_libraries(cxxabi_shared_objects PUBLIC unwind_shared)
endif()
endif()
-target_link_libraries(cxxabi_shared_objects PRIVATE cxx-headers
${LIBCXXABI_LIBRARIES})
+target_link_libraries(cxxabi_shared_objects
+ PUBLIC cxxabi-headers
+ PRIVATE cxx-headers libcxxabi-libc-headers ${LIBCXXABI_LIBRARIES})
if (NOT CXX_SUPPORTS_NOSTDLIBXX_FLAG)
target_link_libraries(cxxabi_shared_objects PRIVATE
${LIBCXXABI_BUILTINS_LIBRARY})
endif()
-target_link_libraries(
