diff --git a/CMakeLists.txt b/CMakeLists.txt index bf194358..8f01ecaa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -159,9 +159,18 @@ else() add_definitions(-fno-tree-vectorize) endif() +# compile a target with -O2 in Debug mode +function(upx_compile_target_debug_with_O2 t) + if(MSVC) + # msvc uses some Debug compile options like -RTC1 that are incompatible with -O2 + else() + target_compile_options(${t} PRIVATE $<$:-O2>) + endif() +endfunction() + function(upx_sanitize_target t) if(NOT UPX_CONFIG_DISABLE_SANITIZE AND NOT MSVC) - if(CMAKE_C_PLATFORM_ID MATCHES "^MinGW") + if(CMAKE_C_PLATFORM_ID MATCHES "^MinGW" OR MINGW OR CYGWIN) # avoid link errors with current MinGW-w64 versions # see https://www.mingw-w64.org/contribute/#sanitizers-asan-tsan-usan else() @@ -175,6 +184,7 @@ endfunction() set(t upx_vendor_ucl) target_include_directories(${t} PRIVATE vendor/ucl/include vendor/ucl) +upx_compile_target_debug_with_O2(${t}) upx_sanitize_target(${t}) if(MSVC) target_compile_options(${t} PRIVATE -J -W4 ${warn_WX}) @@ -183,6 +193,7 @@ else() endif() set(t upx_vendor_zlib) +upx_compile_target_debug_with_O2(${t}) upx_sanitize_target(${t}) if(MSVC) target_compile_options(${t} PRIVATE -DHAVE_STDARG_H -DHAVE_VSNPRINTF -J -W3 ${warn_WX}) @@ -194,6 +205,7 @@ endif() if(NOT UPX_CONFIG_DISABLE_ZSTD) set(t upx_vendor_zstd) +upx_compile_target_debug_with_O2(${t}) upx_sanitize_target(${t}) target_compile_options(${t} PRIVATE -DDYNAMIC_BMI2=0 -DZSTD_DISABLE_ASM) if(MSVC) @@ -212,6 +224,7 @@ if(GITREV_SHORT) target_compile_definitions(${t} PRIVATE UPX_VERSION_GIT_DESCRIBE="${GIT_DESCRIBE}") endif() endif() +#upx_compile_target_debug_with_O2(${t}) upx_sanitize_target(${t}) if(MSVC) target_compile_options(${t} PRIVATE -Zc:__cplusplus -EHsc -J -W4 ${warn_WX}) diff --git a/README.SRC b/README.SRC index 31875007..4a5ff4ad 100644 --- a/README.SRC +++ b/README.SRC @@ -44,8 +44,8 @@ Short overview Tools needed to build/modify the UPX sources -------------------------------------------- - - A C++ compiler that supports C++ 17: clang 5.0, gcc 8.0 or msvc 2019 16.11 - (older or other compilers may work, use at your own risk) + - A C++ compiler that supports C++ 17: clang-5, gcc-8 or msvc-2019 16.11 + (older or other compilers may work but are unsupported, use at your own risk) - GNU make