blob: d50b2cc0fd7d7e6bb471602bed3f4824e8cc96aa [file] [log] [blame]
Michael J. Spencer626916f2010-12-10 19:47:54 +00001# Get sources
Howard Hinnant87c61a62012-03-19 15:40:23 +00002file(GLOB LIBCXX_SOURCES ../src/*.cpp)
Howard Hinnant92a07002011-09-22 19:10:18 +00003if(WIN32)
Howard Hinnant87c61a62012-03-19 15:40:23 +00004 file(GLOB LIBCXX_WIN32_SOURCES ../src/support/win32/*.cpp)
5 list(APPEND LIBCXX_SOURCES ${LIBCXX_WIN32_SOURCES})
Eric Fiselier6cb69ff2014-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 Hinnant92a07002011-09-22 19:10:18 +00009endif()
Michael J. Spencer626916f2010-12-10 19:47:54 +000010
11# Add all the headers to the project for IDEs.
12if (MSVC_IDE OR XCODE)
Howard Hinnant87c61a62012-03-19 15:40:23 +000013 file(GLOB_RECURSE LIBCXX_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../include/*)
Howard Hinnant92a07002011-09-22 19:10:18 +000014 if(WIN32)
Howard Hinnant87c61a62012-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 Hinnant92a07002011-09-22 19:10:18 +000017 endif()
Michael J. Spencer626916f2010-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 Hinnant87c61a62012-03-19 15:40:23 +000021 source_group("Header Files" FILES ${LIBCXX_HEADERS})
Michael J. Spencer626916f2010-12-10 19:47:54 +000022 endif()
23endif()
24
25if (LIBCXX_ENABLE_SHARED)
26 add_library(cxx SHARED
Howard Hinnant87c61a62012-03-19 15:40:23 +000027 ${LIBCXX_SOURCES}
28 ${LIBCXX_HEADERS}
Michael J. Spencer626916f2010-12-10 19:47:54 +000029 )
30else()
31 add_library(cxx STATIC
Howard Hinnant87c61a62012-03-19 15:40:23 +000032 ${LIBCXX_SOURCES}
33 ${LIBCXX_HEADERS}
Michael J. Spencer626916f2010-12-10 19:47:54 +000034 )
35endif()
36
Eric Fiselierc0b166e2015-03-03 15:59:51 +000037#if LIBCXX_CXX_ABI_LIBRARY_PATH is defined we want to add it to the search path.
38if (DEFINED LIBCXX_CXX_ABI_LIBRARY_PATH)
39 target_link_libraries(cxx "-L${LIBCXX_CXX_ABI_LIBRARY_PATH}")
40endif()
41
Michael J. Spencerdb8a0302012-12-31 19:34:21 +000042if (DEFINED LIBCXX_CXX_ABI_DEPS)
David Fang44ead612014-06-24 20:32:11 +000043 add_dependencies(cxx LIBCXX_CXX_ABI_DEPS)
Michael J. Spencerdb8a0302012-12-31 19:34:21 +000044endif()
Michael J. Spencera358fbe2012-11-30 21:02:29 +000045
Eric Fiselierc0b166e2015-03-03 15:59:51 +000046set(libraries "")
47if (LIBCXX_ENABLE_STATIC_ABI_LIBRARY)
48 # TODO(ericwf): Remove these GNU specific linker flags and let CMake do the
49 # configuration. This will be more portable.
50 list(APPEND libraries "-Wl,--whole-archive" "-Wl,-Bstatic")
51 list(APPEND libraries "${LIBCXX_CXX_ABI_LIBRARY}")
52 list(APPEND libraries "-Wl,-Bdynamic" "-Wl,--no-whole-archive")
53else()
54 list(APPEND libraries "${LIBCXX_CXX_ABI_LIBRARY}")
55endif()
56
Michael J. Spencer626916f2010-12-10 19:47:54 +000057# Generate library list.
58append_if(libraries LIBCXX_HAS_PTHREAD_LIB pthread)
59append_if(libraries LIBCXX_HAS_C_LIB c)
60append_if(libraries LIBCXX_HAS_M_LIB m)
Howard Hinnant20542c02011-05-24 12:54:00 +000061append_if(libraries LIBCXX_HAS_RT_LIB rt)
Michael J. Spencer626916f2010-12-10 19:47:54 +000062append_if(libraries LIBCXX_HAS_GCC_S_LIB gcc_s)
63
64target_link_libraries(cxx ${libraries})
65
66# Setup flags.
Eric Fiselier8e2855c2014-11-15 06:26:30 +000067append_if(LIBCXX_COMPILE_FLAGS LIBCXX_HAS_FPIC_FLAG -fPIC)
68append_if(LIBCXX_LINK_FLAGS LIBCXX_HAS_NODEFAULTLIBS_FLAG -nodefaultlibs)
Michael J. Spencer626916f2010-12-10 19:47:54 +000069
Michael Gottesman8a1fc892013-09-02 07:28:03 +000070if ( APPLE )
Eric Fiselier45969ec2015-02-21 02:26:24 +000071 if (NOT DEFINED LIBCXX_LIBCPPABI_VERSION)
72 set(LIBCXX_LIBCPPABI_VERSION "2")
73 endif()
74
Michael Gottesman8a1fc892013-09-02 07:28:03 +000075 if ( CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.6" )
Eric Fiselier8e2855c2014-11-15 06:26:30 +000076 list(APPEND LIBCXX_COMPILE_FLAGS "-U__STRICT_ANSI__")
77 list(APPEND LIBCXX_LINK_FLAGS
Michael Gottesman8a1fc892013-09-02 07:28:03 +000078 "-compatibility_version 1"
Hans Wennborgf3b5f0e2014-08-12 17:32:07 +000079 "-current_version 1"
Michael Gottesman8a1fc892013-09-02 07:28:03 +000080 "-install_name /usr/lib/libc++.1.dylib"
81 "-Wl,-reexport_library,/usr/lib/libc++abi.dylib"
82 "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
83 "/usr/lib/libSystem.B.dylib")
84 else()
85 if ( ${CMAKE_OSX_SYSROOT} )
86 list(FIND ${CMAKE_OSX_ARCHITECTURES} "armv7" OSX_HAS_ARMV7)
87 if (OSX_HAS_ARMV7)
88 set(OSX_RE_EXPORT_LINE
89 "${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib"
90 "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++sjlj-abi.exp")
91 else()
92 set(OSX_RE_EXPORT_LINE
93 "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib")
94 endif()
95 else()
96 set (OSX_RE_EXPORT_LINE "/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp")
97 endif()
98
Eric Fiselier8e2855c2014-11-15 06:26:30 +000099 list(APPEND LIBCXX_LINK_FLAGS
Michael Gottesman8a1fc892013-09-02 07:28:03 +0000100 "-compatibility_version 1"
101 "-install_name /usr/lib/libc++.1.dylib"
102 "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
103 "${OSX_RE_EXPORT_LINE}"
104 "-Wl,-force_symbols_not_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/notweak.exp"
105 "-Wl,-force_symbols_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/weak.exp")
106 endif()
107endif()
108
Eric Fiselier8e2855c2014-11-15 06:26:30 +0000109string(REPLACE ";" " " LIBCXX_COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}")
110string(REPLACE ";" " " LIBCXX_LINK_FLAGS "${LIBCXX_LINK_FLAGS}")
Michael Gottesman8a1fc892013-09-02 07:28:03 +0000111
Michael J. Spencer626916f2010-12-10 19:47:54 +0000112set_target_properties(cxx
113 PROPERTIES
Eric Fiselier8e2855c2014-11-15 06:26:30 +0000114 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
115 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
Michael J. Spencer626916f2010-12-10 19:47:54 +0000116 OUTPUT_NAME "c++"
117 VERSION "1.0"
118 SOVERSION "1"
119 )
120
121install(TARGETS cxx
Chandler Carruth7a033ca2014-12-29 12:15:47 +0000122 LIBRARY DESTINATION lib${LIBCXX_LIBDIR_SUFFIX}
123 ARCHIVE DESTINATION lib${LIBCXX_LIBDIR_SUFFIX}
Michael J. Spencer626916f2010-12-10 19:47:54 +0000124 )