📝
cargo-zigbuildメモ [blessed.rsシリーズ6]
概要
こちらのリストにあるものを見て書いたメモの共有です。
内容はまとめておらず、順番もぐちゃぐちゃ。あくまでメモになります。
また、網羅的にメモしているわけではなく、自分が必要だと思ったもののみメモしているため、内容が偏っているかもしれません。
今回はcargo-zigbuildについてです。
cargo-zigbuildとは
リンカとしてzigを使用してクロスコンパイルを行うツール
install
以下でinstall
$ cargo install cargo-zigbuild
また、zig自体のinstallも必要で、色々な方法があるようだが(上のリンク参照)、以下でinstallすることができる
$ pip3 install ziglang
使用方法
targetを指定して以下のようにすることでビルドできる
cargo zigbuild --target aarch64-unknown-linux-gnu
targetのlistは以下で取得できる
$ rustc --print target-list
また以下のようにしてversionを指定することも可能
cargo zigbuild --target=x86_64-unknown-linux-gnu.2.17
crossとの違い
crossではDockerコンテナなどを介してクロスコンパイルを行う。
それに対して、cargo-zigbuildではコンテナなどを介さずに、Zigを使用してクロスコンパイルを行う。
そのため、cargo-zigbuildは依存するものが少なく、また軽量である。
一方、cargo-zigbuildはリンカやコンパイラの指定を--target
にあわせて行ってはくれるものの、それ以上のことは(簡単には)できない。
例えば、WindowsAPIを使用する場合、crossではcross build --target x86_64-pc-windows-gnu
とすればよいが、cargo zigbuild --target=x86_64-pc-windows-gnu
としてもビルドすることができない。
また、cargo-zigbuildはビルドを行うことはできるが、実行やテストを行うことはできない。
参考
- zig ccについて:https://andrewkelley.me/post/zig-cc-powerful-drop-in-replacement-gcc-clang.html
- 使用例1:https://naari.hatenablog.com/entry/2022/08/12/091404
- 使用例2:https://zenn.dev/skanehira/articles/2022-07-12-rust-rjo
- 使用例3:https://qiita.com/twrcd1227/items/a45eb0ba4853c5b41d8b#クロスコンパイラ
- Rustでバイナリを配布する場合のそれぞれの方法の利点や、cargo-zigbuildの強みについて:https://zenn.dev/coord_e/articles/portable-binary-in-rust
Discussion