Rust在macosM系列芯片上的交叉编译

460 阅读1分钟

x86_64-unknown-linux-musl & aarch64-unknown-linux-musl

使用filosottile/musl-cross/musl-cross

github.com/FiloSottile…

brew install filosottile/musl-cross/musl-cross

cargo build --release --target x86_64-unknown-linux-musl

cargo build --release --target aarch64-unknown-linux-musl

arm-unknown-linux-musleabihf & armv7-unknown-linux-musleabihf

使用 homebrew 安装llvm (LLVM Clang 不是 Apple Clang)

brew install llvm

配置环境

export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
export TARGET_CC=$(which clang)

安装 Linker

brew install arm-linux-gnueabihf-binutils

Build

cargo build --release --target arm-unknown-linux-musleabihf

cargo build --release --target armv7-unknown-linux-musleabihf

最终汇总成一个脚本

#!/bin/bash

# 设置目标架构
TARGETS=(
    "x86_64-unknown-linux-musl"
    "aarch64-unknown-linux-musl"
    "arm-unknown-linux-musleabihf"
    "armv7-unknown-linux-musleabihf"
)

# 创建以当前日期命名的输出目录
CURRENT_DATE=$(date +"%Y-%m-%d_%H-%M-%S")
OUTPUT_DIR="release_builds_$CURRENT_DATE"
mkdir -p $OUTPUT_DIR

# 安装必要的工具
brew install filosottile/musl-cross/musl-cross
brew install llvm
brew install arm-linux-gnueabihf-binutils

# 设置环境变量
export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
export TARGET_CC=$(which clang)

# 编译并复制每个目标
for TARGET in "${TARGETS[@]}"
do
    echo "正在为 $TARGET 编译..."
    cargo build --release --target $TARGET

    if [ $? -eq 0 ]; then
        echo "编译成功,正在复制文件..."
        TARGET_DIR="$OUTPUT_DIR/$TARGET"
        mkdir -p $TARGET_DIR
        cp target/$TARGET/release/项目名 $TARGET_DIR/
        echo "已复制项目名到 $TARGET_DIR"
    else
        echo "编译 $TARGET 失败"
    fi
done

echo "所有目标编译完成"

别忘了编辑脚本权限

chmod +x make_release.sh