From f6b2590d36855a5d60a82231afcbc88139422eb6 Mon Sep 17 00:00:00 2001 From: Vibhoothi Date: Thu, 9 Nov 2023 16:27:53 -0800 Subject: [PATCH 1/3] Docker: Update Rust version to 1.73.0 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e6a5678..db7ac22 100644 --- a/Dockerfile +++ b/Dockerfile @@ -112,7 +112,7 @@ ENV \ # install rust RUN \ ARCH=`uname -m` && \ - RUST_VERSION=1.64.0 && \ + RUST_VERSION=1.73.0 && \ curl -sSf --output /tmp/rustup-init https://static.rust-lang.org/rustup/archive/1.25.0/${ARCH}-unknown-linux-gnu/rustup-init && \ chmod +x /tmp/rustup-init && \ /tmp/rustup-init -y --no-modify-path --default-toolchain ${RUST_VERSION} && \ From cf57779b11c51cf40464a73fda37901f511ba9ff Mon Sep 17 00:00:00 2001 From: Vibhoothi Date: Thu, 9 Nov 2023 16:28:54 -0800 Subject: [PATCH 2/3] Docker: Install aarch64 cross-compile rust toolchain --- Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Dockerfile b/Dockerfile index db7ac22..4a26768 100644 --- a/Dockerfile +++ b/Dockerfile @@ -118,6 +118,10 @@ RUN \ /tmp/rustup-init -y --no-modify-path --default-toolchain ${RUST_VERSION} && \ rm -vf /tmp/rustup-init +# install cross-compile target (aarch64) for rust-based library +RUN \ + /usr/local/cargo/bin/rustup target add aarch64-unknown-linux-gnu + # install node 18.x RUN \ NODE_VERSION=18.6.0 && \ From 388da26a5b0a368b88e8f251f68a6b8d1f8802bb Mon Sep 17 00:00:00 2001 From: Vibhoothi Date: Thu, 9 Nov 2023 16:30:32 -0800 Subject: [PATCH 3/3] build: Enable aarch64 support for rav1e Tested with VLC12 and ARM1 runner --- build_codec.sh | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/build_codec.sh b/build_codec.sh index af725fc..afb1fbd 100755 --- a/build_codec.sh +++ b/build_codec.sh @@ -119,7 +119,22 @@ case "${CODEC}" in rav1e) cd ${CODECS_SRC_DIR}/rav1e - cargo build --release ${BUILD_OPTIONS} + if [[ "${ARCH}" == "aarch64" ]]; then + ARCH_OPTIONS="--target aarch64-unknown-linux-gnu" + # Rust need aarch64 as environment variable or as a config inside cargo + # folder. So we chose latter for maintainability. + mkdir -p .cargo + echo -e "[target.aarch64-unknown-linux-gnu]\nlinker = \"aarch64-linux-gnu-gcc\"\nar = \"aarch64-linux-gnu-gcc\"" > .cargo/config + mkdir -p target/release + else + ARCH_OPTIONS="" + fi + cargo build --release ${ARCH_OPTIONS} ${BUILD_OPTIONS} + # Rust tries to create a target arch folder, it messes up lot more things, + # so easy is faking the path + if [[ "${ARCH}" == "aarch64" ]]; then + cp target/aarch64-unknown-linux-gnu/release/rav1e target/release/rav1e + fi ;; svt-av1*)