diff --git a/CMakeLists.txt b/CMakeLists.txt index 1197251dd..1cfd610f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,7 @@ option(IMHEX_REPLACE_DWARF_WITH_PDB "Remove DWARF information from binaries option(IMHEX_ENABLE_STD_ASSERTS "Enable debug asserts in the C++ std library. (Breaks Plugin ABI!)" OFF) option(IMHEX_ENABLE_UNIT_TESTS "Enable building unit tests" OFF) option(IMHEX_ENABLE_PRECOMPILED_HEADERS "Enable precompiled headers" OFF) +option(IMHEX_COMPRESS_DEBUG_INFO "Compress debug information" ON ) set(IMHEX_BASE_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}") set(CMAKE_MODULE_PATH "${IMHEX_BASE_FOLDER}/cmake/modules") diff --git a/cmake/build_helpers.cmake b/cmake/build_helpers.cmake index e0eacd9db..2df604b7d 100644 --- a/cmake/build_helpers.cmake +++ b/cmake/build_helpers.cmake @@ -531,6 +531,31 @@ function(downloadImHexPatternsFiles dest) endfunction() +# Compress debug info. See https://github.com/WerWolv/ImHex/issues/1714 for relevant problem +macro(setupDebugCompressionFlag) + include(CheckCXXCompilerFlag) + include(CheckLinkerFlag) + + check_cxx_compiler_flag(-gz=zstd ZSTD_AVAILABLE_COMPILER) + check_linker_flag(CXX -gz=zstd ZSTD_AVAILABLE_LINKER) + check_cxx_compiler_flag(-gz COMPRESS_AVAILABLE_COMPILER) + check_linker_flag(CXX -gz COMPRESS_AVAILABLE_LINKER) + + if (NOT DEBUG_COMPRESSION_FLAG) # Cache variable + if (ZSTD_AVAILABLE_COMPILER AND ZSTD_AVAILABLE_LINKER) + message("Using Zstd compression for debug info because both compiler and linker support it") + set(DEBUG_COMPRESSION_FLAG "-gz=zstd" CACHE STRING "Cache to use for debug info compression") + elseif (COMPRESS_AVAILABLE_COMPILER AND COMPRESS_AVAILABLE_LINKER) + message("Using default compression for debug info because both compiler and linker support it") + set(DEBUG_COMPRESSION_FLAG "-gz" CACHE STRING "Cache to use for debug info compression") + else() + message("No compression available for debug info") + endif() + endif() + + set(IMHEX_COMMON_FLAGS "${IMHEX_COMMON_FLAGS} ${DEBUG_COMPRESSION_FLAG}") +endmacro() + macro(setupCompilerFlags target) # IMHEX_COMMON_FLAGS: flags common for C, C++, Objective C, etc.. compilers @@ -566,6 +591,10 @@ macro(setupCompilerFlags target) set(IMHEX_C_CXX_FLAGS "${IMHEX_C_CXX_FLAGS} -pthread -Wno-dollar-in-identifier-extension -Wno-pthreads-mem-growth") endif () + if (IMHEX_COMPRESS_DEBUG_INFO) + setupDebugCompressionFlag() + endif() + # Set actual CMake flags set_target_properties(${target} PROPERTIES COMPILE_FLAGS "${IMHEX_COMMON_FLAGS} ${IMHEX_C_CXX_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${IMHEX_COMMON_FLAGS} ${IMHEX_C_CXX_FLAGS}") diff --git a/dist/web/Dockerfile b/dist/web/Dockerfile index 9306b0009..a8198a23d 100644 --- a/dist/web/Dockerfile +++ b/dist/web/Dockerfile @@ -59,6 +59,7 @@ cmake /imhex -DIMHEX_OFFLINE_BUILD=ON \ -DIMHEX_STATIC_LINK_PLUGINS=ON \ -DIMHEX_EXCLUDE_PLUGINS="script_loader" \ + -DIMHEX_COMPRESS_DEBUG_INFO=OFF \ -DNATIVE_CMAKE_C_COMPILER=gcc \ -DNATIVE_CMAKE_CXX_COMPILER=g++ \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \