forked from OSchip/llvm-project
87 lines
3.5 KiB
CMake
87 lines
3.5 KiB
CMake
include(CheckLibraryExists)
|
|
include(GNUInstallDirs)
|
|
include(ExtendPath)
|
|
|
|
string(REPLACE "-Wl,-z,defs" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
|
|
|
|
add_custom_target(gcc_s_ver ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/gcc_s.ver")
|
|
set(LLVM_LIBGCC_GCC_S_VER "${CMAKE_CURRENT_BINARY_DIR}/gcc_s.ver")
|
|
|
|
add_custom_target(gcc_s.ver ALL
|
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/gcc_s.ver"
|
|
COMMAND
|
|
"${CMAKE_C_COMPILER}"
|
|
"-E"
|
|
"-xc" "${CMAKE_CURRENT_SOURCE_DIR}/gcc_s.ver"
|
|
"-o" "${CMAKE_CURRENT_BINARY_DIR}/gcc_s.ver"
|
|
)
|
|
set_target_properties(gcc_s.ver PROPERTIES
|
|
OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/gcc_s.ver")
|
|
|
|
add_library(libgcc_s SHARED blank.c)
|
|
add_dependencies(libgcc_s gcc_s_ver)
|
|
set_target_properties(libgcc_s
|
|
PROPERTIES
|
|
LINKER_LANGUAGE C
|
|
OUTPUT_NAME "unwind"
|
|
VERSION "1.0"
|
|
SOVERSION "1"
|
|
POSITION_INDEPENDENT_CODE ON)
|
|
string(REGEX MATCH "[^-]+" LLVM_LIBGCC_TARGET_ARCH ${CMAKE_C_COMPILER_TARGET})
|
|
target_link_libraries(libgcc_s PRIVATE
|
|
$<TARGET_OBJECTS:unwind_static>
|
|
$<TARGET_OBJECTS:clang_rt.builtins-${LLVM_LIBGCC_TARGET_ARCH}>
|
|
)
|
|
target_link_options(libgcc_s PRIVATE
|
|
-nostdlib
|
|
-Wl,--version-script,$<TARGET_PROPERTY:gcc_s.ver,OUTPUT_PATH>)
|
|
|
|
check_library_exists(m sin "" LLVM_LIBGCC_HAS_LIBM)
|
|
target_link_libraries(libgcc_s PRIVATE
|
|
$<$<BOOL:LLVM_LIBGCC_HAS_LIBM>:m>
|
|
c
|
|
)
|
|
|
|
extend_path(LLVM_LIBGCC_LIBUNWIND_STATIC_ROOT "${CMAKE_INSTALL_PREFIX}" "${LIBUNWIND_INSTALL_LIBRARY_DIR}")
|
|
#string(REPLACE "${CMAKE_INSTALL_FULL_LIBDIR}/" "" LLVM_LIBGCC_LIBUNWIND_STATIC_ROOT "${LLVM_LIBGCC_LIBUNWIND_STATIC_ROOT}")
|
|
|
|
install(TARGETS libgcc_s
|
|
LIBRARY DESTINATION "${LLVM_LIBGCC_LIBUNWIND_STATIC_ROOT}" COMPONENT unwind
|
|
ARCHIVE DESTINATION "${LLVM_LIBGCC_LIBUNWIND_STATIC_ROOT}" COMPONENT unwind
|
|
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT unwind)
|
|
|
|
get_compiler_rt_install_dir(${LLVM_LIBGCC_TARGET_ARCH} install_dir_builtins)
|
|
string(REGEX REPLACE "^lib/" "" install_dir_builtins "${install_dir_builtins}")
|
|
string(FIND "${install_dir_builtins}" "clang" install_path_contains_triple)
|
|
if(install_path_contains_triple EQUAL -1)
|
|
set(builtins_suffix "-${LLVM_LIBGCC_TARGET_ARCH}")
|
|
else()
|
|
string(PREPEND install_dir_builtins "../")
|
|
endif()
|
|
install(CODE "execute_process(
|
|
COMMAND \"\${CMAKE_COMMAND}\" -E
|
|
create_symlink ${install_dir_builtins}/libclang_rt.builtins${builtins_suffix}.a libgcc.a
|
|
WORKING_DIRECTORY \"\$ENV{DESTDIR}${LLVM_LIBGCC_LIBUNWIND_STATIC_ROOT}\")"
|
|
COMPONENT unwind)
|
|
|
|
install(CODE "execute_process(
|
|
COMMAND \"\${CMAKE_COMMAND}\" -E
|
|
create_symlink libunwind.a libgcc_eh.a
|
|
WORKING_DIRECTORY \"\$ENV{DESTDIR}${LLVM_LIBGCC_LIBUNWIND_STATIC_ROOT}\")"
|
|
COMPONENT unwind)
|
|
install(CODE "execute_process(
|
|
COMMAND \"\${CMAKE_COMMAND}\" -E
|
|
create_symlink libunwind.so libgcc_s.so.1.0
|
|
WORKING_DIRECTORY \"\$ENV{DESTDIR}${LLVM_LIBGCC_LIBUNWIND_STATIC_ROOT}\")"
|
|
COMPONENT unwind)
|
|
install(CODE "execute_process(
|
|
COMMAND \"\${CMAKE_COMMAND}\" -E
|
|
create_symlink libgcc_s.so.1.0 libgcc_s.so.1
|
|
WORKING_DIRECTORY \"\$ENV{DESTDIR}${LLVM_LIBGCC_LIBUNWIND_STATIC_ROOT}\")"
|
|
COMPONENT unwind)
|
|
install(CODE "execute_process(
|
|
COMMAND \"\${CMAKE_COMMAND}\" -E
|
|
create_symlink libgcc_s.so.1 libgcc_s.so
|
|
WORKING_DIRECTORY \"\$ENV{DESTDIR}${LLVM_LIBGCC_LIBUNWIND_STATIC_ROOT}\")"
|
|
COMPONENT unwind)
|