TL;DR

コンパイラが動いている環境とは別のプラットフォーム向けに、実行ファイルを作ること。そのためのコンパイラをクロスコンパイラと呼ぶ。

なぜ必要か

Wikipedia によると、組み込みシステムのマイクロコントローラは必要最小限のメモリしか搭載していないことが多く、その上でコンパイラや開発環境を動かすのは現実的でない。また、1 つのビルド環境から複数の OS やアーキテクチャ向けにコンパイルできる。

仕組み

GNU autotools の用語では、コードを実際にコンパイルする場所をビルドプラットフォーム、コンパイルしたコードが実行される場所をホストプラットフォームと呼ぶ。

Rust では、rustup はツールチェインを入れたときにホストのプラットフォーム向けの標準ライブラリしか入れない。別のターゲット向けにビルドするには、rustup target add でそのターゲットの標準ライブラリを入れ、cargo build --target=<ターゲット> でビルドする。

例

Effective Rust 項目33 では、ライブラリが no_std 互換であることを確かめるために、thumbv6m-none-eabi のように std をサポートしないターゲットへクロスコンパイルするチェックを CI に足すことを勧めている。

注意点

rustup の rustup target add が入れるのは標準ライブラリだけである。クロスコンパイルには、特にリンカなどの他のツールも必要で、それらは自分で用意する。

関連

出典