Home | History | Annotate | Download | only in lib
      1 set(LIBCXX_LIB_CMAKEFILES_DIR "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}"  PARENT_SCOPE)
      2 
      3 # Get sources
      4 file(GLOB LIBCXX_SOURCES ../src/*.cpp)
      5 if(WIN32)
      6   file(GLOB LIBCXX_WIN32_SOURCES ../src/support/win32/*.cpp)
      7   list(APPEND LIBCXX_SOURCES ${LIBCXX_WIN32_SOURCES})
      8 elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "SunOS")
      9   file(GLOB LIBCXX_SOLARIS_SOURCES ../src/support/solaris/*.c)
     10   list(APPEND LIBCXX_SOURCES ${LIBCXX_SOLARIS_SOURCES})
     11 endif()
     12 
     13 # Add all the headers to the project for IDEs.
     14 if (MSVC_IDE OR XCODE)
     15   file(GLOB_RECURSE LIBCXX_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../include/*)
     16   if(WIN32)
     17     file( GLOB LIBCXX_WIN32_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../include/support/win32/*.h)
     18     list(APPEND LIBCXX_HEADERS ${LIBCXX_WIN32_HEADERS})
     19   endif()
     20   # Force them all into the headers dir on MSVC, otherwise they end up at
     21   # project scope because they don't have extensions.
     22   if (MSVC_IDE)
     23     source_group("Header Files" FILES ${LIBCXX_HEADERS})
     24   endif()
     25 endif()
     26 
     27 if (LIBCXX_ENABLE_SHARED)
     28   add_library(cxx SHARED ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
     29 else()
     30   add_library(cxx STATIC ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
     31 endif()
     32 
     33 if (DEFINED LIBCXX_CXX_ABI_DEPS)
     34   add_dependencies(cxx LIBCXX_CXX_ABI_DEPS)
     35 endif()
     36 
     37 #if LIBCXX_CXX_ABI_LIBRARY_PATH is defined we want to add it to the search path.
     38 add_link_flags_if(LIBCXX_CXX_ABI_LIBRARY_PATH "-L${LIBCXX_CXX_ABI_LIBRARY_PATH}")
     39 
     40 add_library_flags_if(LIBCXX_COVERAGE_LIBRARY "${LIBCXX_COVERAGE_LIBRARY}")
     41 
     42 add_library_flags_if(LIBCXX_ENABLE_STATIC_ABI_LIBRARY "-Wl,--whole-archive" "-Wl,-Bstatic")
     43 add_library_flags("${LIBCXX_CXX_ABI_LIBRARY}")
     44 add_library_flags_if(LIBCXX_ENABLE_STATIC_ABI_LIBRARY "-Wl,-Bdynamic" "-Wl,--no-whole-archive")
     45 
     46 if (APPLE AND LLVM_USE_SANITIZER)
     47   if ("${LLVM_USE_SANITIZER}" STREQUAL "Address")
     48     set(LIBFILE "libclang_rt.asan_osx_dynamic.dylib")
     49   elseif("${LLVM_USE_SANITIZER}" STREQUAL "Undefined")
     50     set(LIBFILE "libclang_rt.ubsan_osx_dynamic.dylib")
     51   else()
     52     message(WARNING "LLVM_USE_SANITIZER=${LLVM_USE_SANITIZER} is not supported on OS X")
     53   endif()
     54   if (LIBFILE)
     55     execute_process(COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=lib OUTPUT_VARIABLE LIBDIR RESULT_VARIABLE Result)
     56     if (NOT ${Result} EQUAL "0")
     57       message(FATAL "Failed to find library resource directory")
     58     endif()
     59     string(STRIP "${LIBDIR}" LIBDIR)
     60     set(LIBDIR "${LIBDIR}/darwin/")
     61     if (NOT IS_DIRECTORY "${LIBDIR}")
     62       message(FATAL_ERROR "Cannot find compiler-rt directory on OS X required for LLVM_USE_SANITIZER")
     63     endif()
     64     set(LIBCXX_SANITIZER_LIBRARY "${LIBDIR}/${LIBFILE}")
     65     set(LIBCXX_SANITIZER_LIBRARY "${LIBCXX_SANITIZER_LIBRARY}" PARENT_SCOPE)
     66     message(STATUS "Manually linking compiler-rt library: ${LIBCXX_SANITIZER_LIBRARY}")
     67     add_library_flags("${LIBCXX_SANITIZER_LIBRARY}")
     68     add_link_flags("-Wl,-rpath,${LIBDIR}")
     69   endif()
     70 endif()
     71 
     72 # Generate library list.
     73 add_library_flags_if(LIBCXX_HAS_PTHREAD_LIB pthread)
     74 add_library_flags_if(LIBCXX_HAS_C_LIB c)
     75 add_library_flags_if(LIBCXX_HAS_M_LIB m)
     76 add_library_flags_if(LIBCXX_HAS_RT_LIB rt)
     77 add_library_flags_if(LIBCXX_HAS_GCC_S_LIB gcc_s)
     78 
     79 # Setup flags.
     80 add_flags_if_supported(-fPIC)
     81 add_link_flags_if_supported(-nodefaultlibs)
     82 
     83 if ( APPLE AND (LIBCXX_CXX_ABI_LIBNAME STREQUAL "libcxxabi" OR
     84                 LIBCXX_CXX_ABI_LIBNAME STREQUAL "none"))
     85   if (NOT DEFINED LIBCXX_LIBCPPABI_VERSION)
     86     set(LIBCXX_LIBCPPABI_VERSION "2")
     87   endif()
     88 
     89   if ( CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.6" )
     90     add_definitions(-D__STRICT_ANSI__)
     91     add_link_flags(
     92       "-compatibility_version 1"
     93       "-current_version 1"
     94       "-install_name /usr/lib/libc++.1.dylib"
     95       "-Wl,-reexport_library,/usr/lib/libc++abi.dylib"
     96       "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
     97       "/usr/lib/libSystem.B.dylib")
     98   else()
     99     if ( ${CMAKE_OSX_SYSROOT} )
    100       list(FIND ${CMAKE_OSX_ARCHITECTURES} "armv7" OSX_HAS_ARMV7)
    101       if (OSX_HAS_ARMV7)
    102         set(OSX_RE_EXPORT_LINE
    103           "${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib"
    104           "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++sjlj-abi.exp")
    105       else()
    106         set(OSX_RE_EXPORT_LINE
    107           "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib")
    108       endif()
    109     else()
    110       set (OSX_RE_EXPORT_LINE "/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp")
    111     endif()
    112 
    113     add_link_flags(
    114       "-compatibility_version 1"
    115       "-install_name /usr/lib/libc++.1.dylib"
    116       "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
    117       "${OSX_RE_EXPORT_LINE}"
    118       "-Wl,-force_symbols_not_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/notweak.exp"
    119       "-Wl,-force_symbols_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/weak.exp")
    120   endif()
    121 endif()
    122 
    123 target_link_libraries(cxx ${LIBCXX_LIBRARIES})
    124 split_list(LIBCXX_COMPILE_FLAGS)
    125 split_list(LIBCXX_LINK_FLAGS)
    126 
    127 set_target_properties(cxx
    128   PROPERTIES
    129     COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
    130     LINK_FLAGS    "${LIBCXX_LINK_FLAGS}"
    131     OUTPUT_NAME   "c++"
    132     VERSION       "1.0"
    133     SOVERSION     "1"
    134   )
    135 
    136 install(TARGETS cxx
    137   LIBRARY DESTINATION lib${LIBCXX_LIBDIR_SUFFIX}
    138   ARCHIVE DESTINATION lib${LIBCXX_LIBDIR_SUFFIX}
    139   )
    140