• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# This CMake module is responsible for setting the standard library to libc++
2# if the user has requested it.
3
4include(DetermineGCCCompatible)
5
6if(NOT DEFINED LLVM_STDLIB_HANDLED)
7  set(LLVM_STDLIB_HANDLED ON)
8
9  function(append value)
10    foreach(variable ${ARGN})
11      set(${variable} "${${variable}} ${value}" PARENT_SCOPE)
12    endforeach(variable)
13  endfunction()
14
15  include(CheckCXXCompilerFlag)
16  include(CheckLinkerFlag)
17  set(LLVM_LIBCXX_USED 0)
18  if(LLVM_ENABLE_LIBCXX)
19    if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
20      check_cxx_compiler_flag("-stdlib=libc++" CXX_COMPILER_SUPPORTS_STDLIB)
21      check_linker_flag("-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB)
22      if(CXX_COMPILER_SUPPORTS_STDLIB AND CXX_LINKER_SUPPORTS_STDLIB)
23        append("-stdlib=libc++"
24          CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS
25          CMAKE_MODULE_LINKER_FLAGS)
26        set(LLVM_LIBCXX_USED 1)
27      else()
28        message(WARNING "Can't specify libc++ with '-stdlib='")
29      endif()
30    else()
31      message(WARNING "Not sure how to specify libc++ for this compiler")
32    endif()
33  endif()
34
35  if(LLVM_STATIC_LINK_CXX_STDLIB)
36    if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
37      check_cxx_compiler_flag("-static-libstdc++"
38                              CXX_COMPILER_SUPPORTS_STATIC_STDLIB)
39      check_linker_flag("-static-libstdc++" CXX_LINKER_SUPPORTS_STATIC_STDLIB)
40      if(CXX_COMPILER_SUPPORTS_STATIC_STDLIB AND
41        CXX_LINKER_SUPPORTS_STATIC_STDLIB)
42        append("-static-libstdc++"
43          CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS
44          CMAKE_MODULE_LINKER_FLAGS)
45      else()
46        message(WARNING
47          "Can't specify static linking for the C++ standard library")
48      endif()
49    else()
50      message(WARNING "Not sure how to specify static linking of C++ standard "
51        "library for this compiler")
52    endif()
53  endif()
54endif()
55