blob: 0c78523f9657956470c34bbfcbe5831d77b8c810 [file] [log] [blame]
Saleem Abdulrasool675df582015-04-24 19:39:17 +00001# Get sources
2
3set(LIBUNWIND_CXX_SOURCES
4 libunwind.cpp
5 Unwind-EHABI.cpp)
6append_if(LIBUNWIND_CXX_SOURCES APPLE Unwind_AppleExtras.cpp)
7
8set(LIBUNWIND_C_SOURCES
9 UnwindLevel1.c
10 UnwindLevel1-gcc-ext.c
11 Unwind-sjlj.c)
12set_source_files_properties(${LIBUNWIND_C_SOURCES}
13 PROPERTIES
14 COMPILE_FLAGS "-std=c99")
15
16set(LIBUNWIND_ASM_SOURCES
17 UnwindRegistersRestore.S
18 UnwindRegistersSave.S)
19set_source_files_properties(${LIBUNWIND_ASM_SOURCES}
20 PROPERTIES
21 LANGUAGE C)
22
23set(LIBUNWIND_HEADERS
Saleem Abdulrasoola3923ac2015-04-25 01:46:35 +000024 AddressSpace.hpp
25 assembly.h
26 CompactUnwinder.hpp
27 config.h
28 dwarf2.h
29 DwarfInstructions.hpp
30 DwarfParser.hpp
31 libunwind_ext.h
32 Registers.hpp
33 UnwindCursor.hpp
34 unwind_ext.h
35 ${CMAKE_CURRENT_SOURCE_DIR}/../include/libunwind.h
36 ${CMAKE_CURRENT_SOURCE_DIR}/../include/unwind.h)
Saleem Abdulrasool675df582015-04-24 19:39:17 +000037
Saleem Abdulrasoola3923ac2015-04-25 01:46:35 +000038append_if(LIBUNWIND_HEADERS APPLE
Saleem Abdulrasool675df582015-04-24 19:39:17 +000039 "${CMAKE_CURRENT_SOURCE_DIR}/../include/mach-o/compact_unwind_encoding.h")
40
41if (MSVC_IDE)
42 # Force them all into the headers dir on MSVC, otherwise they end up at
43 # project scope because they don't have extensions.
44 source_group("Header Files" FILES ${LIBUNWIND_HEADERS})
45endif()
46
47set(LIBUNWIND_SOURCES
48 ${LIBUNWIND_CXX_SOURCES}
49 ${LIBUNWIND_C_SOURCES}
50 ${LIBUNWIND_ASM_SOURCES})
51
Saleem Abdulrasool675df582015-04-24 19:39:17 +000052# Generate library list.
Saleem Abdulrasoola3923ac2015-04-25 01:46:35 +000053set(libraries ${LIBUNWINDCXX_ABI_LIBRARIES})
54append_if(libraries LIBUNWIND_HAS_C_LIB c)
55append_if(libraries LIBUNWIND_HAS_DL_LIB dl)
Asiri Rathnayake9feea202016-09-28 10:57:15 +000056if (LIBUNWIND_ENABLE_THREADS)
57 append_if(libraries LIBUNWIND_HAS_PTHREAD_LIB pthread)
58endif()
Saleem Abdulrasool675df582015-04-24 19:39:17 +000059
Saleem Abdulrasool675df582015-04-24 19:39:17 +000060# Setup flags.
Saleem Abdulrasoola3923ac2015-04-25 01:46:35 +000061append_if(LIBUNWIND_COMPILE_FLAGS LIBUNWIND_HAS_FPIC_FLAG -fPIC)
Saleem Abdulrasoole1850812015-04-25 02:06:15 +000062append_if(LIBUNWIND_CXX_FLAGS LIBUNWIND_HAS_NO_RTTI_FLAG -fno-rtti)
Saleem Abdulrasool675df582015-04-24 19:39:17 +000063
Saleem Abdulrasoola3923ac2015-04-25 01:46:35 +000064append_if(LIBUNWIND_LINK_FLAGS LIBUNWIND_HAS_NODEFAULTLIBS_FLAG -nodefaultlibs)
65
66if (LIBUNWIND_HAS_NO_EXCEPTIONS_FLAG AND LIBUNWIND_HAS_FUNWIND_TABLES)
Saleem Abdulrasool675df582015-04-24 19:39:17 +000067 list(APPEND LIBUNWIND_COMPILE_FLAGS -fno-exceptions)
68 list(APPEND LIBUNWIND_COMPILE_FLAGS -funwind-tables)
Saleem Abdulrasoola3923ac2015-04-25 01:46:35 +000069elseif (LIBUNWIND_ENABLE_SHARED)
70 message(FATAL_ERROR
71 "Compiler doesn't support generation of unwind tables if exception "
72 "support is disabled. Building libunwind DSO with runtime dependency "
73 "on C++ ABI library is not supported.")
Saleem Abdulrasool675df582015-04-24 19:39:17 +000074endif()
75
Saleem Abdulrasoola3923ac2015-04-25 01:46:35 +000076if (APPLE)
77 list(APPEND LIBUNWIND_COMPILE_FLAGS "-U__STRICT_ANSI__")
78 list(APPEND LIBUNWIND_LINK_FLAGS
79 "-compatibility_version 1"
80 "-install_name /usr/lib/libunwind.1.dylib")
Saleem Abdulrasool675df582015-04-24 19:39:17 +000081
Saleem Abdulrasoola3923ac2015-04-25 01:46:35 +000082 if (CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.6")
83 list(APPEND LIBUNWIND_LINK_FLAGS
84 "-current_version ${LIBUNWIND_VERSION}"
85 "/usr/lib/libSystem.B.dylib")
86 endif ()
87endif ()
Saleem Abdulrasool675df582015-04-24 19:39:17 +000088
Saleem Abdulrasool675df582015-04-24 19:39:17 +000089string(REPLACE ";" " " LIBUNWIND_COMPILE_FLAGS "${LIBUNWIND_COMPILE_FLAGS}")
Saleem Abdulrasoole1850812015-04-25 02:06:15 +000090string(REPLACE ";" " " LIBUNWIND_CXX_FLAGS "${LIBUNWIND_CXX_FLAGS}")
Eric Fiselierc00311e2016-06-02 01:02:10 +000091string(REPLACE ";" " " LIBUNWIND_C_FLAGS "${LIBUNWIND_C_FLAGS}")
Saleem Abdulrasoola3923ac2015-04-25 01:46:35 +000092string(REPLACE ";" " " LIBUNWIND_LINK_FLAGS "${LIBUNWIND_LINK_FLAGS}")
Saleem Abdulrasool675df582015-04-24 19:39:17 +000093
Saleem Abdulrasoole1850812015-04-25 02:06:15 +000094set_property(SOURCE ${LIBUNWIND_CXX_SOURCES}
Eric Fiselierf7e48cd2016-06-02 01:50:10 +000095 APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_CXX_FLAGS} ${LIBUNWIND_CXX_FLAGS}")
Eric Fiselierc00311e2016-06-02 01:02:10 +000096set_property(SOURCE ${LIBUNWIND_C_SOURCES}
Eric Fiselierf7e48cd2016-06-02 01:50:10 +000097 APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_C_FLAGS} ${LIBUNWIND_C_FLAGS}")
Saleem Abdulrasool675df582015-04-24 19:39:17 +000098
Petr Hosek949ee872016-08-08 22:55:48 +000099# Add a object library that contains the compiled source files.
100add_library(unwind_objects OBJECT ${LIBUNWIND_SOURCES} ${LIBUNWIND_HEADERS})
101
102set_target_properties(unwind_objects
103 PROPERTIES
104 COMPILE_FLAGS "${LIBUNWIND_COMPILE_FLAGS}")
105
106set(LIBUNWIND_TARGETS)
107
108# Build the shared library.
109if (LIBUNWIND_ENABLE_SHARED)
110 add_library(unwind_shared SHARED $<TARGET_OBJECTS:unwind_objects>)
111 target_link_libraries(unwind_shared ${libraries})
112 set_target_properties(unwind_shared
113 PROPERTIES
114 LINK_FLAGS "${LIBUNWIND_LINK_FLAGS}"
115 OUTPUT_NAME "unwind"
116 VERSION "1.0"
117 SOVERSION "1")
118 list(APPEND LIBUNWIND_TARGETS "unwind_shared")
119endif()
120
121# Build the static library.
122if (LIBUNWIND_ENABLE_STATIC)
123 add_library(unwind_static STATIC $<TARGET_OBJECTS:unwind_objects>)
124 target_link_libraries(unwind_static ${libraries})
125 set_target_properties(unwind_static
126 PROPERTIES
127 LINK_FLAGS "${LIBUNWIND_LINK_FLAGS}"
128 OUTPUT_NAME "unwind")
129 list(APPEND LIBUNWIND_TARGETS "unwind_static")
130endif()
131
132# Add a meta-target for both libraries.
133add_custom_target(unwind DEPENDS ${LIBUNWIND_TARGETS})
134
135install(TARGETS ${LIBUNWIND_TARGETS}
Saleem Abdulrasoola3923ac2015-04-25 01:46:35 +0000136 LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
137 ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
138