FreeBSD で amd64 を TARGET=amd64 を使って i386 上でクロスコンパイル2017年11月04日 10時35分05秒

最近、FreeBSD 上のクロスコンパイルに関する文章が少ないので、実験結果をすこし残しておく。まだ、試行錯誤中なのでうまくいったのは確認できたが、最小ステップなのかまでは検証できていない。

今回は、FreeBSD 11.1-STABLE が母艦。11.1-RELEASE が出た後の、11-STABLE ブランチになる。i386 の機械で amd64 向けのバイナリを作る。TARGET の中で、amd64 を試す。

今回は以下の三手順で問題なく amd64 のカーネルを作れたのを確認できた。

% make xdev-build TARGET=amd64
% make kernel-toolchain TARGET=amd64
% make buildkernel TARGET=amd64
この後、i386 システムに amd64 のカーネルインストールをした。そちらは次に取り上げる。

/usr/src/Makefile を見ると xdev で始まるターゲットが幾つかある。十年前の自分の記録を見ても、そのときは使っていなかった。xdev ターゲットは、xdev-build と xdev-install を行うと書いてあるが、今回試した手順では、xdev-install は必要なかった。もしかしたら、xdev-build 自体もいらなかったのかも。

buildkernel は kernel-toolchain に明示的に依存されていないみたいで、これを別途で行わないと現在のシステムのものが使われてしまうようだ。これは、クロスコンパイルでなくても見うけられる動作。だた、同一アーキテクチャの場合は互換性が高い場合がほとんどなので、滅多にエラーになることはない。

前回次回