ようやくクロスコンパイラ gccをmakeすることに成功しました。
JetsonTK1をターゲット想定なので、デフォルトで hard float を使用するようにしたかったので、その設定となるようにしています。
早速その手順をここに書いておきたいと思います。
makeinfoのバージョンが5以降だとエラーになるようなので、それ以前のものをインストールしておきます。
$ sudo apt-get install ncurses-dev gawk $ tar xvzf texinfo-4.13a.tar.gz $ cd texinfo-4.13a $ make $ make install
gccに必要な他のライブラリを用意しておきます。
binutils-2.23.2.tar.bz2 eglibc-2_13.tar.gz gmp-5.1.1.tar.bz2 mpc-0.8.2.tar.gz mpfr-3.1.2.tar.bz2
これらをとりあえず作業ディレクトリにダウンロードしておきます。
binutilsを準備
$ export CROSSTOOL=$HOME/cross-toolchains $ export TARGET=arm-linux-gnueabi $ export SYSROOT=$CROSSTOOL/$TARGET/sysroot $ cd cross $ tar xjf binutils-2.23.2.tar.bz2 $ mkdir -p binutils-2.23.2/build $ cd binutils-2.23.2/build $ ../configure --target=$TARGET --prefix=$CROSSTOOL --with-sysroot=$SYSROOT $ make -j3 && make install
gmpの準備
$ cd ../.. $ tar xjf gmp-5.1.1.tar.bz2 $ mkdir -p gmp-5.1.1/build $ cd gmp-5.1.1/build $ ../configure --prefix=$CROSSTOOL $ make -j3 && make install
mpfrの準備
$ cd ../.. $ tar xjf mpfr-3.1.2.tar.bz2 $ mkdir -p mpfr-3.1.2/build $ cd mpfr-3.1.2/build $ ../configure --prefix=$CROSSTOOL --with-gmp=$CROSSTOOL $ make -j3 && make install
mpcの準備
$ cd ../.. $ tar xzf mpc-0.8.2.tar.gz $ mkdir -p mpc-0.8.2/build $ cd mpc-0.8.2/build $ ../configure --prefix=$CROSSTOOL --with-gmp=$CROSSTOOL --with-mpfr=$CROSSTOOL $ make -j3 $ sudo make install
1st gccのmake
$ cd ../.. $ tar xjf gcc-4.8.2.tar.bz2 $ mkdir gcc-4.8.2/build1 $ cd gcc-4.8.2/build1 $ export CFLAGS_FP="--with-float=hard --with-fpu=vfp --with-arch=armv7-a" $ ../configure --target=$TARGET --prefix=$CROSSTOOL \ --without-headers \ --without-ppl \ --with-newlib \ --disable-decimal-float \ --disable-shared \ --disable-threads --disable-libssp \ --disable-libgomp --disable-libmudflap \ --disable-libquadmath --disable-libatomic \ --disable-sanitizer --disable-nls \ --disable-libstdc++-v3 \ --with-gmp=$CROSSTOOL \ --with-mpfr=$CROSSTOOL \ --with-mpc=$CROSSTOOL \ --enable-languages=c \ --with-mode=thumb \ $CFLAGS_FP $ make -j3 $ make install
2nd gccのための準備
1st gccが生成されている場所へパスを通しておきます。
$ export PATH=$PATH:$CROSSTOOL/bin
カーネルヘッダを準備します。
$ cd ../.. $ tar xjf linux-3.2.35.tar.bz2 $ cd linux-3.2.35 $ make mrproper $ make headers_install ARCH=arm CROSS_COMPILE=${TARGET}- INSTALL_HDR_PATH=$SYSROOT/usr
glibcのヘッダの準備です。
$ cd .. $ tar xzf eglibc-2_13.tar.gz $ cd eglibc-2_13 $ cp -r ports libc $ mkdir build $ cd build $ BUILD_CC=gcc CC=${TARGET}-gcc CXX=${TARGET}-g++ \ AR=${TARGET}-ar \ RANLIB=${TARGET}-ranlib \ ../libc/configure \ --prefix=/usr \ --with-headers=${SYSROOT}/usr/include \ --host=$TARGET \ --disable-profile \ --without-gd \ --without-cvs \ --enable-add-ons \ --with-mode=thumb \ $CFLAGS_FP $ make install-headers install_root=$SYSROOT install-bootstrap-headers=yes $ make csu/subdir_lib $ mkdir -p ${SYSROOT}/usr/lib $ cp csu/crt1.o csu/crti.o csu/crtn.o ${SYSROOT}/usr/lib $ ${TARGET}-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o ${SYSROOT}/usr/lib/libc.so $ ln -sv ${CROSSTOOL}/lib/gcc/${TARGET}/4.8.2/libgcc.a ${CROSSTOOL}/lib/gcc/${TARGET}/4.8.2/libgcc_eh.a
2nd gccのmake
$ cd ../.. $ mkdir gcc-4.8.2/build2 $ cd gcc-4.8.2/build2 $ ../configure \ --target=${TARGET} \ --prefix=${CROSSTOOL} \ --with-sysroot=${SYSROOT} \ --disable-libssp --disable-libgomp --disable-libmudflap \ --disable-shared \ --with-gmp=${CROSSTOOL} \ --with-mpfr=${CROSSTOOL} \ --with-mpc=${CROSSTOOL} \ --enable-languages=c \ --with-system-zlib \ --with-mode=thumb \ ${CFLAGS_FP} $ make -j3 all-gcc $ make install-gcc
これで作成したgccでglibcを作成することになります.
glibcのmake
$ cd ../.. $ rm -rf eglibc-2_13\build $ mkdir -p eglibc-2_13\build $ cd eglibc-2_13\build $ BUILD_CC=gcc \ CC=${TARGET}-gcc \ CXX=${TARGET}-g++ \ AR=${TARGET}-ar \ RANLIB=${TARGET}-ranlib \ ../libc/configure \ --prefix=/usr \ --with-headers=${SYSROOT}/usr/include \ --host=${TARGET} \ --disable-profile \ --without-gd \ --without-cvs \ --enable-add-ons \ --with-mode=thumb \ ${CFLAGS_FP} $ make -j3 $ make install install_root=$SYSROOT
3rd gccのmake
作成したglibcを参照するようなgccをmakeしていきます
$ cd ../.. $ mkdir -p gcc-4.8.2/build3 $ cd gcc-4.8.2/build3 $ ../configure \ --target=${TARGET} \ --prefix=${CROSSTOOL} \ --with-sysroot=${SYSROOT} \ --disable-libssp --disable-libgomp --disable-libmudflap \ --disable-libquadmath \ --with-gmp=${CROSSTOOL} \ --with-mpfr=${CROSSTOOL} \ --with-mpc=${CROSSTOOL} \ --enable-languages=c,c++ \ --with-system-zlib \ --enable-nls \ --enable-threads=posix \ --enable-multilib \ --enable-c99 \ --with-mode=thumb \ ${CFLAGS_FP} $ make -j3 $ make install
これで完成です。