0. Make Workspace
# download source code packages #wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.25.0.tar.xz #wget http://mirrors.ustc.edu.cn/gnu/libtool/libtool-2.4.tar.xz wget http://ftpmirror.gnu.org/binutils/binutils-2.28.1.tar.xz wget https://ftp.gnu.org/gnu/gcc/gcc-5.5.0/gcc-5.5.0.tar.xz wget https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.10.107.tar.xz wget http://ftpmirror.gnu.org/glibc/glibc-2.18.tar.xz wget http://ftpmirror.gnu.org/mpfr/mpfr-3.1.5.tar.xz wget http://ftpmirror.gnu.org/gmp/gmp-6.1.1.tar.xz wget http://ftpmirror.gnu.org/mpc/mpc-1.0.3.tar.gz wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.12.2.tar.bz2 wget ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-0.18.1.tar.gz # create soft link for f in *.tar*; do tar xf $f; done cd gcc-5.5.0 #ln -s ../mpfr-3.1.5 mpfr #ln -s ../gmp-6.1.1 gmp #ln -s ../mpc-1.0.3 mpc #ln -s ../isl-0.12.2 isl #ln -s ../cloog-0.18.1 cloog cd .. # make target folder and add path environment sudo mkdir -p /opt/gcc export PATH=/opt/gcc/bin:$PATH
1. Binutils
mkdir build-binutils ../binutils-2.26.1/configure --prefix=/opt/gcc --target=arm-linux-gnueabi --sysconfdir=/opt/gcc/etc --localstatedir=/opt/gcc/var --disable-gtk-doc --disable-gtk-doc-html --disable-doc --disable-docs --disable-documentation --disable-debug --with-xmlto=no --with-fop=no --disable-nls --disable-dependency-tracking --disable-multilib --disable-werror --with-sysroot=/opt/gcc/arm-linux-gnueabi/sysroot --enable-poison-system-directories --without-debuginfod --disable-sim --disable-gdb make -j8 MAKEINFO=true make -j8 MAKEINFO=true install cd ..
2. Linux Kernel Headers
cd linux-3.10.107 make ARCH=arm INSTALL_HDR_PATH=/opt/gcc/arm-linux-gnueabi/sysroot/usr headers_install cd ..
3. Dependencies of GCC
3.1 build and install gmp
mkdir build-gmp cd build-gmp ../gmp-6.1.1/configure --prefix=/opt/gcc --host=arm-linux-gnueabi --sysconfdir=/opt/gcc/etc --localstatedir=/opt/gcc/var --enable-static --disable-shared make -j8 make install cd ..
3.2 build and install mpfr
mkdir build-mpfr cd build-mpfr ../mpfr-3.1.5/configure --prefix=/opt/gcc --sysconfdir=/opt/gcc/etc --localstatedir=/opt/gcc/var --enable-static --disable-shared --disable-dependency-tracking --with-gmp=/opt/gcc make -j8 make install cd ..
3.3 build and install mpc
mkdir build-mpc cd build-mpc ../mpc-1.0.3/configure --prefix=/opt/gcc --sysconfdir=/opt/gcc/etc --localstatedir=/opt/gcc/var --enable-static --disable-shared --disable-dependency-tracking --with-gmp=/opt/gcc make -j8 make install cd ..
4. C/C++ Compilers
mkdir -p build-gcc cd build-gcc ../gcc-5.5.0/configure --prefix=/opt/gcc --with-glibc-version=2.18 --sysconfdir=/opt/gcc/etc --localstatedir=/opt/gcc/var --enable-shared --enable-static --disable-gtk-doc --disable-gtk-doc-html --disable-doc --disable-docs --disable-documentation --disable-debug --with-xmlto=no --with-fop=no --target=arm-linux-gnueabi --with-sysroot=/opt/gcc/arm-linux-gnueabi/sysroot --with-build-time-tools=/opt/gcc/arm-linux-gnueabi/bin --enable-__cxa_atexit --with-gnu-ld --disable-libssp --disable-multilib --disable-decimal-float --with-gmp=/opt/gcc --with-mpc=/opt/gcc --with-mpfr=/opt/gcc --with-pkgversion='Tinyboard' --with-bugurl="http://bugs.buildroot.net/" --without-zstd --disable-libquadmath --disable-libquadmath-support --enable-tls --enable-threads --without-isl --without-cloog --enable-languages=c,c++ --without-headers --disable-libgomp make -j8 gcc_cv_libc_provides_ssp=yes all-gcc make -j8 install-gcc cd ..
5. Standard C Library Headers and Startup Files
mkdir -p build-glibc
vim glibc-2.18/configure
# modify line 4475: 3.79* | 3.[89]* | 4.[0-9])
vim glibc-2.18/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
#===============================================================
@@ -27,7 +27,8 @@
#define __libc_fatal(x) {/*write(STDERR_FILENO, x, strlen(x));*/ abort();}
static void *libgcc_s_handle;
-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
+static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
+ __attribute_used__;
static _Unwind_Reason_Code (*libgcc_s_personality)
(_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
static _Unwind_Reason_Code (*libgcc_s_forcedunwind)
#===============================================================
vim glibc-2.18/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
#===============================================================
@@ -25,7 +25,8 @@
#define __libc_dlclose dlclose
#define __libc_fatal(x) {/*write(STDERR_FILENO, x, strlen(x));*/ abort();}
-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
+static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
+ __attribute_used__;
static _Unwind_Reason_Code (*libgcc_s_personality)
(_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
#===============================================================
cd build-glibc
../glibc-2.18/configure --target=arm-linux-gnueabi --host=arm-linux-gnueabi --build=$MACHTYPE --prefix=/usr --enable-shared --with-pkgversion="Tinyboard" --disable-profile --disable-werror --without-gd --enable-kernel=3.10 --with-headers=/opt/gcc/arm-linux-gnueabi/sysroot/usr/include --with-binutils=/opt/gcc/arm-linux-gnueabi/bin --disable-multilib libc_cv_forced_unwind=yes
make -j8 install_root=/opt/gcc/arm-linux-gnueabi/sysroot install-bootstrap-headers=yes install-headers
make -j8 csu/subdir_lib
install csu/crt1.o csu/crti.o csu/crtn.o /opt/gcc/arm-linux-gnueabi/sysroot/usr/lib
arm-linux-gnueabi-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o /opt/gcc/arm-linux-gnueabi/sysroot/usr/lib/libc.so
touch /opt/gcc/arm-linux-gnueabi/sysroot/usr/include/gnu/stubs.h 6. Compiler Support Library
cd build-gcc make -j8 gcc_cv_libc_provides_ssp=yes all-target-libgcc make -j8 install-target-libgcc cd ..
7. Standard C Library
cd build-glibc make -j8 make -j8 install_root=/opt/gcc/arm-linux-gnueabi/sysroot install cd ..
8. Standard C++ Library
mkdir -p build-gcc cd build-gcc make -j8 gcc_cv_libc_provides_ssp=yes make -j8 install cd ..
9. Create Soft Linke File
cd /opt/gcc/bin ln -s arm-linux-gnueabi-addr2line arm-linux-addr2line ln -s arm-linux-gnueabi-ar arm-linux-ar ln -s arm-linux-gnueabi-as arm-linux-as ln -s arm-linux-gnueabi-c++ arm-linux-c++ ln -s arm-linux-gnueabi-c++filt arm-linux-c++filt ln -s arm-linux-gnueabi-cpp arm-linux-cpp ln -s arm-linux-gnueabi-elfedit arm-linux-elfedit ln -s arm-linux-gnueabi-g++ arm-linux-g++ ln -s arm-linux-gnueabi-gcc arm-linux-gcc ln -s arm-linux-gnueabi-gcc-ar arm-linux-gcc-ar ln -s arm-linux-gnueabi-gcc-nm arm-linux-gcc-nm ln -s arm-linux-gnueabi-gcc-ranlib arm-linux-gcc-ranlib ln -s arm-linux-gnueabi-gcov arm-linux-gcov ln -s arm-linux-gnueabi-gprof arm-linux-gprof ln -s arm-linux-gnueabi-ld arm-linux-ld ln -s arm-linux-gnueabi-ld.bfd arm-linux-ld.bfd ln -s arm-linux-gnueabi-nm arm-linux-nm ln -s arm-linux-gnueabi-objcopy arm-linux-objcopy ln -s arm-linux-gnueabi-objdump arm-linux-objdump ln -s arm-linux-gnueabi-ranlib arm-linux-ranlib ln -s arm-linux-gnueabi-readelf arm-linux-readelf ln -s arm-linux-gnueabi-size arm-linux-size ln -s arm-linux-gnueabi-strings arm-linux-strings ln -s arm-linux-gnueabi-strip arm-linux-strip
10. References
[1] How to Build a GCC Cross-Compiler
[2] 从零构建GCC编译工具链简记
[3] uclibc-0071-Fix-libgcc_s_resume-issue.patch
admin