clfs-bootstrap

clfs-bootstrap.git
git clone git://git.lenczewski.org/clfs-bootstrap.git
Log | Files | Refs | README | LICENSE

build-cross-toolchain.sh (5800B)


      1 #!/bin/bash
      2 
      3 ################################################################################
      4 ### Defined Variables:
      5 ### - CLFS                  : Root folder for CLFS build, holds final tarballs
      6 ### - CLFS_BOOTSCRIPTS      : Root folder for CLFS bootscripts
      7 ### - CLFS_CONFIGS          : Additional configuration files for CLFS packages
      8 ### - CLFS_LOGS             : Package build log root
      9 ### - CLFS_SCRIPTS          : Build script root
     10 ### - CLFS_SOURCES          : Package source root
     11 ### ----------------------------------------------------------------------------
     12 ### - CLFS_ROOT             : Root folder for cross-compiled system
     13 ### - CLFS_BOOT_ROOT        : Root folder for boot-required binaries
     14 ### - CLFS_CROSS_NAME       : Name of cross-toolchain root
     15 ### - CLFS_CROSS_ROOT       : Root folder for cross-toolchain
     16 ### - CLFS_CROSS_SYSROOT    : Sysroot for cross-toolchain
     17 ################################################################################
     18 
     19 source ~/.bashrc
     20 
     21 
     22 TIMESTAMP=$CLFS_CROSS_ROOT/successful-build
     23 [ -f $TIMESTAMP ] && exit 0
     24 
     25 
     26 COMMON_BINUTILS_OPTS=(\
     27 	--enable-deterministic-archives \
     28 	--disable-separate-code \
     29 )
     30 
     31 
     32 COMMON_GCC_OPTS=(\
     33 	--enable-libstdcxx-time=rt \
     34 	--disable-assembly \
     35 	--disable-bootstrap \
     36 	--disable-gnu-indirect-function \
     37 	--disable-libmpx \
     38 	--disable-libmudflap \
     39 	--disable-libsanitizer \
     40 )
     41 
     42 
     43 LINUX () {
     44 	make mrproper
     45 
     46 	make ARCH=${CLFS_ARCH} headers_check
     47 	make ARCH=${CLFS_ARCH} headers
     48 
     49 	find usr/include -name '.*' -delete
     50 	rm usr/include/Makefile
     51 	cp -r usr/include ${CLFS_CROSS_SYSROOT}
     52 }
     53 EXTRACT "LINUX" LINUX "toolchain-linux-headers"
     54 
     55 
     56 BINUTILS_PASS1 () {
     57 	mkdir -v binutils-build
     58 	cd binutils-build
     59 
     60 	../configure \
     61 		--prefix=${CLFS_CROSS_ROOT} \
     62 		--with-sysroot=${CLFS_CROSS_SYSROOT} \
     63 		--build=${CLFS_HOST} \
     64 		--host=${CLFS_HOST} \
     65 		--target=${CLFS_TARGET} \
     66 		--disable-multilib \
     67 		--disable-nls \
     68 		--disable-shared \
     69 		--disable-werror \
     70 		${COMMON_BINUTILS_OPTS[@]}
     71 
     72 	make && make install
     73 }
     74 EXTRACT "BINUTILS" BINUTILS_PASS1 "toolchain-binutils-pass1"
     75 
     76 
     77 GCC_PASS1 () {
     78 	tar xf ../${MPFR_ARCHIVE}
     79 	mv -v ${MPFR_DIR} mpfr
     80 	tar xf ../${GMP_ARCHIVE}
     81 	mv -v ${GMP_DIR} gmp
     82 	tar xf ../${MPC_ARCHIVE}
     83 	mv -v ${MPC_DIR} mpc
     84 
     85 	mkdir -v gcc-build
     86 	cd gcc-build
     87 
     88 	../configure \
     89 		--prefix=${CLFS_CROSS_ROOT} \
     90 		--with-sysroot=${CLFS_CROSS_SYSROOT} \
     91 		--build=${CLFS_HOST} \
     92 		--host=${CLFS_HOST} \
     93 		--target=${CLFS_TARGET} \
     94 		--with-arch=${CLFS_GCC_ARCH} \
     95 		${CLFS_GCC_OPTS} \
     96 		--with-newlib \
     97 		--without-headers \
     98 		--enable-initfini-array \
     99 		--enable-languages=c,c++ \
    100 		--disable-decimal-float \
    101 		--disable-libatomic \
    102 		--disable-libgomp \
    103 		--disable-libquadmath \
    104 		--disable-libssp \
    105 		--disable-libstdcxx \
    106 		--disable-libvtv \
    107 		--disable-multilib \
    108 		--disable-nls \
    109 		--disable-shared \
    110 		--disable-threads \
    111 		${COMMON_GCC_OPTS[@]}
    112 
    113 	make all-gcc all-target-libgcc && make install-gcc install-target-libgcc
    114 
    115 	cd ..
    116 	cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
    117         	`dirname $(${CLFS_TARGET}-gcc -print-libgcc-file-name)`/install-tools/include/limits.h
    118 }
    119 EXTRACT "GCC" GCC_PASS1 "toolchain-gcc-pass1"
    120 
    121 
    122 MUSL () {
    123 	./configure \
    124 		CROSS_COMPILE=${CLFS_TARGET}- \
    125 		--prefix=/ \
    126 		--build=${CLFS_HOST} \
    127 		--host=${CLFS_HOST} \
    128 		--target=${CLFS_TARGET}
    129 
    130 	make && make DESTDIR=${CLFS_CROSS_SYSROOT} install
    131 
    132 	ln -fsv libc.so ${CLFS_CROSS_SYSROOT}/lib/ld-musl-*.so.1
    133 
    134 	${CLFS_CROSS_ROOT}/libexec/gcc/${CLFS_TARGET}/${GCC_VER}/install-tools/mkheaders
    135 }
    136 EXTRACT "MUSL" MUSL "toolchain-musl-libc"
    137 
    138 
    139 LIBSTDCXX_PASS1 () {
    140 	mkdir -v libstdcxx-build
    141 	cd libstdcxx-build
    142 
    143 	../libstdc++-v3/configure \
    144 		--prefix=/ \
    145 		--build=${CLFS_HOST} \
    146 		--host=${CLFS_HOST} \
    147 		--target=${CLFS_TARGET} \
    148 		--with-gxx-include-dir=${CLFS_CROSS_SYSROOT}/include/c++/${GCC_VER} \
    149 		--disable-libstdcxx-pch \
    150 		--disable-multilib \
    151 		--disable-nls
    152 
    153 	make && make DESTDIR=${CLFS_CROSS_SYSROOT} install
    154 }
    155 EXTRACT "GCC" LIBSTDCXX_PASS1 "toolchain-libstdc++-pass1"
    156 
    157 
    158 BINUTILS_PASS2 () {
    159 	mkdir -v binutils-build
    160 	cd binutils-build
    161 
    162 	../configure \
    163 		--prefix=${CLFS_CROSS_ROOT} \
    164 		--with-sysroot=${CLFS_ROOT} \
    165 		--with-build-sysroot=${CLFS_CROSS_SYSROOT} \
    166 		--build=${CLFS_HOST} \
    167 		--host=${CLFS_HOST} \
    168 		--target=${CLFS_TARGET} \
    169 		--enable-shared \
    170 		--disable-multilib \
    171 		--disable-nls \
    172 		--disable-werror \
    173 		${COMMON_BINUTILS_OPTS[@]}
    174 
    175 	make && make install
    176 }
    177 EXTRACT "BINUTILS" BINUTILS_PASS2 "toolchain-binutils-pass2"
    178 
    179 
    180 GCC_PASS2 () {
    181 	tar xf ../${MPFR_ARCHIVE}
    182 	mv -v ${MPFR_DIR} mpfr
    183 	tar xf ../${GMP_ARCHIVE}
    184 	mv -v ${GMP_DIR} gmp
    185 	tar xf ../${MPC_ARCHIVE}
    186 	mv -v ${MPC_DIR} mpc
    187 
    188 	mkdir -v gcc-build
    189 	cd gcc-build
    190 
    191 	mkdir -pv ${CLFS_TARGET}/libgcc
    192 	ln -s ../../../libgcc/gthr-posix.h ${CLFS_TARGET}/libgcc/gthr-default.h
    193 
    194 	../configure \
    195 		--prefix=${CLFS_CROSS_ROOT} \
    196 		--with-sysroot=${CLFS_ROOT} \
    197 		--with-build-sysroot=${CLFS_CROSS_SYSROOT} \
    198 		--build=${CLFS_HOST} \
    199 		--host=${CLFS_HOST} \
    200 		--target=${CLFS_TARGET} \
    201 		CC_FOR_TARGET=${CLFS_TARGET}-gcc \
    202 		--with-arch=${CLFS_GCC_ARCH} \
    203 		${CLFS_GCC_OPTS} \
    204 		--enable-initfini-array \
    205 		--enable-languages=c,c++ \
    206 		--enable-shared \
    207 		--enable-tls \
    208 		--disable-multilib \
    209 		--disable-nls \
    210 		${COMMON_GCC_OPTS[@]}
    211 
    212 	make && make install
    213 }
    214 EXTRACT "GCC" GCC_PASS2 "toolchain-gcc-pass2"
    215 
    216 
    217 ## Setting toolchain variables
    218 echo export CC=\""${CLFS_TARGET}-gcc --sysroot=${CLFS_ROOT}\"" >> ~/.bashrc
    219 echo export CXX=\""${CLFS_TARGET}-g++ --sysroot=${CLFS_ROOT}\"" >> ~/.bashrc
    220 echo export AR=\""${CLFS_TARGET}-ar\"" >> ~/.bashrc
    221 echo export AS=\""${CLFS_TARGET}-as\"" >> ~/.bashrc
    222 echo export LD=\""${CLFS_TARGET}-ld --sysroot=${CLFS_ROOT}\"" >> ~/.bashrc
    223 echo export RANLIB=\""${CLFS_TARGET}-ranlib\"" >> ~/.bashrc
    224 echo export READELF=\""${CLFS_TARGET}-readelf\"" >> ~/.bashrc
    225 echo export STRIP=\""${CLFS_TARGET}-strip\"" >> ~/.bashrc
    226 
    227 
    228 touch $TIMESTAMP