build: ensure full stacktrace information is preserved

This commit is contained in:
Marcus Holland-Moritz 2024-08-07 11:09:03 +02:00
parent b6f4e25a17
commit 2d3a518b8b

View File

@ -173,6 +173,16 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
add_compile_definitions(_WIN32_WINNT=0x0601 WINVER=0x0601) add_compile_definitions(_WIN32_WINNT=0x0601 WINVER=0x0601)
endif() endif()
if(ENABLE_STACKTRACE)
if(CMAKE_BUILD_TYPE STREQUAL Release)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
"${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
# enable line numbers in stack traces
add_compile_options(-g1)
endif()
endif()
endif()
include(${CMAKE_SOURCE_DIR}/cmake/version.cmake) include(${CMAKE_SOURCE_DIR}/cmake/version.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/thrift_library.cmake) include(${CMAKE_SOURCE_DIR}/cmake/thrift_library.cmake)
@ -1136,8 +1146,8 @@ foreach(tgt dwarfs_common dwarfs_reader dwarfs_writer
endif() endif()
endforeach() endforeach()
# not sure why exactly, copied from fsst/CMakeLists.txt
if(CMAKE_BUILD_TYPE STREQUAL Release) if(CMAKE_BUILD_TYPE STREQUAL Release)
# not sure why exactly, copied from fsst/CMakeLists.txt
set_source_files_properties(fsst/fsst_avx512.cpp PROPERTIES COMPILE_FLAGS -O1) set_source_files_properties(fsst/fsst_avx512.cpp PROPERTIES COMPILE_FLAGS -O1)
endif() endif()
@ -1413,13 +1423,15 @@ if(NOT STATIC_BUILD_DO_NOT_USE)
endif() endif()
if(STATIC_BUILD_DO_NOT_USE OR APPLE) if(STATIC_BUILD_DO_NOT_USE OR APPLE)
foreach(tgt ${BINARY_TARGETS}) if(CMAKE_BUILD_TYPE STREQUAL "Release")
list(APPEND FILES_TO_STRIP $<TARGET_FILE:${tgt}>) foreach(tgt ${BINARY_TARGETS})
endforeach() list(APPEND FILES_TO_STRIP $<TARGET_FILE:${tgt}>)
if(APPLE) endforeach()
add_custom_target(strip COMMAND strip ${FILES_TO_STRIP}) if(APPLE)
else() add_custom_target(strip COMMAND strip ${FILES_TO_STRIP})
add_custom_target(strip COMMAND strip $<IF:$<BOOL:ENABLE_STACKTRACE>,--strip-debug,--strip-all> ${FILES_TO_STRIP}) else()
add_custom_target(strip COMMAND strip $<IF:$<BOOL:ENABLE_STACKTRACE>,--strip-debug,--strip-all> ${FILES_TO_STRIP})
endif()
endif() endif()
endif() endif()
@ -1444,21 +1456,31 @@ if(PRJ_VERSION_FULL)
endif() endif()
if(STATIC_BUILD_DO_NOT_USE OR WIN32) if(STATIC_BUILD_DO_NOT_USE OR WIN32)
if (WITH_UNIVERSAL_BINARY) if(WITH_UNIVERSAL_BINARY)
find_program(UPX_EXE upx upx.exe PATHS "c:/bin" DOC "ultimate packer for executables" REQUIRED) set(UNIVERSAL_OUT "dwarfs-universal-${DWARFS_ARTIFACT_ID}${CMAKE_EXECUTABLE_SUFFIX}")
set(UNIVERSAL_PACKED "dwarfs-universal-${DWARFS_ARTIFACT_ID}${CMAKE_EXECUTABLE_SUFFIX}") if(ENABLE_STACKTRACE)
message(WARNING "UPX compression is disabled with ENABLE_STACKTRACE")
# upx -9 is a good compromise between compression ratio and speed add_custom_command(
# also, anything above --best increases the startup time of the compressed OUTPUT ${UNIVERSAL_OUT}
# executable significantly COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:dwarfsuniversal> ${UNIVERSAL_OUT}
add_custom_command( WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
OUTPUT ${UNIVERSAL_PACKED} )
COMMAND ${UPX_EXE} -9 -o ${UNIVERSAL_PACKED} $<TARGET_FILE:dwarfsuniversal> else()
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} find_program(UPX_EXE upx upx.exe PATHS "c:/bin" DOC "ultimate packer for executables" REQUIRED)
)
add_custom_target(universal_upx DEPENDS ${UNIVERSAL_PACKED}) # upx -9 is a good compromise between compression ratio and speed
# also, anything above --best increases the startup time of the compressed
# executable significantly
add_custom_command(
OUTPUT ${UNIVERSAL_OUT}
COMMAND ${UPX_EXE} -9 -o ${UNIVERSAL_OUT} $<TARGET_FILE:dwarfsuniversal>
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
endif()
add_custom_target(universal_upx DEPENDS ${UNIVERSAL_OUT})
endif() endif()
if(DEFINED ENV{GITHUB_REF_TYPE}) if(DEFINED ENV{GITHUB_REF_TYPE})
@ -1484,7 +1506,7 @@ if(STATIC_BUILD_DO_NOT_USE OR WIN32)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/artifacts.env" file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/artifacts.env"
"binary_tarball=${CMAKE_PROJECT_NAME}-${DWARFS_ARTIFACT_ID}${PACKAGE_EXT}\n" "binary_tarball=${CMAKE_PROJECT_NAME}-${DWARFS_ARTIFACT_ID}${PACKAGE_EXT}\n"
"universal_binary=${UNIVERSAL_PACKED}\n") "universal_binary=${UNIVERSAL_OUT}\n")
if(USE_RICEPP_PACKAGE) if(USE_RICEPP_PACKAGE)
add_executable(ricepp_benchmark_fits ricepp/ricepp_benchmark_fits.cpp) add_executable(ricepp_benchmark_fits ricepp/ricepp_benchmark_fits.cpp)
@ -1497,7 +1519,7 @@ if(STATIC_BUILD_DO_NOT_USE OR WIN32)
add_custom_target(copy_artifacts add_custom_target(copy_artifacts
COMMAND ${CMAKE_COMMAND} -E make_directory ${ARTIFACTS_FULL_PATH} COMMAND ${CMAKE_COMMAND} -E make_directory ${ARTIFACTS_FULL_PATH}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-${DWARFS_ARTIFACT_ID}${PACKAGE_EXT} ${ARTIFACTS_FULL_PATH} COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-${DWARFS_ARTIFACT_ID}${PACKAGE_EXT} ${ARTIFACTS_FULL_PATH}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${UNIVERSAL_PACKED} ${ARTIFACTS_FULL_PATH} COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${UNIVERSAL_OUT} ${ARTIFACTS_FULL_PATH}
COMMAND ${CMAKE_COMMAND} -E copy COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/${RICEPP_BENCHMARK_FITS}${CMAKE_EXECUTABLE_SUFFIX} ${CMAKE_CURRENT_BINARY_DIR}/${RICEPP_BENCHMARK_FITS}${CMAKE_EXECUTABLE_SUFFIX}
${ARTIFACTS_FULL_PATH}/ricepp_benchmark_fits-${DWARFS_ARTIFACT_ID}${CMAKE_EXECUTABLE_SUFFIX} ${ARTIFACTS_FULL_PATH}/ricepp_benchmark_fits-${DWARFS_ARTIFACT_ID}${CMAKE_EXECUTABLE_SUFFIX}