forked from OSchip/llvm-project
113 lines
3.6 KiB
CMake
113 lines
3.6 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
|
|
UnwindCursor.hpp
|
|
unwind_ext.h
|
|
${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})
|
|
|
|
if (LIBUNWIND_ENABLE_SHARED)
|
|
add_library(unwind SHARED ${LIBUNWIND_SOURCES} ${LIBUNWIND_HEADERS})
|
|
else()
|
|
add_library(unwind STATIC ${LIBUNWIND_SOURCES} ${LIBUNWIND_HEADERS})
|
|
endif ()
|
|
|
|
# Generate library list.
|
|
set(libraries ${LIBUNWINDCXX_ABI_LIBRARIES})
|
|
append_if(libraries LIBUNWIND_HAS_C_LIB c)
|
|
append_if(libraries LIBUNWIND_HAS_DL_LIB dl)
|
|
append_if(libraries LIBUNWIND_HAS_PTHREAD_LIB pthread)
|
|
|
|
target_link_libraries(unwind ${libraries})
|
|
|
|
# Setup flags.
|
|
append_if(LIBUNWIND_COMPILE_FLAGS LIBUNWIND_HAS_FPIC_FLAG -fPIC)
|
|
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_LINK_FLAGS "${LIBUNWIND_LINK_FLAGS}")
|
|
|
|
set_target_properties(unwind
|
|
PROPERTIES
|
|
COMPILE_FLAGS "${CMAKE_COMPILE_FLAGS} ${LIBUNWIND_COMPILE_FLAGS}"
|
|
LINK_FLAGS "${CMAKE_LINK_FLAGS} ${LIBUNWIND_LINK_FLAGS}"
|
|
OUTPUT_NAME "unwind"
|
|
VERSION "1.0"
|
|
SOVERSION "1")
|
|
set_property(SOURCE ${LIBUNWIND_CXX_SOURCES}
|
|
APPEND_STRING PROPERTY COMPILE_FLAGS "${LIBUNWIND_CXX_FLAGS}")
|
|
|
|
install(TARGETS unwind
|
|
LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
|
ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
|
|
|