blob: fb09c63fa4d1c32c2df4292588c0606178f3879a [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})
Eric Fiselier53deb602014-11-25 21:57:41 +00006elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "SunOS")
7 file(GLOB LIBCXX_SOLARIS_SOURCES ../src/support/solaris/*.c)
8 list(APPEND LIBCXX_SOURCES ${LIBCXX_SOLARIS_SOURCES})
Howard Hinnant3c78ca02011-09-22 19:10:18 +00009endif()
Michael J. Spencerf5799be2010-12-10 19:47:54 +000010
11# Add all the headers to the project for IDEs.
12if (MSVC_IDE OR XCODE)
Howard Hinnantb2f52bb2012-03-19 15:40:23 +000013 file(GLOB_RECURSE LIBCXX_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../include/*)
Howard Hinnant3c78ca02011-09-22 19:10:18 +000014 if(WIN32)
Howard Hinnantb2f52bb2012-03-19 15:40:23 +000015 file( GLOB LIBCXX_WIN32_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../include/support/win32/*.h)
16 list(APPEND LIBCXX_HEADERS ${LIBCXX_WIN32_HEADERS})
Howard Hinnant3c78ca02011-09-22 19:10:18 +000017 endif()
Michael J. Spencerf5799be2010-12-10 19:47:54 +000018 # Force them all into the headers dir on MSVC, otherwise they end up at
19 # project scope because they don't have extensions.
20 if (MSVC_IDE)
Howard Hinnantb2f52bb2012-03-19 15:40:23 +000021 source_group("Header Files" FILES ${LIBCXX_HEADERS})
Michael J. Spencerf5799be2010-12-10 19:47:54 +000022 endif()
23endif()
24
25if (LIBCXX_ENABLE_SHARED)
26 add_library(cxx SHARED
Howard Hinnantb2f52bb2012-03-19 15:40:23 +000027 ${LIBCXX_SOURCES}
28 ${LIBCXX_HEADERS}
Michael J. Spencerf5799be2010-12-10 19:47:54 +000029 )
30else()
31 add_library(cxx STATIC
Howard Hinnantb2f52bb2012-03-19 15:40:23 +000032 ${LIBCXX_SOURCES}
33 ${LIBCXX_HEADERS}
Michael J. Spencerf5799be2010-12-10 19:47:54 +000034 )
35endif()
36
Michael J. Spencerbb8cfd02012-12-31 19:34:21 +000037if (DEFINED LIBCXX_CXX_ABI_DEPS)
David Fanged7987d2014-06-24 20:32:11 +000038 add_dependencies(cxx LIBCXX_CXX_ABI_DEPS)
Michael J. Spencerbb8cfd02012-12-31 19:34:21 +000039endif()
Michael J. Spencer299fc292012-11-30 21:02:29 +000040
Michael J. Spencerf5799be2010-12-10 19:47:54 +000041# Generate library list.
Eric Fiseliera63c1492014-10-19 00:42:41 +000042set(libraries ${LIBCXX_CXX_ABI_LIBRARY})
Michael J. Spencerf5799be2010-12-10 19:47:54 +000043append_if(libraries LIBCXX_HAS_PTHREAD_LIB pthread)
44append_if(libraries LIBCXX_HAS_C_LIB c)
45append_if(libraries LIBCXX_HAS_M_LIB m)
Howard Hinnantcf762002011-05-24 12:54:00 +000046append_if(libraries LIBCXX_HAS_RT_LIB rt)
Michael J. Spencerf5799be2010-12-10 19:47:54 +000047append_if(libraries LIBCXX_HAS_GCC_S_LIB gcc_s)
48
Eric Fiseliera63c1492014-10-19 00:42:41 +000049#if LIBCXX_CXX_ABI_LIBRARY_PATH is defined we want to add it to the search path.
50if (DEFINED LIBCXX_CXX_ABI_LIBRARY_PATH)
51 target_link_libraries(cxx "-L${LIBCXX_CXX_ABI_LIBRARY_PATH}")
52endif()
Michael J. Spencerf5799be2010-12-10 19:47:54 +000053target_link_libraries(cxx ${libraries})
54
55# Setup flags.
Eric Fiselier5aedca92014-11-15 06:26:30 +000056append_if(LIBCXX_COMPILE_FLAGS LIBCXX_HAS_FPIC_FLAG -fPIC)
57append_if(LIBCXX_LINK_FLAGS LIBCXX_HAS_NODEFAULTLIBS_FLAG -nodefaultlibs)
Michael J. Spencerf5799be2010-12-10 19:47:54 +000058
Michael Gottesman05c4b552013-09-02 07:28:03 +000059if ( APPLE )
Eric Fiselierd2852b62015-02-21 02:26:24 +000060 if (NOT DEFINED LIBCXX_LIBCPPABI_VERSION)
61 set(LIBCXX_LIBCPPABI_VERSION "2")
62 endif()
63
Michael Gottesman05c4b552013-09-02 07:28:03 +000064 if ( CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.6" )
Eric Fiselier5aedca92014-11-15 06:26:30 +000065 list(APPEND LIBCXX_COMPILE_FLAGS "-U__STRICT_ANSI__")
66 list(APPEND LIBCXX_LINK_FLAGS
Michael Gottesman05c4b552013-09-02 07:28:03 +000067 "-compatibility_version 1"
Hans Wennborg47148262014-08-12 17:32:07 +000068 "-current_version 1"
Michael Gottesman05c4b552013-09-02 07:28:03 +000069 "-install_name /usr/lib/libc++.1.dylib"
70 "-Wl,-reexport_library,/usr/lib/libc++abi.dylib"
71 "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
72 "/usr/lib/libSystem.B.dylib")
73 else()
74 if ( ${CMAKE_OSX_SYSROOT} )
75 list(FIND ${CMAKE_OSX_ARCHITECTURES} "armv7" OSX_HAS_ARMV7)
76 if (OSX_HAS_ARMV7)
77 set(OSX_RE_EXPORT_LINE
78 "${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib"
79 "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++sjlj-abi.exp")
80 else()
81 set(OSX_RE_EXPORT_LINE
82 "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib")
83 endif()
84 else()
85 set (OSX_RE_EXPORT_LINE "/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp")
86 endif()
87
Eric Fiselier5aedca92014-11-15 06:26:30 +000088 list(APPEND LIBCXX_LINK_FLAGS
Michael Gottesman05c4b552013-09-02 07:28:03 +000089 "-compatibility_version 1"
90 "-install_name /usr/lib/libc++.1.dylib"
91 "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
92 "${OSX_RE_EXPORT_LINE}"
93 "-Wl,-force_symbols_not_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/notweak.exp"
94 "-Wl,-force_symbols_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/weak.exp")
95 endif()
96endif()
97
Eric Fiselier5aedca92014-11-15 06:26:30 +000098string(REPLACE ";" " " LIBCXX_COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}")
99string(REPLACE ";" " " LIBCXX_LINK_FLAGS "${LIBCXX_LINK_FLAGS}")
Michael Gottesman05c4b552013-09-02 07:28:03 +0000100
Michael J. Spencerf5799be2010-12-10 19:47:54 +0000101set_target_properties(cxx
102 PROPERTIES
Eric Fiselier5aedca92014-11-15 06:26:30 +0000103 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
104 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
Michael J. Spencerf5799be2010-12-10 19:47:54 +0000105 OUTPUT_NAME "c++"
106 VERSION "1.0"
107 SOVERSION "1"
108 )
109
110install(TARGETS cxx
Chandler Carruth64be05a2014-12-29 12:15:47 +0000111 LIBRARY DESTINATION lib${LIBCXX_LIBDIR_SUFFIX}
112 ARCHIVE DESTINATION lib${LIBCXX_LIBDIR_SUFFIX}
Michael J. Spencerf5799be2010-12-10 19:47:54 +0000113 )