diff --git a/build/build-images.sh b/build/build-images.sh index 106a9b6e..dc9efeab 100755 --- a/build/build-images.sh +++ b/build/build-images.sh @@ -19,6 +19,23 @@ ARCH_MAP=( build_arch() { local rust_target="$1" + case "${CHINAMIRRO:-}" in + 1|true|TRUE|yes|YES|on|ON) + local cross_build_opts="${CROSS_BUILD_OPTS:+$CROSS_BUILD_OPTS }--build-arg CHINAMIRRO=1" + echo "=== China mirror acceleration: enabled (Tsinghua) ===" + echo "=== Building: $rust_target (via cross with custom Dockerfile) ===" + env \ + CROSS_BUILD_OPTS="$cross_build_opts" \ + CARGO_SOURCE_CRATES_IO_REPLACE_WITH=tuna \ + CARGO_SOURCE_TUNA_REGISTRY=sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/ \ + CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse \ + RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup \ + RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup \ + cross build --release --target "$rust_target" + return + ;; + esac + echo "=== Building: $rust_target (via cross with custom Dockerfile) ===" cross build --release --target "$rust_target" } @@ -49,6 +66,7 @@ case "${1:-all}" in echo "Examples:" echo " $0 # Build all" echo " $0 x86_64 # Build x86_64 only" + echo " CHINAMIRRO=1 $0 arm64 # Build with Tsinghua mirrors" exit 0 ;; *) diff --git a/build/cross/Dockerfile.arm64 b/build/cross/Dockerfile.arm64 index e67d71dc..699f96f1 100644 --- a/build/cross/Dockerfile.arm64 +++ b/build/cross/Dockerfile.arm64 @@ -6,16 +6,36 @@ FROM debian:11 # Linux headers used by v4l2r bindgen ARG LINUX_HEADERS_VERSION=6.6 ARG LINUX_HEADERS_SHA256= +ARG CHINAMIRRO=0 -# Set Rustup mirrors (Aliyun) -#ENV RUSTUP_UPDATE_ROOT=https://mirrors.aliyun.com/rustup/rustup \ -# RUSTUP_DIST_SERVER=https://mirrors.aliyun.com/rustup +# Optionally use Tsinghua mirrors for builds in China. +RUN if [ "$CHINAMIRRO" = "1" ]; then \ + sed -i \ + -e 's|http://deb.debian.org/debian|http://mirrors.tuna.tsinghua.edu.cn/debian|g' \ + -e 's|http://security.debian.org/debian-security|http://mirrors.tuna.tsinghua.edu.cn/debian-security|g' \ + /etc/apt/sources.list; \ + fi # Install Rust toolchain RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ ca-certificates \ + && if [ "$CHINAMIRRO" = "1" ]; then \ + export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup; \ + export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup; \ + fi \ && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable \ + && if [ "$CHINAMIRRO" = "1" ]; then \ + mkdir -p /root/.cargo; \ + printf '%s\n' \ + '[source.crates-io]' \ + "replace-with = 'tuna'" \ + '[source.tuna]' \ + 'registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"' \ + '[registries.tuna]' \ + 'index = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"' \ + > /root/.cargo/config.toml; \ + fi \ && rm -rf /var/lib/apt/lists/* ENV PATH="/root/.cargo/bin:${PATH}" @@ -327,7 +347,11 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \ && rm -rf /tmp/ffmpeg-build /tmp/aarch64-cross.txt /tmp/aarch64-pkg-config # Add Rust target -RUN rustup target add aarch64-unknown-linux-gnu +RUN if [ "$CHINAMIRRO" = "1" ]; then \ + export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup; \ + export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup; \ + fi \ + && rustup target add aarch64-unknown-linux-gnu # Configure environment for cross-compilation ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc \ diff --git a/build/cross/Dockerfile.armv7 b/build/cross/Dockerfile.armv7 index 4e8f4617..483013cf 100644 --- a/build/cross/Dockerfile.armv7 +++ b/build/cross/Dockerfile.armv7 @@ -6,16 +6,36 @@ FROM debian:11 # Linux headers used by v4l2r bindgen ARG LINUX_HEADERS_VERSION=6.6 ARG LINUX_HEADERS_SHA256= +ARG CHINAMIRRO=0 -# Set Rustup mirrors (Aliyun) -#ENV RUSTUP_UPDATE_ROOT=https://mirrors.aliyun.com/rustup/rustup \ -# RUSTUP_DIST_SERVER=https://mirrors.aliyun.com/rustup +# Optionally use Tsinghua mirrors for builds in China. +RUN if [ "$CHINAMIRRO" = "1" ]; then \ + sed -i \ + -e 's|http://deb.debian.org/debian|http://mirrors.tuna.tsinghua.edu.cn/debian|g' \ + -e 's|http://security.debian.org/debian-security|http://mirrors.tuna.tsinghua.edu.cn/debian-security|g' \ + /etc/apt/sources.list; \ + fi # Install Rust toolchain RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ ca-certificates \ + && if [ "$CHINAMIRRO" = "1" ]; then \ + export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup; \ + export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup; \ + fi \ && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable \ + && if [ "$CHINAMIRRO" = "1" ]; then \ + mkdir -p /root/.cargo; \ + printf '%s\n' \ + '[source.crates-io]' \ + "replace-with = 'tuna'" \ + '[source.tuna]' \ + 'registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"' \ + '[registries.tuna]' \ + 'index = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"' \ + > /root/.cargo/config.toml; \ + fi \ && rm -rf /var/lib/apt/lists/* ENV PATH="/root/.cargo/bin:${PATH}" @@ -316,7 +336,11 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \ && rm -rf /tmp/ffmpeg-build /tmp/armhf-cross.txt /tmp/armhf-pkg-config # Add Rust target -RUN rustup target add armv7-unknown-linux-gnueabihf +RUN if [ "$CHINAMIRRO" = "1" ]; then \ + export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup; \ + export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup; \ + fi \ + && rustup target add armv7-unknown-linux-gnueabihf # Configure environment for cross-compilation ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc \ diff --git a/build/cross/Dockerfile.x86_64 b/build/cross/Dockerfile.x86_64 index 46b15ac9..8241931f 100644 --- a/build/cross/Dockerfile.x86_64 +++ b/build/cross/Dockerfile.x86_64 @@ -6,16 +6,36 @@ FROM debian:11 # Linux headers used by v4l2r bindgen ARG LINUX_HEADERS_VERSION=6.6 ARG LINUX_HEADERS_SHA256= +ARG CHINAMIRRO=0 -# Set Rustup mirrors (Aliyun) -#ENV RUSTUP_UPDATE_ROOT=https://mirrors.aliyun.com/rustup/rustup \ -# RUSTUP_DIST_SERVER=https://mirrors.aliyun.com/rustup +# Optionally use Tsinghua mirrors for builds in China. +RUN if [ "$CHINAMIRRO" = "1" ]; then \ + sed -i \ + -e 's|http://deb.debian.org/debian|http://mirrors.tuna.tsinghua.edu.cn/debian|g' \ + -e 's|http://security.debian.org/debian-security|http://mirrors.tuna.tsinghua.edu.cn/debian-security|g' \ + /etc/apt/sources.list; \ + fi # Install Rust toolchain RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ ca-certificates \ + && if [ "$CHINAMIRRO" = "1" ]; then \ + export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup; \ + export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup; \ + fi \ && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable \ + && if [ "$CHINAMIRRO" = "1" ]; then \ + mkdir -p /root/.cargo; \ + printf '%s\n' \ + '[source.crates-io]' \ + "replace-with = 'tuna'" \ + '[source.tuna]' \ + 'registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"' \ + '[registries.tuna]' \ + 'index = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"' \ + > /root/.cargo/config.toml; \ + fi \ && rm -rf /var/lib/apt/lists/* ENV PATH="/root/.cargo/bin:${PATH}" @@ -221,7 +241,11 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \ && rm -rf /tmp/ffmpeg-build # Add Rust target -RUN rustup target add x86_64-unknown-linux-gnu +RUN if [ "$CHINAMIRRO" = "1" ]; then \ + export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup; \ + export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup; \ + fi \ + && rustup target add x86_64-unknown-linux-gnu # Configure environment for static linking ENV PKG_CONFIG_ALLOW_CROSS=1\