From 2d3a518b8b5cd66812d1e670c413067d661837d1 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Wed, 7 Aug 2024 11:09:03 +0200 Subject: [PATCH] build: ensure full stacktrace information is preserved --- CMakeLists.txt | 66 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bb3e2f02..8803c396 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -173,6 +173,16 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") add_compile_definitions(_WIN32_WINNT=0x0601 WINVER=0x0601) 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/thrift_library.cmake) @@ -1136,8 +1146,8 @@ foreach(tgt dwarfs_common dwarfs_reader dwarfs_writer endif() endforeach() -# not sure why exactly, copied from fsst/CMakeLists.txt 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) endif() @@ -1413,13 +1423,15 @@ if(NOT STATIC_BUILD_DO_NOT_USE) endif() if(STATIC_BUILD_DO_NOT_USE OR APPLE) - foreach(tgt ${BINARY_TARGETS}) - list(APPEND FILES_TO_STRIP $) - endforeach() - if(APPLE) - add_custom_target(strip COMMAND strip ${FILES_TO_STRIP}) - else() - add_custom_target(strip COMMAND strip $,--strip-debug,--strip-all> ${FILES_TO_STRIP}) + if(CMAKE_BUILD_TYPE STREQUAL "Release") + foreach(tgt ${BINARY_TARGETS}) + list(APPEND FILES_TO_STRIP $) + endforeach() + if(APPLE) + add_custom_target(strip COMMAND strip ${FILES_TO_STRIP}) + else() + add_custom_target(strip COMMAND strip $,--strip-debug,--strip-all> ${FILES_TO_STRIP}) + endif() endif() endif() @@ -1444,21 +1456,31 @@ if(PRJ_VERSION_FULL) endif() if(STATIC_BUILD_DO_NOT_USE OR WIN32) - if (WITH_UNIVERSAL_BINARY) - find_program(UPX_EXE upx upx.exe PATHS "c:/bin" DOC "ultimate packer for executables" REQUIRED) + if(WITH_UNIVERSAL_BINARY) + 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 - # also, anything above --best increases the startup time of the compressed - # executable significantly - add_custom_command( - OUTPUT ${UNIVERSAL_PACKED} - COMMAND ${UPX_EXE} -9 -o ${UNIVERSAL_PACKED} $ - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - ) + add_custom_command( + OUTPUT ${UNIVERSAL_OUT} + COMMAND ${CMAKE_COMMAND} -E copy $ ${UNIVERSAL_OUT} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + else() + 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} $ + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + endif() + + add_custom_target(universal_upx DEPENDS ${UNIVERSAL_OUT}) endif() 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" "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) 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 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}/${UNIVERSAL_PACKED} ${ARTIFACTS_FULL_PATH} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${UNIVERSAL_OUT} ${ARTIFACTS_FULL_PATH} COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${RICEPP_BENCHMARK_FITS}${CMAKE_EXECUTABLE_SUFFIX} ${ARTIFACTS_FULL_PATH}/ricepp_benchmark_fits-${DWARFS_ARTIFACT_ID}${CMAKE_EXECUTABLE_SUFFIX}