forked from OSchip/llvm-project
139 lines
4.7 KiB
CMake
139 lines
4.7 KiB
CMake
# Get sources
|
|
|
|
set(LIBUNWIND_CXX_SOURCES
|
|
libunwind.cpp
|
|
Unwind-EHABI.cpp)
|
|
append_if(LIBUNWIND_CXX_SOURCES APPLE Unwind_AppleExtras.cpp)
|
|
|
|
set(LIBUNWIND_C_SOURCES
|
|
UnwindLevel1.c
|
|
UnwindLevel1-gcc-ext.c
|
|
Unwind-sjlj.c)
|
|
set_source_files_properties(${LIBUNWIND_C_SOURCES}
|
|
PROPERTIES
|
|
COMPILE_FLAGS "-std=c99")
|
|
|
|
set(LIBUNWIND_ASM_SOURCES
|
|
UnwindRegistersRestore.S
|
|
UnwindRegistersSave.S)
|
|
set_source_files_properties(${LIBUNWIND_ASM_SOURCES}
|
|
PROPERTIES
|
|
LANGUAGE C)
|
|
|
|
set(LIBUNWIND_HEADERS
|
|
AddressSpace.hpp
|
|
assembly.h
|
|
CompactUnwinder.hpp
|
|
config.h
|
|
dwarf2.h
|
|
DwarfInstructions.hpp
|
|
DwarfParser.hpp
|
|
libunwind_ext.h
|
|
Registers.hpp
|
|
RWMutex.hpp
|
|
UnwindCursor.hpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../include/libunwind.h
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../include/unwind.h)
|
|
|
|
append_if(LIBUNWIND_HEADERS APPLE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/../include/mach-o/compact_unwind_encoding.h")
|
|
|
|
if (MSVC_IDE)
|
|
# Force them all into the headers dir on MSVC, otherwise they end up at
|
|
# project scope because they don't have extensions.
|
|
source_group("Header Files" FILES ${LIBUNWIND_HEADERS})
|
|
endif()
|
|
|
|
set(LIBUNWIND_SOURCES
|
|
${LIBUNWIND_CXX_SOURCES}
|
|
${LIBUNWIND_C_SOURCES}
|
|
${LIBUNWIND_ASM_SOURCES})
|
|
|
|
# Generate library list.
|
|
set(libraries ${LIBUNWINDCXX_ABI_LIBRARIES})
|
|
append_if(libraries LIBUNWIND_HAS_C_LIB c)
|
|
append_if(libraries LIBUNWIND_HAS_DL_LIB dl)
|
|
if (LIBUNWIND_ENABLE_THREADS)
|
|
append_if(libraries LIBUNWIND_HAS_PTHREAD_LIB pthread)
|
|
endif()
|
|
|
|
# Setup flags.
|
|
append_if(LIBUNWIND_CXX_FLAGS LIBUNWIND_HAS_NO_RTTI_FLAG -fno-rtti)
|
|
|
|
append_if(LIBUNWIND_LINK_FLAGS LIBUNWIND_HAS_NODEFAULTLIBS_FLAG -nodefaultlibs)
|
|
|
|
if (LIBUNWIND_HAS_NO_EXCEPTIONS_FLAG AND LIBUNWIND_HAS_FUNWIND_TABLES)
|
|
list(APPEND LIBUNWIND_COMPILE_FLAGS -fno-exceptions)
|
|
list(APPEND LIBUNWIND_COMPILE_FLAGS -funwind-tables)
|
|
elseif (LIBUNWIND_ENABLE_SHARED)
|
|
message(FATAL_ERROR
|
|
"Compiler doesn't support generation of unwind tables if exception "
|
|
"support is disabled. Building libunwind DSO with runtime dependency "
|
|
"on C++ ABI library is not supported.")
|
|
endif()
|
|
|
|
if (APPLE)
|
|
list(APPEND LIBUNWIND_COMPILE_FLAGS "-U__STRICT_ANSI__")
|
|
list(APPEND LIBUNWIND_LINK_FLAGS
|
|
"-compatibility_version 1"
|
|
"-install_name /usr/lib/libunwind.1.dylib")
|
|
|
|
if (CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.6")
|
|
list(APPEND LIBUNWIND_LINK_FLAGS
|
|
"-current_version ${LIBUNWIND_VERSION}"
|
|
"/usr/lib/libSystem.B.dylib")
|
|
endif ()
|
|
endif ()
|
|
|
|
string(REPLACE ";" " " LIBUNWIND_COMPILE_FLAGS "${LIBUNWIND_COMPILE_FLAGS}")
|
|
string(REPLACE ";" " " LIBUNWIND_CXX_FLAGS "${LIBUNWIND_CXX_FLAGS}")
|
|
string(REPLACE ";" " " LIBUNWIND_C_FLAGS "${LIBUNWIND_C_FLAGS}")
|
|
string(REPLACE ";" " " LIBUNWIND_LINK_FLAGS "${LIBUNWIND_LINK_FLAGS}")
|
|
|
|
set_property(SOURCE ${LIBUNWIND_CXX_SOURCES}
|
|
APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_CXX_FLAGS} ${LIBUNWIND_CXX_FLAGS}")
|
|
set_property(SOURCE ${LIBUNWIND_C_SOURCES}
|
|
APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_C_FLAGS} ${LIBUNWIND_C_FLAGS}")
|
|
|
|
# Add a object library that contains the compiled source files.
|
|
add_library(unwind_objects OBJECT ${LIBUNWIND_SOURCES} ${LIBUNWIND_HEADERS})
|
|
|
|
set_target_properties(unwind_objects
|
|
PROPERTIES
|
|
COMPILE_FLAGS "${LIBUNWIND_COMPILE_FLAGS}"
|
|
POSITION_INDEPENDENT_CODE ON)
|
|
|
|
set(LIBUNWIND_TARGETS)
|
|
|
|
# Build the shared library.
|
|
if (LIBUNWIND_ENABLE_SHARED)
|
|
add_library(unwind_shared SHARED $<TARGET_OBJECTS:unwind_objects>)
|
|
target_link_libraries(unwind_shared ${libraries})
|
|
set_target_properties(unwind_shared
|
|
PROPERTIES
|
|
LINK_FLAGS "${LIBUNWIND_LINK_FLAGS}"
|
|
OUTPUT_NAME "unwind"
|
|
VERSION "1.0"
|
|
SOVERSION "1")
|
|
list(APPEND LIBUNWIND_TARGETS "unwind_shared")
|
|
endif()
|
|
|
|
# Build the static library.
|
|
if (LIBUNWIND_ENABLE_STATIC)
|
|
add_library(unwind_static STATIC $<TARGET_OBJECTS:unwind_objects>)
|
|
target_link_libraries(unwind_static ${libraries})
|
|
set_target_properties(unwind_static
|
|
PROPERTIES
|
|
LINK_FLAGS "${LIBUNWIND_LINK_FLAGS}"
|
|
OUTPUT_NAME "unwind")
|
|
list(APPEND LIBUNWIND_TARGETS "unwind_static")
|
|
endif()
|
|
|
|
# Add a meta-target for both libraries.
|
|
add_custom_target(unwind DEPENDS ${LIBUNWIND_TARGETS})
|
|
|
|
install(TARGETS ${LIBUNWIND_TARGETS}
|
|
LIBRARY DESTINATION ${LIBUNWIND_INSTALL_PREFIX}lib${LIBUNWIND_LIBDIR_SUFFIX}
|
|
ARCHIVE DESTINATION ${LIBUNWIND_INSTALL_PREFIX}lib${LIBUNWIND_LIBDIR_SUFFIX})
|
|
|