From cb883f6df4701e1edbdce0110e7dce17dbf2d1fe Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Sat, 22 Mar 2025 17:08:47 +0100 Subject: [PATCH] build: add size-optimized release build --- .docker/build-linux.sh | 10 ++++++++++ .github/workflows/build.yml | 12 ++++++++++++ CMakeLists.txt | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/.docker/build-linux.sh b/.docker/build-linux.sh index 5e56804f..68623a75 100755 --- a/.docker/build-linux.sh +++ b/.docker/build-linux.sh @@ -121,6 +121,13 @@ case "-$BUILD_TYPE-" in CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_BUILD_TYPE=Release" CMAKE_ARGS="${CMAKE_ARGS} -DWITH_BENCHMARKS=1" ;; + *-relsize-*) + CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_BUILD_TYPE=MinSizeRel" + CMAKE_ARGS="${CMAKE_ARGS} -DWITH_BENCHMARKS=1" + export CFLAGS="-ffunction-sections -fdata-sections -fvisibility=hidden -fmerge-all-constants" + export CXXFLAGS="$CFLAGS" + export LDFLAGS="-Wl,--gc-sections" + ;; *-reldbg-*) CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_BUILD_TYPE=RelWithDebInfo" ;; @@ -296,7 +303,10 @@ else $RUN_TESTS fi + fi + # for release and resize builds, strip the binaries + if [[ "-$BUILD_TYPE-" =~ -(release|relsize)- ]]; then $BUILD_TOOL strip fi diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 197f28fe..aa7167e6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -332,6 +332,18 @@ jobs: - arch: arm64v8 dist: alpine build_type: clang-release-ninja-static + - arch: amd64 + dist: alpine + build_type: gcc-relsize-ninja-static + - arch: arm64v8 + dist: alpine + build_type: gcc-relsize-ninja-static + - arch: amd64 + dist: alpine + build_type: clang-relsize-ninja-static + - arch: arm64v8 + dist: alpine + build_type: clang-relsize-ninja-static - arch: amd64 dist: alpine build_type: clang-reldbg-stacktrace-ninja-static diff --git a/CMakeLists.txt b/CMakeLists.txt index 5803154a..09d2ed7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -920,7 +920,7 @@ add_custom_target( USES_TERMINAL) if(STATIC_BUILD_DO_NOT_USE OR APPLE) - if(CMAKE_BUILD_TYPE STREQUAL "Release") + if(CMAKE_BUILD_TYPE MATCHES "Release|MinSizeRel") foreach(tgt ${BINARY_TARGETS}) list(APPEND FILES_TO_STRIP $) endforeach()