ようやくクロスコンパイラ 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
これで完成です。
