結構以前からあるツールのようですが、DockerあるいはオープンソースのコンテナであるPodmanなどのコンテナ使ってコンテナ内にターゲットのイメージを持ってきてその中でコンパイルしてくれるツールです
<環境>
・コンパイル環境:M1 Mac
・ターゲット:Raspberry pi zero W
Dockerの場合にはroot権限でなくユーザ権限でないと使えないというし、Padmanならば最初からユーザー権限ということでPodmanをインストして使ってみました
https://podman.io/docs/installation
Podmanを使うかDockerを使うかは~/.zshrcに環境変数の指定が必要で、
https://docs.rs/crate/cross/latest
export CROSS_CONTAINER_ENGINE=podman
を指定します
Podmanを起動状態で、
% CROSS_CONTAINER_OPTS="--platform linux/amd64" cross build --target arm-unknown-linux-gnueabihf
を実行すると、imageをダウンロードしてその上でコンパイルします
% CROSS_CONTAINER_OPTS="--platform linux/amd64" cross build --target arm-unknown-linux-gnueabihf
Trying to pull ghcr.io/cross-rs/arm-unknown-linux-gnueabihf:0.2.5...
Getting image source signatures
Copying blob sha256:2c7e00e2a4a7dccfad0ec62cc82e2d3c05f3a4f1d4d0acc1733e78def0556d1e
~~~途中省略~~~
Writing manifest to image destination
Compiling hello v0.1.0 (/project)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 2.45s
このようにコンパイルできて、定番のHello Worldソースからビルドした実行ファイルをラズパイ zero Wに転送すると実行できました
なぜCROSS_CONTAINER_OPTS="--platform linux/amd64"必要なのかは、
https://github.com/cross-rs/cross/issues/1214
からの情報ですがM1上のクロスだよと指定が必要のようで、指定しないとtargetで使うimage見つからないよと言われます
admin