blob: cd8553c3d36cc8b86bfae4b834a7bdb28835ae3b [file] [log] [blame]
Michael J. Spencerf5799be2010-12-10 19:47:54 +00001# Get sources
Howard Hinnantb2f52bb2012-03-19 15:40:23 +00002file(GLOB LIBCXX_SOURCES ../src/*.cpp)
Howard Hinnant3c78ca02011-09-22 19:10:18 +00003if(WIN32)
Howard Hinnantb2f52bb2012-03-19 15:40:23 +00004 file(GLOB LIBCXX_WIN32_SOURCES ../src/support/win32/*.cpp)
5 list(APPEND LIBCXX_SOURCES ${LIBCXX_WIN32_SOURCES})
Howard Hinnant3c78ca02011-09-22 19:10:18 +00006endif()
Michael J. Spencerf5799be2010-12-10 19:47:54 +00007
8# Add all the headers to the project for IDEs.
9if (MSVC_IDE OR XCODE)
Howard Hinnantb2f52bb2012-03-19 15:40:23 +000010 file(GLOB_RECURSE LIBCXX_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../include/*)
Howard Hinnant3c78ca02011-09-22 19:10:18 +000011 if(WIN32)
Howard Hinnantb2f52bb2012-03-19 15:40:23 +000012 file( GLOB LIBCXX_WIN32_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../include/support/win32/*.h)
13 list(APPEND LIBCXX_HEADERS ${LIBCXX_WIN32_HEADERS})
Howard Hinnant3c78ca02011-09-22 19:10:18 +000014 endif()
Michael J. Spencerf5799be2010-12-10 19:47:54 +000015 # Force them all into the headers dir on MSVC, otherwise they end up at
16 # project scope because they don't have extensions.
17 if (MSVC_IDE)
Howard Hinnantb2f52bb2012-03-19 15:40:23 +000018 source_group("Header Files" FILES ${LIBCXX_HEADERS})
Michael J. Spencerf5799be2010-12-10 19:47:54 +000019 endif()
20endif()
21
22if (LIBCXX_ENABLE_SHARED)
23 add_library(cxx SHARED
Howard Hinnantb2f52bb2012-03-19 15:40:23 +000024 ${LIBCXX_SOURCES}
25 ${LIBCXX_HEADERS}
Michael J. Spencerf5799be2010-12-10 19:47:54 +000026 )
27else()
28 add_library(cxx STATIC
Howard Hinnantb2f52bb2012-03-19 15:40:23 +000029 ${LIBCXX_SOURCES}
30 ${LIBCXX_HEADERS}
Michael J. Spencerf5799be2010-12-10 19:47:54 +000031 )
32endif()
33
Michael J. Spencerbb8cfd02012-12-31 19:34:21 +000034if (DEFINED LIBCXX_CXX_ABI_DEPS)
David Fanged7987d2014-06-24 20:32:11 +000035 add_dependencies(cxx LIBCXX_CXX_ABI_DEPS)
Michael J. Spencerbb8cfd02012-12-31 19:34:21 +000036endif()
Michael J. Spencer299fc292012-11-30 21:02:29 +000037
Michael J. Spencerf5799be2010-12-10 19:47:54 +000038# Generate library list.
Eric Fiseliera63c1492014-10-19 00:42:41 +000039set(libraries ${LIBCXX_CXX_ABI_LIBRARY})
Michael J. Spencerf5799be2010-12-10 19:47:54 +000040append_if(libraries LIBCXX_HAS_PTHREAD_LIB pthread)
41append_if(libraries LIBCXX_HAS_C_LIB c)
42append_if(libraries LIBCXX_HAS_M_LIB m)
Howard Hinnantcf762002011-05-24 12:54:00 +000043append_if(libraries LIBCXX_HAS_RT_LIB rt)
Michael J. Spencerf5799be2010-12-10 19:47:54 +000044append_if(libraries LIBCXX_HAS_GCC_S_LIB gcc_s)
45
Eric Fiseliera63c1492014-10-19 00:42:41 +000046#if LIBCXX_CXX_ABI_LIBRARY_PATH is defined we want to add it to the search path.
47if (DEFINED LIBCXX_CXX_ABI_LIBRARY_PATH)
48 target_link_libraries(cxx "-L${LIBCXX_CXX_ABI_LIBRARY_PATH}")
49endif()
Michael J. Spencerf5799be2010-12-10 19:47:54 +000050target_link_libraries(cxx ${libraries})
51
52# Setup flags.
53append_if(compile_flags LIBCXX_HAS_FPIC_FLAG -fPIC)
54append_if(link_flags LIBCXX_HAS_NODEFAULTLIBS_FLAG -nodefaultlibs)
55
Michael Gottesman05c4b552013-09-02 07:28:03 +000056if ( APPLE )
57 if ( CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.6" )
58 list(APPEND compile_flags "-U__STRICT_ANSI__")
59 list(APPEND link_flags
60 "-compatibility_version 1"
Hans Wennborg47148262014-08-12 17:32:07 +000061 "-current_version 1"
Michael Gottesman05c4b552013-09-02 07:28:03 +000062 "-install_name /usr/lib/libc++.1.dylib"
63 "-Wl,-reexport_library,/usr/lib/libc++abi.dylib"
64 "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
65 "/usr/lib/libSystem.B.dylib")
66 else()
67 if ( ${CMAKE_OSX_SYSROOT} )
68 list(FIND ${CMAKE_OSX_ARCHITECTURES} "armv7" OSX_HAS_ARMV7)
69 if (OSX_HAS_ARMV7)
70 set(OSX_RE_EXPORT_LINE
71 "${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib"
72 "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++sjlj-abi.exp")
73 else()
74 set(OSX_RE_EXPORT_LINE
75 "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib")
76 endif()
77 else()
78 set (OSX_RE_EXPORT_LINE "/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp")
79 endif()
80
81 list(APPEND link_flags
82 "-compatibility_version 1"
83 "-install_name /usr/lib/libc++.1.dylib"
84 "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
85 "${OSX_RE_EXPORT_LINE}"
86 "-Wl,-force_symbols_not_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/notweak.exp"
87 "-Wl,-force_symbols_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/weak.exp")
88 endif()
89endif()
90
Hans Wennborg47148262014-08-12 17:32:07 +000091string(REPLACE ";" " " compile_flags "${compile_flags}")
Michael Gottesman05c4b552013-09-02 07:28:03 +000092string(REPLACE ";" " " link_flags "${link_flags}")
93
Michael J. Spencerf5799be2010-12-10 19:47:54 +000094set_target_properties(cxx
95 PROPERTIES
96 COMPILE_FLAGS "${compile_flags}"
97 LINK_FLAGS "${link_flags}"
98 OUTPUT_NAME "c++"
99 VERSION "1.0"
100 SOVERSION "1"
101 )
102
103install(TARGETS cxx
Dan Albertb9dbbba2014-08-04 16:13:32 +0000104 LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
105 ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
Michael J. Spencerf5799be2010-12-10 19:47:54 +0000106 )