mirror of https://gitee.com/bigwinds/arangodb
110 lines
3.3 KiB
CMake
110 lines
3.3 KiB
CMake
################################################################################
|
|
## INSTALL debug information on *nux systems
|
|
################################################################################
|
|
|
|
macro(install_debinfo
|
|
STRIP_DIR
|
|
USER_SUB_DEBINFO_DIR
|
|
USER_OUTPUT_DIRECTORY
|
|
USER_TARGET)
|
|
|
|
string(LENGTH "${USER_TARGET}" TLEN)
|
|
if (TLEN EQUAL 0)
|
|
message(FATAL_ERROR "empty target specified for creating debug file")
|
|
endif()
|
|
|
|
set(SUB_DEBINFO_DIR ${USER_SUB_DEBINFO_DIR})
|
|
set(FILE ${USER_OUTPUT_DIRECTORY}/${USER_TARGET}${CMAKE_EXECUTABLE_SUFFIX})
|
|
set(STRIP_FILE ${STRIP_DIR}/${USER_TARGET}${CMAKE_EXECUTABLE_SUFFIX})
|
|
|
|
if (NOT MSVC AND
|
|
CMAKE_STRIP AND
|
|
READELF_EXECUTABLE AND
|
|
STRIP_FILE AND
|
|
EXISTS ${FILE})
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${STRIP_DIR})
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E remove ${STRIP_FILE})
|
|
|
|
execute_process(
|
|
COMMAND ${READELF_EXECUTABLE} -n ${FILE}
|
|
OUTPUT_VARIABLE READELF_RESULT)
|
|
|
|
string(REGEX
|
|
REPLACE ".*ID: *([a-f0-9]*).*" "\\1"
|
|
FILE_CHECKSUM
|
|
"${READELF_RESULT}"
|
|
)
|
|
string(LENGTH ${FILE_CHECKSUM} FILE_CHECKSUM_LEN)
|
|
|
|
if (FILE_CHECKSUM_LEN EQUAL 40)
|
|
string(SUBSTRING ${FILE_CHECKSUM} 0 2 SUB_DIR)
|
|
string(SUBSTRING ${FILE_CHECKSUM} 2 -1 STRIP_FILE)
|
|
set(SUB_DEBINFO_DIR .build-id/${SUB_DIR})
|
|
set(STRIP_FILE "${STRIP_FILE}.debug")
|
|
else ()
|
|
set(STRIP_FILE ${USER_TARGET}${CMAKE_EXECUTABLE_SUFFIX})
|
|
endif()
|
|
execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_DIR}/${STRIP_FILE})
|
|
set(FILE ${STRIP_DIR}/${STRIP_FILE})
|
|
install(
|
|
PROGRAMS ${FILE}
|
|
DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${SUB_DEBINFO_DIR})
|
|
endif()
|
|
endmacro()
|
|
|
|
# Detect whether this system has SHA checksums
|
|
macro(detect_binary_id_type sourceVar)
|
|
set(${sourceVar} false)
|
|
if (NOT MSVC AND CMAKE_STRIP AND READELF_EXECUTABLE)
|
|
execute_process(
|
|
COMMAND ${READELF_EXECUTABLE} -n ${READELF_EXECUTABLE}
|
|
OUTPUT_VARIABLE READELF_RESULT)
|
|
|
|
string(REGEX
|
|
REPLACE ".*ID: *([a-f0-9]*).*" "\\1"
|
|
FILE_CHECKSUM
|
|
"${READELF_RESULT}"
|
|
)
|
|
string(LENGTH "${FILE_CHECKSUM}" FILE_CHECKSUM_LEN)
|
|
if (FILE_CHECKSUM_LEN EQUAL 40)
|
|
set(${sourceVar} true)
|
|
endif()
|
|
endif()
|
|
endmacro()
|
|
|
|
macro(strip_install_bin_and_config
|
|
TARGET
|
|
INTERMEDIATE_STRIP_DIR
|
|
TARGET_DIR
|
|
BIND_TARGET)
|
|
|
|
string(LENGTH "${TARGET}" TLEN)
|
|
if (TLEN EQUAL 0)
|
|
message(FATAL_ERROR "empty target specified for creating stripped file")
|
|
endif()
|
|
set(FILE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${TARGET}${CMAKE_EXECUTABLE_SUFFIX})
|
|
set(STRIP_FILE ${INTERMEDIATE_STRIP_DIR}/${TARGET}${CMAKE_EXECUTABLE_SUFFIX})
|
|
if (NOT MSVC AND CMAKE_STRIP)
|
|
set(TARGET_NAME "${BIND_TARGET}_${TARGET}")
|
|
ExternalProject_Add("${TARGET_NAME}"
|
|
DEPENDS ${BIND_TARGET}
|
|
SOURCE_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}
|
|
|
|
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E make_directory ${INTERMEDIATE_STRIP_DIR}
|
|
COMMENT "creating strip directory"
|
|
|
|
BUILD_COMMAND ${CMAKE_STRIP} ${FILE} -o ${STRIP_FILE}
|
|
COMMENT "stripping binary"
|
|
INSTALL_COMMAND ""
|
|
)
|
|
install(PROGRAMS ${STRIP_FILE}
|
|
DESTINATION ${TARGET_DIR})
|
|
else ()
|
|
install(
|
|
PROGRAMS ${FILE}
|
|
DESTINATION ${TARGET_DIR})
|
|
endif()
|
|
install_config(${TARGET})
|
|
|
|
endmacro()
|