テストケースなどを実行するために、ビルドルート環境の一部をホスト システム (/usr/bin/gcc など) 用にコンパイルしたいと考えています。
/usr で external_toolchain を指定しようとしましたが、失敗します。誰かがこのようなことをすることができましたか?
buildroot のマニュアルには、rootfs にインポートできないため、これはサポートされていないと書かれています。ただし、テストケースの場合、rootfs は必要ありません。
テストケースなどを実行するために、ビルドルート環境の一部をホスト システム (/usr/bin/gcc など) 用にコンパイルしたいと考えています。
/usr で external_toolchain を指定しようとしましたが、失敗します。誰かがこのようなことをすることができましたか?
buildroot のマニュアルには、rootfs にインポートできないため、これはサポートされていないと書かれています。ただし、テストケースの場合、rootfs は必要ありません。
ええ、残念ながら、これを行うことはできません。Buildroot で有用であるためには、ツールチェーンは「純粋な」ツールチェーンでなければなりません。つまり、C ライブラリのバイナリとヘッダーのみを含んでいる必要があります。あなたの /usr は、ホスト マシンから膨大な量のライブラリで散らかっています。Buildroot はツールチェーン sysroot (あなたの場合は /usr) の完全なコピーを作成するため、非常に多くのものをコピーします。
したがって、これは私たちがサポートするものではありませんし、サポートするつもりもありません。x86 または x86_64 クロス コンパイラを使用してプログラムをビルドし、Buildroot で最小限の Linux システムを生成し、開発用 PC で直接 chroot することもできます。
現在のドキュメントでも、これが不可能であることを説明しているようですhttps://github.com/buildroot/buildroot/blob/2018.08/docs/manual/configure.txt#L198
また、ターゲット用のソフトウェアをビルドするためのツールチェーンとして、ディストリビューション ツールチェーン (つまり、ディストリビューションによってインストールされた gcc/binutils/C ライブラリ) を使用することもサポートしていません。これは、配布ツールチェーンが「純粋な」ツールチェーン (つまり、C/C++ ライブラリのみ) ではないため、Buildroot ビルド環境に適切にインポートできないためです。したがって、x86 または x86_64 ターゲット用のシステムを構築している場合でも、Buildroot または crosstool-NG を使用してクロス コンパイル ツールチェーンを生成する必要があります。
さらに、現在の Buildroot は、ツールチェーン パスがグローバル ツールチェーンであるかどうかをチェックするようであり、https://github.com/buildroot/buildroot/blob/2018.08/toolchain/helpers.mk#L395である場合は自動的に救済されます。
with_sysroot=`$${__CROSS_CC} -v 2>&1 |sed -r -e '/.* --with-sysroot=([^[:space:]]+)[[:space:]].*/!d; s//\1/'`; \
if test "$${with_sysroot}" = "/" ; then \
echo "Distribution toolchains are unsuitable for use by Buildroot," ; \
echo "as they were configured in a way that makes them non-relocatable,"; \
echo "and contain a lot of pre-built libraries that would conflict with"; \
echo "the ones Buildroot wants to build."; \
exit 1; \
fi; \