blob: 02c80d9d4e9eeb696d8707522561b38589825e11 [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 )
60 if ( CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.6" )
Eric Fiselier5aedca92014-11-15 06:26:30 +000061 list(APPEND LIBCXX_COMPILE_FLAGS "-U__STRICT_ANSI__")
62 list(APPEND LIBCXX_LINK_FLAGS
Michael Gottesman05c4b552013-09-02 07:28:03 +000063 "-compatibility_version 1"
Hans Wennborg47148262014-08-12 17:32:07 +000064 "-current_version 1"
Michael Gottesman05c4b552013-09-02 07:28:03 +000065 "-install_name /usr/lib/libc++.1.dylib"
66 "-Wl,-reexport_library,/usr/lib/libc++abi.dylib"
67 "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
68 "/usr/lib/libSystem.B.dylib")
69 else()
70 if ( ${CMAKE_OSX_SYSROOT} )
71 list(FIND ${CMAKE_OSX_ARCHITECTURES} "armv7" OSX_HAS_ARMV7)
72 if (OSX_HAS_ARMV7)
73 set(OSX_RE_EXPORT_LINE
74 "${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib"
75 "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++sjlj-abi.exp")
76 else()
77 set(OSX_RE_EXPORT_LINE
78 "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib")
79 endif()
80 else()
81 set (OSX_RE_EXPORT_LINE "/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp")
82 endif()
83
Eric Fiselier5aedca92014-11-15 06:26:30 +000084 list(APPEND LIBCXX_LINK_FLAGS
Michael Gottesman05c4b552013-09-02 07:28:03 +000085 "-compatibility_version 1"
86 "-install_name /usr/lib/libc++.1.dylib"
87 "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
88 "${OSX_RE_EXPORT_LINE}"
89 "-Wl,-force_symbols_not_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/notweak.exp"
90 "-Wl,-force_symbols_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/weak.exp")
91 endif()
92endif()
93
Eric Fiselier5aedca92014-11-15 06:26:30 +000094string(REPLACE ";" " " LIBCXX_COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}")
95string(REPLACE ";" " " LIBCXX_LINK_FLAGS "${LIBCXX_LINK_FLAGS}")
Michael Gottesman05c4b552013-09-02 07:28:03 +000096
Michael J. Spencerf5799be2010-12-10 19:47:54 +000097set_target_properties(cxx
98 PROPERTIES
Eric Fiselier5aedca92014-11-15 06:26:30 +000099 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
100 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
Michael J. Spencerf5799be2010-12-10 19:47:54 +0000101 OUTPUT_NAME "c++"
102 VERSION "1.0"
103 SOVERSION "1"
104 )
105
106install(TARGETS cxx
Chandler Carruth64be05a2014-12-29 12:15:47 +0000107 LIBRARY DESTINATION lib${LIBCXX_LIBDIR_SUFFIX}
108 ARCHIVE DESTINATION lib${LIBCXX_LIBDIR_SUFFIX}
Michael J. Spencerf5799be2010-12-10 19:47:54 +0000109 )