Autotoolsでのクロスコンパイルで悪戦苦闘したためメモ
例としてyoctoのi.MX6(imx6dlsabresd)ビルド環境を用いてAutotoolsを使ってクロスビルドする。
yoctoで作成したツールチェインをインストールしてビルドするのが正規の手順だが今回は理由あって環境変数等を設定して無理やりビルドを実行する。
環境変数の設定
SDKTARGETSYSROOT
必要ではないがsysrootのパスは繰り返し使用するため環境変数に設定しておく
$ export SDKTARGETSYSROOT=<yoctoパス>/build/tmp/sysroots/imx6sdsabresd
PATH
gcc等のツールチェインがある場所を追記する。
$ export PATH=<yoctoパス>/build/tmp/sysroots/x86_64-linux/usr/bin/arm-poky-linux-gnueabi:$PATH
ターゲットマシンではなくビルドするPC上で動作するコマンドであるため、SDKTARGETSYSROOT
に似ているが異なるので注意
pkg-config関係
$ export PKG_CONFIG_SYSROOT_DIR=$SDKTARGETSYSROOT
$ export PKG_CONFIG_PATH=$SDKTARGETSYSROOT/usr/lib/pkgconfig
PKG_CONFIG_SYSROOT_DIR
を設定するとpkg-config
の結果にそのパスが付加されてくるので場合によっては不要かも
ツールチェイン関係
$ export CC="arm-poky-linux-gnueabi-gcc -march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=$SDKTARGETSYSROOT"
$ export CXX="arm-poky-linux-gnueabi-g++ -march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=$SDKTARGETSYSROOT"
$ export CPP="arm-poky-linux-gnueabi-gcc -E -march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=$SDKTARGETSYSROOT"
$ export AS="arm-poky-linux-gnueabi-as "
$ export LD="arm-poky-linux-gnueabi-ld --sysroot=$SDKTARGETSYSROOT"
$ export GDB=arm-poky-linux-gnueabi-gdb
$ export STRIP=arm-poky-linux-gnueabi-strip
$ export RANLIB=arm-poky-linux-gnueabi-ranlib
$ export OBJCOPY=arm-poky-linux-gnueabi-objcopy
$ export OBJDUMP=arm-poky-linux-gnueabi-objdump
$ export AR=arm-poky-linux-gnueabi-ar
$ export NM=arm-poky-linux-gnueabi-nm
$ export M4=m4
$ export CROSS_COMPILE=arm-poky-linux-gnueabi-
ターゲットとなるマシンによってオプションは異なるが--sysroot=
は共通で必要になるはずである。
ビルド
$ ./configure --host=arm-poky-linux-gnueabi --build=x86_64-linux --with-libtool-sysroot=$SDKTARGETSYSROOT --prefix=$SDKTARGETSYSROOT/usr
$ make
--with-libtool-sysroot
のかわりに--with-sysroot
のこともあるので./configure --help
を要確認。