blob: e0f94ca67bd18a0d6a161d5b440dbcc2c1d62fda [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. Spencer299fc292012-11-30 21:02:29 +000034add_dependencies(cxx ${LIBCXX_CXX_ABI_DEPS})
35
Michael J. Spencerf5799be2010-12-10 19:47:54 +000036# Generate library list.
Michael J. Spencer299fc292012-11-30 21:02:29 +000037set(libraries ${LIBCXX_CXX_ABI_LIBRARIES})
Michael J. Spencerf5799be2010-12-10 19:47:54 +000038append_if(libraries LIBCXX_HAS_PTHREAD_LIB pthread)
39append_if(libraries LIBCXX_HAS_C_LIB c)
40append_if(libraries LIBCXX_HAS_M_LIB m)
Howard Hinnantcf762002011-05-24 12:54:00 +000041append_if(libraries LIBCXX_HAS_RT_LIB rt)
Michael J. Spencerf5799be2010-12-10 19:47:54 +000042append_if(libraries LIBCXX_HAS_GCC_S_LIB gcc_s)
43
44target_link_libraries(cxx ${libraries})
45
46# Setup flags.
47append_if(compile_flags LIBCXX_HAS_FPIC_FLAG -fPIC)
48append_if(link_flags LIBCXX_HAS_NODEFAULTLIBS_FLAG -nodefaultlibs)
49
50set_target_properties(cxx
51 PROPERTIES
52 COMPILE_FLAGS "${compile_flags}"
53 LINK_FLAGS "${link_flags}"
54 OUTPUT_NAME "c++"
55 VERSION "1.0"
56 SOVERSION "1"
57 )
58
59install(TARGETS cxx
60 LIBRARY DESTINATION lib
61 ARCHIVE DESTINATION lib
62 )
63
64install(DIRECTORY ../include/
65 DESTINATION include/c++/v1
66 FILES_MATCHING
Howard Hinnant3145a942011-03-03 01:59:23 +000067 PATTERN "*"
Howard Hinnant01533ed2011-03-02 17:29:46 +000068 PATTERN ".svn" EXCLUDE
Michael J. Spencerf5799be2010-12-10 19:47:54 +000069 )