Saleem Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 1 | # Get sources |
| 2 | |
| 3 | set(LIBUNWIND_CXX_SOURCES |
| 4 | libunwind.cpp |
| 5 | Unwind-EHABI.cpp) |
| 6 | append_if(LIBUNWIND_CXX_SOURCES APPLE Unwind_AppleExtras.cpp) |
| 7 | |
| 8 | set(LIBUNWIND_C_SOURCES |
| 9 | UnwindLevel1.c |
| 10 | UnwindLevel1-gcc-ext.c |
| 11 | Unwind-sjlj.c) |
| 12 | set_source_files_properties(${LIBUNWIND_C_SOURCES} |
| 13 | PROPERTIES |
| 14 | COMPILE_FLAGS "-std=c99") |
| 15 | |
| 16 | set(LIBUNWIND_ASM_SOURCES |
| 17 | UnwindRegistersRestore.S |
| 18 | UnwindRegistersSave.S) |
| 19 | set_source_files_properties(${LIBUNWIND_ASM_SOURCES} |
| 20 | PROPERTIES |
| 21 | LANGUAGE C) |
| 22 | |
| 23 | set(LIBUNWIND_HEADERS |
Saleem Abdulrasool | a3923ac | 2015-04-25 01:46:35 +0000 | [diff] [blame] | 24 | 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 Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 37 | |
Saleem Abdulrasool | a3923ac | 2015-04-25 01:46:35 +0000 | [diff] [blame] | 38 | append_if(LIBUNWIND_HEADERS APPLE |
Saleem Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 39 | "${CMAKE_CURRENT_SOURCE_DIR}/../include/mach-o/compact_unwind_encoding.h") |
| 40 | |
| 41 | if (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}) |
| 45 | endif() |
| 46 | |
| 47 | set(LIBUNWIND_SOURCES |
| 48 | ${LIBUNWIND_CXX_SOURCES} |
| 49 | ${LIBUNWIND_C_SOURCES} |
| 50 | ${LIBUNWIND_ASM_SOURCES}) |
| 51 | |
Saleem Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 52 | # Generate library list. |
Saleem Abdulrasool | a3923ac | 2015-04-25 01:46:35 +0000 | [diff] [blame] | 53 | set(libraries ${LIBUNWINDCXX_ABI_LIBRARIES}) |
| 54 | append_if(libraries LIBUNWIND_HAS_C_LIB c) |
| 55 | append_if(libraries LIBUNWIND_HAS_DL_LIB dl) |
Asiri Rathnayake | 9feea20 | 2016-09-28 10:57:15 +0000 | [diff] [blame] | 56 | if (LIBUNWIND_ENABLE_THREADS) |
| 57 | append_if(libraries LIBUNWIND_HAS_PTHREAD_LIB pthread) |
| 58 | endif() |
Saleem Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 59 | |
Saleem Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 60 | # Setup flags. |
Saleem Abdulrasool | a3923ac | 2015-04-25 01:46:35 +0000 | [diff] [blame] | 61 | append_if(LIBUNWIND_COMPILE_FLAGS LIBUNWIND_HAS_FPIC_FLAG -fPIC) |
Saleem Abdulrasool | e185081 | 2015-04-25 02:06:15 +0000 | [diff] [blame] | 62 | append_if(LIBUNWIND_CXX_FLAGS LIBUNWIND_HAS_NO_RTTI_FLAG -fno-rtti) |
Saleem Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 63 | |
Saleem Abdulrasool | a3923ac | 2015-04-25 01:46:35 +0000 | [diff] [blame] | 64 | append_if(LIBUNWIND_LINK_FLAGS LIBUNWIND_HAS_NODEFAULTLIBS_FLAG -nodefaultlibs) |
| 65 | |
| 66 | if (LIBUNWIND_HAS_NO_EXCEPTIONS_FLAG AND LIBUNWIND_HAS_FUNWIND_TABLES) |
Saleem Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 67 | list(APPEND LIBUNWIND_COMPILE_FLAGS -fno-exceptions) |
| 68 | list(APPEND LIBUNWIND_COMPILE_FLAGS -funwind-tables) |
Saleem Abdulrasool | a3923ac | 2015-04-25 01:46:35 +0000 | [diff] [blame] | 69 | elseif (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 Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 74 | endif() |
| 75 | |
Saleem Abdulrasool | a3923ac | 2015-04-25 01:46:35 +0000 | [diff] [blame] | 76 | if (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 Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 81 | |
Saleem Abdulrasool | a3923ac | 2015-04-25 01:46:35 +0000 | [diff] [blame] | 82 | 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 () |
| 87 | endif () |
Saleem Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 88 | |
Saleem Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 89 | string(REPLACE ";" " " LIBUNWIND_COMPILE_FLAGS "${LIBUNWIND_COMPILE_FLAGS}") |
Saleem Abdulrasool | e185081 | 2015-04-25 02:06:15 +0000 | [diff] [blame] | 90 | string(REPLACE ";" " " LIBUNWIND_CXX_FLAGS "${LIBUNWIND_CXX_FLAGS}") |
Eric Fiselier | c00311e | 2016-06-02 01:02:10 +0000 | [diff] [blame] | 91 | string(REPLACE ";" " " LIBUNWIND_C_FLAGS "${LIBUNWIND_C_FLAGS}") |
Saleem Abdulrasool | a3923ac | 2015-04-25 01:46:35 +0000 | [diff] [blame] | 92 | string(REPLACE ";" " " LIBUNWIND_LINK_FLAGS "${LIBUNWIND_LINK_FLAGS}") |
Saleem Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 93 | |
Saleem Abdulrasool | e185081 | 2015-04-25 02:06:15 +0000 | [diff] [blame] | 94 | set_property(SOURCE ${LIBUNWIND_CXX_SOURCES} |
Eric Fiselier | f7e48cd | 2016-06-02 01:50:10 +0000 | [diff] [blame] | 95 | APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_CXX_FLAGS} ${LIBUNWIND_CXX_FLAGS}") |
Eric Fiselier | c00311e | 2016-06-02 01:02:10 +0000 | [diff] [blame] | 96 | set_property(SOURCE ${LIBUNWIND_C_SOURCES} |
Eric Fiselier | f7e48cd | 2016-06-02 01:50:10 +0000 | [diff] [blame] | 97 | APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_C_FLAGS} ${LIBUNWIND_C_FLAGS}") |
Saleem Abdulrasool | 675df58 | 2015-04-24 19:39:17 +0000 | [diff] [blame] | 98 | |
Petr Hosek | 949ee87 | 2016-08-08 22:55:48 +0000 | [diff] [blame] | 99 | # Add a object library that contains the compiled source files. |
| 100 | add_library(unwind_objects OBJECT ${LIBUNWIND_SOURCES} ${LIBUNWIND_HEADERS}) |
| 101 | |
| 102 | set_target_properties(unwind_objects |
| 103 | PROPERTIES |
| 104 | COMPILE_FLAGS "${LIBUNWIND_COMPILE_FLAGS}") |
| 105 | |
| 106 | set(LIBUNWIND_TARGETS) |
| 107 | |
| 108 | # Build the shared library. |
| 109 | if (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") |
| 119 | endif() |
| 120 | |
| 121 | # Build the static library. |
| 122 | if (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") |
| 130 | endif() |
| 131 | |
| 132 | # Add a meta-target for both libraries. |
| 133 | add_custom_target(unwind DEPENDS ${LIBUNWIND_TARGETS}) |
| 134 | |
| 135 | install(TARGETS ${LIBUNWIND_TARGETS} |
Saleem Abdulrasool | a3923ac | 2015-04-25 01:46:35 +0000 | [diff] [blame] | 136 | LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} |
| 137 | ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) |
| 138 | |