编译交叉编译工具链 5.5.0
2023-05-16 08:48:51    15    0    0
admin

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

 

 

Pre: 使用openvpn连通多个机房内网

Next: 编译交叉编译工具链 4.8.5

15
Table of content