diff --git a/Dockerfile b/Dockerfile index 59b7c99..67ccc9b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,8 +24,8 @@ RUN apk add --no-cache \ sed \ coreutils -# Add Rust musl target -RUN rustup target add x86_64-unknown-linux-musl +# Install musl-dev for Rust musl targeting (Alpine handles this differently than rustup) +RUN apk add --no-cache musl-dev # Create non-root user for builds RUN adduser -D -s /bin/bash builder && \ @@ -34,9 +34,10 @@ RUN adduser -D -s /bin/bash builder && \ # Set working directory WORKDIR /workspace -# Set environment variables for static linking -ENV RUSTFLAGS="-C target-feature=+crt-static" -ENV CC_x86_64_unknown_linux_musl="musl-gcc" +# Set environment variables for musl static linking with Alpine's Rust +ENV RUSTFLAGS="-C target-feature=+crt-static -C linker=musl-gcc" +ENV CC="musl-gcc" +ENV TARGET_CC="musl-gcc" ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER="musl-gcc" # Default to builder user diff --git a/scripts/lib/components.sh b/scripts/lib/components.sh index 560bef5..98a2000 100644 --- a/scripts/lib/components.sh +++ b/scripts/lib/components.sh @@ -234,22 +234,42 @@ function components_build_component() { function components_setup_rust_env() { section_header "Setting Up Rust Environment" - # Ensure musl target is installed - if ! rustup target list --installed | grep -q "$RUST_TARGET"; then - log_info "Installing Rust target: ${RUST_TARGET}" - safe_execute rustup target add "$RUST_TARGET" + # Check if we have rustup (Ubuntu/GitHub Actions) or system Rust (Alpine container) + if command_exists "rustup"; then + log_info "Using rustup for Rust toolchain management" + + # Ensure musl target is installed + if ! rustup target list --installed | grep -q "$RUST_TARGET"; then + log_info "Installing Rust target: ${RUST_TARGET}" + safe_execute rustup target add "$RUST_TARGET" + else + log_info "Rust target already installed: ${RUST_TARGET}" + fi + + # Set environment variables for rustup + export RUSTFLAGS="-C target-feature=+crt-static" + export CC_x86_64_unknown_linux_musl="musl-gcc" + export CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER="musl-gcc" else - log_info "Rust target already installed: ${RUST_TARGET}" + log_info "Using system Rust (Alpine) with musl" + + # Verify musl-gcc is available + if ! command_exists "musl-gcc"; then + log_error "musl-gcc not found. Install with: apk add musl-dev" + return 1 + fi + + # Set environment variables for system Rust + export RUSTFLAGS="-C target-feature=+crt-static -C linker=musl-gcc" + export CC="musl-gcc" + export TARGET_CC="musl-gcc" + export CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER="musl-gcc" fi - # Set environment variables for static linking - export RUSTFLAGS="-C target-feature=+crt-static" - export CC_x86_64_unknown_linux_musl="musl-gcc" - export CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER="musl-gcc" - log_info "Rust environment configured for musl builds" log_info "RUST_TARGET: ${RUST_TARGET}" log_info "RUSTFLAGS: ${RUSTFLAGS}" + log_info "CC: ${CC:-system-default}" } # Build function for zinit (standard Rust build)