mirror of
https://github.com/apple/foundationdb.git
synced 2025-06-02 19:25:52 +08:00
Strip debug symbols with make packages
When compiling on Linux/MacOS `make packages` will now create a `lib` and a `bin` directory in the packages directory. In there it will put stripped versions of all executables and shared libraries (i.e. the binaries without debug symbols). If this is run on Linux, it will additionally copy the debug symbols of all executables into .debug files.
This commit is contained in:
parent
436c9319ff
commit
48f3e65bdf
@ -34,6 +34,7 @@ if(OPEN_FOR_IDE)
|
||||
add_library(fdb_c OBJECT ${FDB_C_SRCS} ${asm_file})
|
||||
else()
|
||||
add_library(fdb_c SHARED ${FDB_C_SRCS} ${asm_file})
|
||||
strip_debug_symbols(fdb_c)
|
||||
endif()
|
||||
add_dependencies(fdb_c fdb_c_generated fdb_c_options)
|
||||
target_link_libraries(fdb_c PUBLIC fdbclient)
|
||||
@ -54,6 +55,8 @@ if(NOT WIN32)
|
||||
else()
|
||||
add_executable(fdb_c_performance_test test/performance_test.c test/test.h)
|
||||
add_executable(fdb_c_ryw_benchmark test/ryw_benchmark.c test/test.h)
|
||||
strip_debug_symbols(fdb_c_performance_test)
|
||||
strip_debug_symbols(fdb_c_ryw_benchmark)
|
||||
endif()
|
||||
target_link_libraries(fdb_c_performance_test PRIVATE fdb_c)
|
||||
target_link_libraries(fdb_c_ryw_benchmark PRIVATE fdb_c)
|
||||
|
@ -9,6 +9,7 @@ define_property(TARGET PROPERTY COVERAGE_FILTERS
|
||||
expression in this list will be ignored when the coverage.target.xml file is \
|
||||
generated. This property is set through the add_flow_target function.")
|
||||
|
||||
|
||||
function(generate_coverage_xml)
|
||||
if(NOT (${ARGC} EQUAL "1"))
|
||||
message(FATAL_ERROR "generate_coverage_xml expects one argument")
|
||||
@ -86,6 +87,55 @@ function(assert_no_version_h target)
|
||||
add_dependencies(${target} ${target_name})
|
||||
endfunction()
|
||||
|
||||
add_custom_target(strip_targets)
|
||||
add_dependencies(packages strip_targets)
|
||||
|
||||
function(strip_debug_symbols target)
|
||||
if (WIN32)
|
||||
return()
|
||||
endif()
|
||||
get_target_property(target_type ${target} TYPE)
|
||||
if(target_type STREQUAL "EXECUTABLE")
|
||||
set(path ${CMAKE_BINARY_DIR}/packages/bin)
|
||||
set(is_exec ON)
|
||||
else()
|
||||
set(path ${CMAKE_BINARY_DIR}/packages/lib)
|
||||
endif()
|
||||
file(MAKE_DIRECTORY "${path}")
|
||||
set(strip_command strip)
|
||||
set(out_name ${target})
|
||||
if(APPLE)
|
||||
if(NOT is_exec)
|
||||
set(out_name "lib${target}.dylib")
|
||||
list(APPEND strip_command -S -x)
|
||||
endif()
|
||||
else()
|
||||
if(is_exec)
|
||||
list(APPEND strip_command --strip-debug --strip-unneeded)
|
||||
else()
|
||||
set(out_name "lib${target}.so")
|
||||
list(APPEND strip_command --strip-all)
|
||||
endif()
|
||||
endif()
|
||||
set(out_file "${path}/${out_name}")
|
||||
list(APPEND strip_command -o "${out_file}")
|
||||
add_custom_command(OUTPUT "${out_file}"
|
||||
COMMAND ${strip_command} $<TARGET_FILE:${target}>
|
||||
COMMENT "Stripping symbols from ${target}")
|
||||
set(out_files "${out_file}")
|
||||
if(is_exec AND NOT APPLE)
|
||||
add_custom_command(OUTPUT "${out_file}.debug"
|
||||
COMMAND objcopy --only-keep-debug $<TARGET_FILE:${target}> "${out_file}.debug" &&
|
||||
objcopy --add-gnu-debuglink="${out_file}.debug" ${out_file}
|
||||
DEPENDS "${out_file}"
|
||||
COMMENT "Copy debug symbols to ${out_name}.debug")
|
||||
list(APPEND out_files "${out_file}.debug")
|
||||
endif()
|
||||
add_custom_target(strip_${target} DEPENDS ${out_files})
|
||||
add_dependencies(strip_${target} ${target})
|
||||
add_dependencies(strip_targets strip_${target})
|
||||
endfunction()
|
||||
|
||||
function(add_flow_target)
|
||||
set(options EXECUTABLE STATIC_LIBRARY
|
||||
DYNAMIC_LIBRARY)
|
||||
@ -135,6 +185,7 @@ function(add_flow_target)
|
||||
endif()
|
||||
endforeach()
|
||||
if(AFT_EXECUTABLE)
|
||||
set(strip_target ON)
|
||||
set(target_type exec)
|
||||
add_executable(${AFT_NAME} ${sources})
|
||||
endif()
|
||||
@ -148,6 +199,7 @@ function(add_flow_target)
|
||||
if(target_type)
|
||||
message(FATAL_ERROR "add_flow_target can only be of one type")
|
||||
endif()
|
||||
set(strip_target ON)
|
||||
add_library(${AFT_NAME} DYNAMIC ${sources})
|
||||
endif()
|
||||
|
||||
@ -158,6 +210,9 @@ function(add_flow_target)
|
||||
add_dependencies(${AFT_NAME} ${AFT_NAME}_actors)
|
||||
assert_no_version_h(${AFT_NAME}_actors)
|
||||
generate_coverage_xml(${AFT_NAME})
|
||||
if(strip_target)
|
||||
strip_debug_symbols(${AFT_NAME})
|
||||
endif()
|
||||
endif()
|
||||
target_include_directories(${AFT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
|
||||
endfunction()
|
||||
|
Loading…
x
Reference in New Issue
Block a user