| #=============================================================================== |
| # Define targets for linking against the selected C library |
| # |
| # After including this file, the following targets are defined: |
| # - runtimes-libc-headers: An interface target that allows getting access to the |
| # headers of the selected C library. |
| # - runtimes-libc-shared: A target representing the selected shared C library. |
| # - runtimes-libc-static: A target representing the selected static C library. |
| #=============================================================================== |
| |
| include_guard(GLOBAL) |
| |
| set(RUNTIMES_SUPPORTED_C_LIBRARIES system llvm-libc) |
| set(RUNTIMES_USE_LIBC "system" CACHE STRING "Specify C library to use. Supported values are ${RUNTIMES_SUPPORTED_C_LIBRARIES}.") |
| if (NOT "${RUNTIMES_USE_LIBC}" IN_LIST RUNTIMES_SUPPORTED_C_LIBRARIES) |
| message(FATAL_ERROR "Unsupported C library: '${RUNTIMES_CXX_ABI}'. Supported values are ${RUNTIMES_SUPPORTED_C_LIBRARIES}.") |
| endif() |
| |
| # Link against a system-provided libc |
| if (RUNTIMES_USE_LIBC STREQUAL "system") |
| add_library(runtimes-libc-headers INTERFACE) |
| |
| add_library(runtimes-libc-static INTERFACE) |
| add_library(runtimes-libc-shared INTERFACE) |
| |
| # Link against the in-tree LLVM libc |
| elseif (RUNTIMES_USE_LIBC STREQUAL "llvm-libc") |
| add_library(runtimes-libc-headers INTERFACE) |
| target_link_libraries(runtimes-libc-headers INTERFACE libc-headers) |
| check_cxx_compiler_flag(-nostdlibinc CXX_SUPPORTS_NOSTDLIBINC_FLAG) |
| if(CXX_SUPPORTS_NOSTDLIBINC_FLAG) |
| target_compile_options(runtimes-libc-headers INTERFACE "-nostdlibinc") |
| endif() |
| |
| add_library(runtimes-libc-static INTERFACE) |
| if (TARGET libc) |
| target_link_libraries(runtimes-libc-static INTERFACE libc) |
| endif() |
| if (TARGET libm) |
| target_link_libraries(runtimes-libc-static INTERFACE libm) |
| endif() |
| if (CXX_SUPPORTS_NOLIBC_FLAG) |
| target_link_options(runtimes-libc-static INTERFACE "-nolibc") |
| endif() |
| |
| # TODO: There's no support for building LLVM libc as a shared library yet. |
| add_library(runtimes-libc-shared INTERFACE) |
| endif() |