blob: fb09c63fa4d1c32c2df4292588c0606178f3879a [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
Michael J. Spencerdb8a0302012-12-31 19:34:21 +000037if (DEFINED LIBCXX_CXX_ABI_DEPS)
David Fang44ead612014-06-24 20:32:11 +000038 add_dependencies(cxx LIBCXX_CXX_ABI_DEPS)
Michael J. Spencerdb8a0302012-12-31 19:34:21 +000039endif()
Michael J. Spencera358fbe2012-11-30 21:02:29 +000040
Michael J. Spencer626916f2010-12-10 19:47:54 +000041# Generate library list.
Eric Fiseliercb7e32c2014-10-19 00:42:41 +000042set(libraries ${LIBCXX_CXX_ABI_LIBRARY})
Michael J. Spencer626916f2010-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 Hinnant20542c02011-05-24 12:54:00 +000046append_if(libraries LIBCXX_HAS_RT_LIB rt)
Michael J. Spencer626916f2010-12-10 19:47:54 +000047append_if(libraries LIBCXX_HAS_GCC_S_LIB gcc_s)
48
Eric Fiseliercb7e32c2014-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. Spencer626916f2010-12-10 19:47:54 +000053target_link_libraries(cxx ${libraries})
54
55# Setup flags.
Eric Fiselier8e2855c2014-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. Spencer626916f2010-12-10 19:47:54 +000058
Michael Gottesman8a1fc892013-09-02 07:28:03 +000059if ( APPLE )
Eric Fiselier45969ec2015-02-21 02:26:24 +000060 if (NOT DEFINED LIBCXX_LIBCPPABI_VERSION)
61 set(LIBCXX_LIBCPPABI_VERSION "2")
62 endif()
63
Michael Gottesman8a1fc892013-09-02 07:28:03 +000064 if ( CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.6" )
Eric Fiselier8e2855c2014-11-15 06:26:30 +000065 list(APPEND LIBCXX_COMPILE_FLAGS "-U__STRICT_ANSI__")
66 list(APPEND LIBCXX_LINK_FLAGS
Michael Gottesman8a1fc892013-09-02 07:28:03 +000067 "-compatibility_version 1"
Hans Wennborgf3b5f0e2014-08-12 17:32:07 +000068 "-current_version 1"
Michael Gottesman8a1fc892013-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 Fiselier8e2855c2014-11-15 06:26:30 +000088 list(APPEND LIBCXX_LINK_FLAGS
Michael Gottesman8a1fc892013-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 Fiselier8e2855c2014-11-15 06:26:30 +000098string(REPLACE ";" " " LIBCXX_COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}")
99string(REPLACE ";" " " LIBCXX_LINK_FLAGS "${LIBCXX_LINK_FLAGS}")
Michael Gottesman8a1fc892013-09-02 07:28:03 +0000100
Michael J. Spencer626916f2010-12-10 19:47:54 +0000101set_target_properties(cxx
102 PROPERTIES
Eric Fiselier8e2855c2014-11-15 06:26:30 +0000103 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
104 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
Michael J. Spencer626916f2010-12-10 19:47:54 +0000105 OUTPUT_NAME "c++"
106 VERSION "1.0"
107 SOVERSION "1"
108 )
109
110install(TARGETS cxx
Chandler Carruth7a033ca2014-12-29 12:15:47 +0000111 LIBRARY DESTINATION lib${LIBCXX_LIBDIR_SUFFIX}
112 ARCHIVE DESTINATION lib${LIBCXX_LIBDIR_SUFFIX}
Michael J. Spencer626916f2010-12-10 19:47:54 +0000113 )