55 lines · plain
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(CXX "-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_FLAGS25 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(CXX "-static-libstdc++" CXX_LINKER_SUPPORTS_STATIC_STDLIB)40 if(CXX_COMPILER_SUPPORTS_STATIC_STDLIB AND41 CXX_LINKER_SUPPORTS_STATIC_STDLIB)42 append("-static-libstdc++"43 CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS44 CMAKE_MODULE_LINKER_FLAGS)45 else()46 message(WARNING47 "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