📝

cargo-zigbuildメモ [blessed.rsシリーズ6]

2024/05/10に公開

概要

https://blessed.rs/crates

こちらのリストにあるものを見て書いたメモの共有です。

内容はまとめておらず、順番もぐちゃぐちゃ。あくまでメモになります。

また、網羅的にメモしているわけではなく、自分が必要だと思ったもののみメモしているため、内容が偏っているかもしれません。

今回はcargo-zigbuildについてです。

cargo-zigbuildとは

リンカとしてzigを使用してクロスコンパイルを行うツール

install

https://github.com/rust-cross/cargo-zigbuild?tab=readme-ov-file#installation

https://github.com/rust-cross/cargo-zigbuild?tab=readme-ov-file#usage

以下でinstall

$ cargo install cargo-zigbuild

また、zig自体のinstallも必要で、色々な方法があるようだが(上のリンク参照)、以下でinstallすることができる

$ pip3 install ziglang

使用方法

https://github.com/rust-cross/cargo-zigbuild?tab=readme-ov-file#usage

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はビルドを行うことはできるが、実行やテストを行うことはできない。

参考

Discussion