这个文章和之前的主要不同在于,没有使用系统的 gmp, mpfr, mpc, cloog等,而是使用源代码编译。
1.编译 binutils:
把 binutls 代码解压到 src 目录下, 同时在 build 目录下建立 binutil 目录。
在 build/binutils目录下执行:
../../src/binutils-2.25/configure --prefix=/home/charles/code/build_toolchain/toolchain --with-sysroot=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot --target=arm-linux-gnueabi
make -j10 -i -k
make install
2.安装内核头文件
把内核代码解压到 src 目录下,然后进入到内核代码目录,执行:
make mrproper
make ARCH=arm vexpress_defconfig
make ARCH=arm headers_check
make ARCH=arm INSTALL_HDR_PATH=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot/usr headers_install
find ../../toolchain/arm-linux-gnueabi/sysroot/usr/include/ -name ".install" -or -name "..install.cmd" | xargs rm -fv
还需要把这个库的位置加到 LD_LIBRARY_PATH里面。
gmp-6.0.0 mpc-1.0.2 mpfr-3.1.2 ppl-1.1 cloog-0.18.1
执行:
./configure --prefix=/home/charles/code/build_toolchain/toolchain
make
make install
4. 创建 bootstrap GCC
建立目录 build/gcc_first,并进入到这个目录,执行:
../../src/gcc-4.8.2/configure --build=i686-pc-linux-gnu --target=arm-linux-gnueabi --prefix=/home/charles/code/build_toolchain/toolchain --with-sysroot=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot --with-newlib --without-headers --disable-threads --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-nls --disable-shared --disable-decimal-float --with-gnu-ld --with-gnu-as --with-arch=armv7-a --with-mode=arm --with-float=softfp --with-fpu=vfpv3 --enable-languages=c --with-gmp=/home/charles/code/build_toolchain/toolchain --with-mpfr=/home/charles/code/build_toolchain/toolchain --with-ppl=/home/charles/code/build_toolchain/toolchain --with-cloog=/home/charles/code/build_toolchain/toolchain
make all-gcc -j10 -i -k
make install-gcc
make all-target-libgcc
make install-target-libgcc
先执行:
export PATH=$PATH:/home/charles/code/build_toolchain/toolchain/bin
建立目录 build/glibc, 进入这个目录,执行:
CC=arm-linux-gnueabi-gcc AR=arm-linux-gnueabi-ar RANLIB=arm-linux-gnueabi-ranlib ../../src/glibc-2.21/configure --build=i686-pc-linux-gnu --host=arm-linux-gnueabi --prefix=/usr --with-headers=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot/usr/include --enable-add-ons --with-mode=arm
make install install_root=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot
如果报类似下面的错误:
No rule to make target `/root/glibc-2.14-build/dlfcn/libdl.so.2'
make install install_root=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot
6.编译最终的gcc:
建立目录 build/gcc_final, 执行:
../../src/gcc-4.8.2/configure --build=i686-pc-linux-gnu --target=arm-linux-gnueabi --prefix=/home/charles/code/build_toolchain/toolchain --with-sysroot=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot --disable-libmudflap --disable-libssp --disable-nls --disable-libstdcxx-pch --with-interwork --with-mode=arm --with-fpu=vfpv3 --with-arch=armv7-a --with-float=softfp --enable-libgomp --enable-poison-system-directories --enable-symvers=gnu --enable-long-long --enable-threads --enable-languages=c,c++ --enable-shared --enable-lto --enable-__cxa_atexit --with-gnu-as --with-gnu-ld --enable-__cxa_atexit --with-gmp=/home/charles/code/build_toolchain/toolchain --with-mpfr=/home/charles/code/build_toolchain/toolchain --with-ppl=/home/charles/code/build_toolchain/toolchain --with-cloog=/home/charles/code/build_toolchain/toolchain
make all
make install
$ ./bin/arm-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=./bin/arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/charles/code/build_toolchain/toolchain/libexec/gcc/arm-linux-gnueabi/4.8.2/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../../src/gcc-4.8.2/configure --build=i686-pc-linux-gnu --target=arm-linux-gnueabi --prefix=/home/charles/code/build_toolchain/toolchain --with-sysroot=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot --disable-libmudflap --disable-libssp --disable-nls --disable-libstdcxx-pch --with-interwork --with-mode=arm --with-fpu=vfpv3 --with-arch=armv7-a --with-float=softfp --enable-libgomp --enable-poison-system-directories --enable-symvers=gnu --enable-long-long --enable-threads --enable-languages=c,c++ --enable-shared --enable-lto --enable-__cxa_atexit --with-gnu-as --with-gnu-ld --enable-__cxa_atexit --with-gmp=/home/charles/code/build_toolchain/toolchain --with-mpfr=/home/charles/code/build_toolchain/toolchain --with-ppl=/home/charles/code/build_toolchain/toolchain --with-cloog=/home/charles/code/build_toolchain/toolchain
Thread model: posix
gcc version 4.8.2 (GCC)
P. S.
1) 刚开始,用的 gcc 版本是 4.9.2, 在第4步的时候,出现类似 “ -meabi=5 not found ”的错误,始终没有找到解决方法,最后只好改用4.8.2的版本。
2) 这几个 gmp-6.0.0 mpc-1.0.2 mpfr-3.1.2 ppl-1.1 cloog-0.18.1 模块的动态库,只有使用
export LD_LIBRARY_PATH=/home/charles/code/build_toolchain/toolchain/lib
才会用到,否则还是用的系统的。
3) 可以使用gcc代码里的脚本 ./contrib/download_prerequisites 自动下载上面的几个模块,也可以到各自的官方网站上去下载。
4): ppl 代码: http://bugseng.com/products/ppl/download