#!/bin/bash # LFS 11.2 Build Script # Builds the cross-toolchain and cross compiling temporary tools from chapters 5 and 6 # by Luís Mendes :) # 06/Sep/2022 package_name="" package_ext="" begin() { package_name=$1 package_ext=$2 echo "[lfs-cross] Starting build of $package_name at $(date)" tar xf $package_name.$package_ext cd $package_name } finish() { echo "[lfs-cross] Finishing build of $package_name at $(date)" cd $LFS/sources rm -rf $package_name } cd $LFS/sources # 5.2. Binutils-2.39 - Pass 1 begin binutils-2.39 tar.xz mkdir -v build cd build ../configure --prefix=$LFS/tools \ --with-sysroot=$LFS \ --target=$LFS_TGT \ --disable-nls \ --enable-gprofng=no \ --disable-werror make make install finish # 5.3. GCC-12.2.0 - Pass 1 begin gcc-12.2.0 tar.xz tar -xf ../mpfr-4.1.0.tar.xz mv -v mpfr-4.1.0 mpfr tar -xf ../gmp-6.2.1.tar.xz mv -v gmp-6.2.1 gmp tar -xf ../mpc-1.2.1.tar.gz mv -v mpc-1.2.1 mpc case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' \ -i.orig gcc/config/i386/t-linux64 ;; esac mkdir -v build cd build ../configure \ --target=$LFS_TGT \ --prefix=$LFS/tools \ --with-glibc-version=2.36 \ --with-sysroot=$LFS \ --with-newlib \ --without-headers \ --disable-nls \ --disable-shared \ --disable-multilib \ --disable-decimal-float \ --disable-threads \ --disable-libatomic \ --disable-libgomp \ --disable-libquadmath \ --disable-libssp \ --disable-libvtv \ --disable-libstdcxx \ --enable-languages=c,c++ make make install cd .. cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h finish # 5.4. Linux-5.19.2 API Headers begin linux-5.19.2 tar.xz make mrproper make headers find usr/include -type f ! -name '*.h' -delete cp -rv usr/include $LFS/usr finish # 5.5. Glibc-2.36 begin glibc-2.36 tar.xz case $(uname -m) in i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3 ;; x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64 ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3 ;; esac patch -Np1 -i ../glibc-2.36-fhs-1.patch mkdir -v build cd build echo "rootsbindir=/usr/sbin" > configparms ../configure \ --prefix=/usr \ --host=$LFS_TGT \ --build=$(../scripts/config.guess) \ --enable-kernel=3.2 \ --with-headers=$LFS/usr/include \ libc_cv_slibdir=/usr/lib make make DESTDIR=$LFS install sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd echo 'int main(){}' | gcc -xc - readelf -l a.out | grep ld-linux rm -v a.out $LFS/tools/libexec/gcc/$LFS_TGT/12.2.0/install-tools/mkheaders finish # 5.6. Libstdc++ from GCC-12.2.0 begin gcc-12.2.0 tar.xz mkdir -v build cd build ../libstdc++-v3/configure \ --host=$LFS_TGT \ --build=$(../config.guess) \ --prefix=/usr \ --disable-multilib \ --disable-nls \ --disable-libstdcxx-pch \ --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/12.2.0 make make DESTDIR=$LFS install rm -v $LFS/usr/lib/lib{stdc++,stdc++fs,supc++}.la finish # 6.2. M4-1.4.19 begin m4-1.4.19 tar.xz ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) make make DESTDIR=$LFS install finish # 6.3. Ncurses-6.3 begin ncurses-6.3 tar.gz sed -i s/mawk// configure mkdir build pushd build ../configure make -C include make -C progs tic popd ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(./config.guess) \ --mandir=/usr/share/man \ --with-manpage-format=normal \ --with-shared \ --without-normal \ --with-cxx-shared \ --without-debug \ --without-ada \ --disable-stripping \ --enable-widec make make DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install echo "INPUT(-lncursesw)" > $LFS/usr/lib/libncurses.so finish # 6.4. Bash-5.1.16 begin bash-5.1.16 tar.gz ./configure --prefix=/usr \ --build=$(support/config.guess) \ --host=$LFS_TGT \ --without-bash-malloc make make DESTDIR=$LFS install ln -sv bash $LFS/bin/sh finish # 6.5. Coreutils-9.1 begin coreutils-9.1 tar.xz ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) \ --enable-install-program=hostname \ --enable-no-install-program=kill,uptime make make DESTDIR=$LFS install mv -v $LFS/usr/bin/chroot $LFS/usr/sbin mkdir -pv $LFS/usr/share/man/man8 mv -v $LFS/usr/share/man/man1/chroot.1 $LFS/usr/share/man/man8/chroot.8 sed -i 's/"1"/"8"/' $LFS/usr/share/man/man8/chroot.8 finish # 6.6. Diffutils-3.8 begin diffutils-3.8 tar.xz ./configure --prefix=/usr --host=$LFS_TGT make make DESTDIR=$LFS install finish # 6.7. File-5.42 begin file-5.42 tar.gz mkdir build pushd build ../configure --disable-bzlib \ --disable-libseccomp \ --disable-xzlib \ --disable-zlib make popd ./configure --prefix=/usr --host=$LFS_TGT --build=$(./config.guess) make FILE_COMPILE=$(pwd)/build/src/file make DESTDIR=$LFS install rm -v $LFS/usr/lib/libmagic.la finish # 6.8. Findutils-4.9.0 begin findutils-4.9.0 tar.xz ./configure --prefix=/usr \ --localstatedir=/var/lib/locate \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) make make DESTDIR=$LFS install finish # 6.9. Gawk-5.1.1 begin gawk-5.1.1 tar.xz sed -i 's/extras//' Makefile.in ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) make make DESTDIR=$LFS install finish # 6.10. Grep-3.7 begin grep-3.7 tar.xz ./configure --prefix=/usr \ --host=$LFS_TGT make make DESTDIR=$LFS install finish # 6.11. Gzip-1.12 begin gzip-1.12 tar.xz ./configure --prefix=/usr --host=$LFS_TGT make make DESTDIR=$LFS install finish # 6.12. Make-4.3 begin make-4.3 tar.gz ./configure --prefix=/usr \ --without-guile \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) make make DESTDIR=$LFS install finish # 6.13. Patch-2.7.6 begin patch-2.7.6 tar.xz ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) make make DESTDIR=$LFS install finish # 6.14. Sed-4.8 begin sed-4.8 tar.xz ./configure --prefix=/usr \ --host=$LFS_TGT make make DESTDIR=$LFS install finish # 6.15. Tar-1.34 begin tar-1.34 tar.xz ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) make make DESTDIR=$LFS install finish # 6.16. Xz-5.2.6 begin xz-5.2.6 tar.xz ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) \ --disable-static \ --docdir=/usr/share/doc/xz-5.2.6 make make DESTDIR=$LFS install rm -v $LFS/usr/lib/liblzma.la finish # 6.17. Binutils-2.39 - Pass 2 begin binutils-2.39 tar.xz sed '6009s/$add_dir//' -i ltmain.sh mkdir -v build cd build ../configure \ --prefix=/usr \ --build=$(../config.guess) \ --host=$LFS_TGT \ --disable-nls \ --enable-shared \ --enable-gprofng=no \ --disable-werror \ --enable-64-bit-bfd make make DESTDIR=$LFS install rm -v $LFS/usr/lib/lib{bfd,ctf,ctf-nobfd,opcodes}.{a,la} finish # 6.18. GCC-12.2.0 - Pass 2 begin gcc-12.2.0 tar.xz tar -xf ../mpfr-4.1.0.tar.xz mv -v mpfr-4.1.0 mpfr tar -xf ../gmp-6.2.1.tar.xz mv -v gmp-6.2.1 gmp tar -xf ../mpc-1.2.1.tar.gz mv -v mpc-1.2.1 mpc case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64 ;; esac sed '/thread_header =/s/@.*@/gthr-posix.h/' \ -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in mkdir -v build cd build ../configure \ --build=$(../config.guess) \ --host=$LFS_TGT \ --target=$LFS_TGT \ LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \ --prefix=/usr \ --with-build-sysroot=$LFS \ --enable-initfini-array \ --disable-nls \ --disable-multilib \ --disable-decimal-float \ --disable-libatomic \ --disable-libgomp \ --disable-libquadmath \ --disable-libssp \ --disable-libvtv \ --enable-languages=c,c++ make make DESTDIR=$LFS install ln -sv gcc $LFS/usr/bin/cc finish