66ad078fb66eea495ac64a387f201dc36b535eee
[oota-llvm.git] / cmake / modules / HandleLLVMStdlib.cmake
1 # This CMake module is responsible for setting the standard library to libc++
2 # if the user has requested it.
3
4 if(NOT DEFINED LLVM_STDLIB_HANDLED)
5   set(LLVM_STDLIB_HANDLED ON)
6
7   if(CMAKE_COMPILER_IS_GNUCXX)
8     set(LLVM_COMPILER_IS_GCC_COMPATIBLE ON)
9   elseif( MSVC )
10     set(LLVM_COMPILER_IS_GCC_COMPATIBLE OFF)
11   elseif( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
12     set(LLVM_COMPILER_IS_GCC_COMPATIBLE ON)
13   endif()
14
15   function(append value)
16     foreach(variable ${ARGN})
17       set(${variable} "${${variable}} ${value}" PARENT_SCOPE)
18     endforeach(variable)
19   endfunction()
20
21   include(CheckCXXCompilerFlag)
22   if(LLVM_ENABLE_LIBCXX)
23     if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
24       check_cxx_compiler_flag("-stdlib=libc++" CXX_SUPPORTS_STDLIB)
25       if(CXX_SUPPORTS_STDLIB)
26         append("-stdlib=libc++"
27           CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS
28           CMAKE_MODULE_LINKER_FLAGS)
29         if(LLVM_ENABLE_LIBCXXABI)
30           append("-lc++abi"
31             CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS
32             CMAKE_MODULE_LINKER_FLAGS)
33         endif()
34       else()
35         message(WARNING "Can't specify libc++ with '-stdlib='")
36       endif()
37     else()
38       message(WARNING "Not sure how to specify libc++ for this compiler")
39     endif()
40   endif()
41 endif()