Add an option to optimize for rav1e's size (#3007)
The default release profile is actually debug with incremental, cf
https://github.com/xiph/rav1e/blob/564ae3b0007ae2b06893fd7166bf88c5a84c5b63/Cargo.toml#L203-L204
- use that option in the CI. Locally, rav1e's built goes from 846M
to 268M
- share Rust's cache between more configs because the compile
flags do not impact it
- add the corrosion folder to the cache
diff --git a/.github/actions/cache/action.yml b/.github/actions/cache/action.yml
index 3acd163..1c1635a 100644
--- a/.github/actions/cache/action.yml
+++ b/.github/actions/cache/action.yml
@@ -56,10 +56,8 @@
path: |
~/.cargo
build/cargo
- key: ${{ env.CARGO_CACHE_KEY }}-${{ github.run_id }}
- restore-keys: ${{ env.CARGO_CACHE_KEY }}
- env:
- CARGO_CACHE_KEY: ${{ env.CARGO_KEY }}-${{ runner.os }}-${{ runner.arch }}-${{ inputs.extra-key }}
+ corrosion
+ key: ${{ env.CARGO_KEY }}-${{ runner.os }}-${{ runner.arch }}
- name: Cache external dependencies in ext
id: cache-ext
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
diff --git a/.github/workflows/ci-disable-gtest.yml b/.github/workflows/ci-disable-gtest.yml
index 41d18e8..70e9e89 100644
--- a/.github/workflows/ci-disable-gtest.yml
+++ b/.github/workflows/ci-disable-gtest.yml
@@ -51,6 +51,7 @@
-DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
-DAVIF_CODEC_AOM=LOCAL -DAVIF_CODEC_DAV1D=LOCAL
-DAVIF_CODEC_RAV1E=LOCAL -DAVIF_CODEC_SVT=LOCAL
+ -DAVIF_OPTIMIZE_RAV1E_FOR_SIZE=ON
-DAVIF_LIBYUV=LOCAL -DAVIF_LIBSHARPYUV=LOCAL
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=OFF
diff --git a/.github/workflows/ci-unix-static.yml b/.github/workflows/ci-unix-static.yml
index 5e38f93..abef639 100644
--- a/.github/workflows/ci-unix-static.yml
+++ b/.github/workflows/ci-unix-static.yml
@@ -55,6 +55,7 @@
-DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DBUILD_SHARED_LIBS=OFF
-DAVIF_CODEC_AOM=LOCAL -DAVIF_CODEC_DAV1D=LOCAL
-DAVIF_CODEC_RAV1E=LOCAL -DAVIF_CODEC_SVT=LOCAL
+ -DAVIF_OPTIMIZE_RAV1E_FOR_SIZE=ON
-DAVIF_CODEC_LIBGAV1=LOCAL
-DAVIF_LIBSHARPYUV=LOCAL -DAVIF_LIBXML2=LOCAL -DAVIF_LIBYUV=LOCAL
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml
index 1705ee3..5c3f2f7 100644
--- a/.github/workflows/ci-windows.yml
+++ b/.github/workflows/ci-windows.yml
@@ -55,7 +55,7 @@
-DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
-DAVIF_CODEC_AOM=LOCAL -DAVIF_CODEC_DAV1D=LOCAL
-DAVIF_CODEC_RAV1E=LOCAL -DAVIF_CODEC_SVT=LOCAL
- -DAVIF_CODEC_LIBGAV1=LOCAL
+ -DAVIF_CODEC_LIBGAV1=LOCAL -DAVIF_OPTIMIZE_RAV1E_FOR_SIZE=ON
-DAVIF_JPEG=LOCAL -DAVIF_LIBSHARPYUV=LOCAL -DAVIF_LIBXML2=LOCAL
-DAVIF_LIBYUV=LOCAL -DAVIF_ZLIBPNG=LOCAL
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9e20b5e..15f3348 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -98,6 +98,7 @@
set_codec_option(DAV1D "dav1d" "decoding" "")
set_codec_option(LIBGAV1 "libgav1" "decoding" "")
set_codec_option(RAV1E "rav1e" "encoding" "")
+option(AVIF_OPTIMIZE_RAV1E_FOR_SIZE "Overrides rav1e's release setting to optimize for size" OFF)
set_codec_option(SVT "SVT-AV1" "encoding" "")
set_codec_option(AVM "AVM (AV2)" "encoding/decoding" " (EXPERIMENTAL)")
diff --git a/cmake/Modules/LocalRav1e.cmake b/cmake/Modules/LocalRav1e.cmake
index 2bc6b24..554de78 100644
--- a/cmake/Modules/LocalRav1e.cmake
+++ b/cmake/Modules/LocalRav1e.cmake
@@ -74,6 +74,11 @@
${CMAKE_CURRENT_BINARY_DIR}/ext/rav1e/usr/lib/${CMAKE_STATIC_LIBRARY_PREFIX}rav1e${CMAKE_STATIC_LIBRARY_SUFFIX}
)
set(RAV1E_ENVVARS)
+ if(AVIF_OPTIMIZE_RAV1E_FOR_SIZE)
+ set(RAV1E_ENVVARS "CARGO_PROFILE_RELEASE_DEBUG=0" "CARGO_PROFILE_RELEASE_STRIP=true"
+ "CARGO_PROFILE_PROFILE_RELEASE_OPT_LEVEL=\"s\"" "CARGO_PROFILE_RELEASE_INCREMENTAL=false"
+ )
+ endif()
if(CMAKE_C_IMPLICIT_LINK_DIRECTORIES MATCHES "alpine-linux-musl")
list(APPEND RAV1E_ENVVARS "RUSTFLAGS=-C link-args=-Wl,-z,stack-size=2097152 -C target-feature=-crt-static")
endif()