クロスコンパイラgccのビルド -成功編


ようやくクロスコンパイラ 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を準備

$ 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

これで完成です。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする