diff --git a/build.sh b/build.sh index c092a1f..576d5a9 100755 --- a/build.sh +++ b/build.sh @@ -2,6 +2,23 @@ export LINUX_VERSION="6.12.1" +# Backup the native environment +export BUILD_CC="$BUILD_CC" +export CC_native="$CC" +export CXX_native="$CXX" +export AS_native="$AS" +export LD_native="$LD" +export AR_native="$AR" +export RANLIB_native="$RANLIB" +export STRIP_native="$STRIP" +export OBJDUMP_native="$OBJDUMP" +export READELF_native="$READELF" +export CFLAGS_native="$CFLAGS_native" +export CPPFLAGS_native="$CPPFLAGS" +export LDFLAGS_native="$LDFLAGS" +export LD_LIBRARY_PATH_native="$LD_LIBRARY_PATH" +export PKG_CONFIG_LIBDIR_native="$PKG_CONFIG_LIBDIR" + # Function to handle errors error_handler() { local exit_code=$? @@ -46,24 +63,7 @@ if [ ! -d "$LFS_TGT" ]; then echo "Target rootfs set to '$LFS_TGT'. You can override this by setting the LFS_TGT env var." fi -# test bash -bash --version -echo "" - -# test rsync -rsync --version -echo "" - -# test clang -clang --version -echo "" - -# test lld -ld --version -echo "" - -make --version -echo "" +bash version-check.sh export BUILD_MACHINE_TRIPLET=$(gcc -dumpmachine) export TARGET_MACHINE_TRIPLET=$LFS_TGT @@ -83,17 +83,54 @@ export PATH="$LFS_TOOLS/bin/:$PATH" unset CFLAGS unset LDFLAGS +setup_toolchain() { + export BUILD_CC=gcc + export CC="$LFS_TGT-gcc" + export CXX="$LFS_TGT-g++" + export AS="$LFS_TGT-as" + export LD="$LFS_TGT-ld" + export AR="$LFS_TGT-ar" + export RANLIB="$LFS_TGT-ranlib" + export STRIP="$LFS_TGT-strip" + export OBJDUMP="$LFS_TGT-objdump" + export READELF="$LFS_TGT-readelf" + export CFLAGS=" -U_FORTIFY_SOURCE -O2 -L$LFS_TOOLS/lib -L$LFS/usr/lib -I$LFS_TOOLS/include -I$LFS_TOOLS/$LFS_TGT/include" + export CPPFLAGS=" -U_FORTIFY_SOURCE -O2 -L$LFS_TOOLS/lib -L$LFS/usr/lib -I$LFS_TOOLS/include -I$LFS_TOOLS/$LFS_TGT/include -I$LFS_TOOLS/$LFS_TGT/include/c++/14.2.0/ -I$LFS_TOOLS/$LFS_TGT/include/c++/14.2.0/$LFS_TGT" + export LDFLAGS=" -L$LFS/usr/lib -L$LFS_TOOLS/lib" + export LD_LIBRARY_PATH_old="$LD_LIBRARY_PATH" + export LD_LIBRARY_PATH="$LFS_TOOLS/lib $LFS/usr/lib" + export PKG_CONFIG_LIBDIR="$LFS_TOOLS/lib $LFS/usr/lib" + export SYSROOT="$LFS" + #unset LD_LIBRARY_PATH +} + +host_toolchain() { + export BUILD_CC="$BUILD_CC_native" + export CC="$CC_native" + export CXX="$CXX_native" + export AS="$AS_native" + export LD="$LD_native" + export AR="$AR_native" + export RANLIB="$RANLIB_native" + export STRIP="$STRIP_native" + export OBJDUMP="$OBJDUMP_native" + export READELF="$READELF_native" + export CFLAGS="$CFLAGS_native" + export CPPFLAGS="$CPPFLAGS_native" + export LDFLAGS="$LDFLAGS_native" + export PKG_CONFIG_LIBDIR="$PKG_CONFIG_LIBDIR_native" + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH_native" +} + # Create a directory layout if [ ! -d "$LFS/etc" ]; then mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin} + mkdir -pv $LFS/{dev,proc,sys,run,tmp} + for i in bin lib sbin; do ln -sv usr/$i $LFS/$i done - - #case $ARCH in - # x86_64) mkdir -pv $LFS/lib64 ;; - #esac fi # Build binutils @@ -124,12 +161,12 @@ if [ ! -f "$STEPS_DIR/binutils" ]; then --enable-plugins \ --enable-deterministic-archives \ --enable-default-hash-style=gnu - #make configure-host + make -j 32 make -j 32 install cd "$BASE_DIR" - #rm -rf "$LFS_BUILD/binutils" + rm -rf "$LFS_BUILD/binutils" touch "$STEPS_DIR/binutils" fi @@ -155,14 +192,6 @@ if [ ! -f "$STEPS_DIR/gcc-step1" ]; then bash unpack-gcc.sh "$LFS_BUILD/" cd "$LFS_BUILD/gcc/" -# # On x86_64 hosts, set the default directory name for 64-bit libraries to “lib” -# case $(uname -m) in -# x86_64) -# sed -e '/m64=/s/lib64/lib/' \ -# -i.orig gcc/config/i386/t-linux64 -# ;; -# esac - mkdir -vp build-step1 cd build-step1 @@ -288,12 +317,6 @@ if [ ! -f "$STEPS_DIR/glibc" ]; then -o $LFS/usr/lib/libc.so touch $LFS/usr/include/gnu/stubs.h - #export LD_LIBRARY_PATH="$LD_LIBRARY_PATH_old" - - #make DESTDIR=$LFS install - #make install_root="$pkgdir"/usr/$_target install - #sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd - cd "$BASE_DIR" #rm -rf "$LFS_BUILD/glibc" touch "$STEPS_DIR/glibc" @@ -308,8 +331,8 @@ unset RANLIB unset STRIP unset OBJDUMP export LD_LIBRARY_PATH="$LD_LIBRARY_PATH_old" -export CFLAGS="-static " -export LDFLAGS="-Bstatic " +export CFLAGS="-U_FORTIFY_SOURCE -O2 -static " +export LDFLAGS="-U_FORTIFY_SOURCE -O2 -Bstatic " if [ ! -f "$STEPS_DIR/gcc-step2" ]; then bash unpack-gcc.sh "$LFS_BUILD/" @@ -394,8 +417,8 @@ fi #unset RANLIB #unset OBJDUMP #export LD_LIBRARY_PATH="$LD_LIBRARY_PATH_old" -export CFLAGS="-static " -export LDFLAGS="-Bstatic " +export CFLAGS="-U_FORTIFY_SOURCE -O2 -static " +export LDFLAGS="-U_FORTIFY_SOURCE -O2 -Bstatic " # build the rest of gcc if [ ! -f "$STEPS_DIR/gcc-step3" ]; then @@ -433,23 +456,12 @@ if [ ! -f "$STEPS_DIR/gcc-step3" ]; then touch "$STEPS_DIR/gcc-step3" fi -# Use the new toolchain -export BUILD_CC=gcc -export CC="$LFS_TGT-gcc" -export CXX="$LFS_TGT-g++" -export AS="$LFS_TGT-as" -export LD="$LFS_TGT-ld" -export AR="$LFS_TGT-ar" -export RANLIB="$LFS_TGT-ranlib" -export STRIP="$LFS_TGT-strip" -export OBJDUMP="$LFS_TGT-objdump" -export READELF="$LFS_TGT-readelf" -# remove hardening options for building libraries -export CFLAGS="-U_FORTIFY_SOURCE -O2 -L$LFS_TOOLS/lib -L$LFS/usr/lib -I$LFS_TOOLS/include -I$LFS_TOOLS/$LFS_TGT/include" -export CPPFLAGS="-U_FORTIFY_SOURCE -O2 -L$LFS_TOOLS/lib -L$LFS/usr/lib -I$LFS_TOOLS/include -I$LFS_TOOLS/$LFS_TGT/include -I$LFS_TOOLS/$LFS_TGT/include/c++/14.2.0/ -I$LFS_TOOLS/$LFS_TGT/include/c++/14.2.0/$LFS_TGT" -export LDFLAGS="-L$LFS/usr/lib -L$LFS_TOOLS/lib" -export LD_LIBRARY_PATH_old="$LD_LIBRARY_PATH" -unset LD_LIBRARY_PATH +## finish the host toolchain +#host_toolchain +#bash "build-host-tools.sh" + +# From now on use the new toolchain +setup_toolchain # test the cross toolchain which -- $LFS_TGT-as || echo $LFS_TGT-as is not in the PATH @@ -470,8 +482,8 @@ if [ ! -f "$STEPS_DIR/m4" ]; then fi cd "$LFS_BUILD/m4" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT echo "rootsbindir=/usr/sbin" > configparms @@ -483,7 +495,7 @@ if [ ! -f "$STEPS_DIR/m4" ]; then make -j 32 make DESTDIR=$LFS install - "$LFS_TGT-strip" --strip-unneeded $LFS/bin/m4 + "$LFS_TGT-strip" --strip-unneeded $LFS/usr/bin/m4 cd "$BASE_DIR" rm -rf "$LFS_BUILD/m4" @@ -498,8 +510,8 @@ if [ ! -f "$STEPS_DIR/attr" ]; then fi cd "$LFS_BUILD/attr" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT echo "rootsbindir=/usr/sbin" > configparms @@ -524,8 +536,8 @@ if [ ! -f "$STEPS_DIR/zlib" ]; then fi cd "$LFS_BUILD/zlib" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT "../configure" \ --prefix=$LFS @@ -547,8 +559,8 @@ if [ ! -f "$STEPS_DIR/ncurses" ]; then fi cd "$LFS_BUILD/ncurses" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT # --build=${CLFS_HOST} \ "../configure" \ @@ -579,8 +591,8 @@ if [ ! -f "$STEPS_DIR/bash" ]; then fi cd "$LFS_BUILD/bash" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT # --build=${CLFS_HOST} \ "../configure" \ @@ -630,8 +642,8 @@ if [ ! -f "$STEPS_DIR/check" ]; then fi cd "$LFS_BUILD/check" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT "../configure" \ --prefix=$LFS \ @@ -655,8 +667,8 @@ if [ ! -f "$STEPS_DIR/coreutils" ]; then fi cd "$LFS_BUILD/coreutils" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT "../configure" \ --prefix=$LFS \ @@ -681,8 +693,8 @@ if [ ! -f "$STEPS_DIR/diffutils" ]; then fi cd "$LFS_BUILD/diffutils" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT "../configure" \ --prefix=$LFS \ @@ -707,8 +719,8 @@ if [ ! -f "$STEPS_DIR/file" ]; then fi cd "$LFS_BUILD/file" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT "../configure" \ --prefix=$LFS \ @@ -732,8 +744,8 @@ if [ ! -f "$STEPS_DIR/findutils" ]; then fi cd "$LFS_BUILD/findutils" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT echo "gl_cv_func_wcwidth_works=yes" > config.cache echo "ac_cv_func_fnmatch_gnu=yes" >> config.cache @@ -760,8 +772,8 @@ if [ ! -f "$STEPS_DIR/gawk" ]; then fi cd "$LFS_BUILD/gawk" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT "../configure" \ --prefix=$LFS \ @@ -787,8 +799,8 @@ if [ ! -f "$STEPS_DIR/grep" ]; then fi cd "$LFS_BUILD/grep" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT "../configure" \ --prefix=$LFS \ @@ -815,8 +827,8 @@ if [ ! -f "$STEPS_DIR/gzip" ]; then fi cd "$LFS_BUILD/gzip" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT "../configure" \ --prefix=$LFS \ @@ -842,8 +854,8 @@ if [ ! -f "$STEPS_DIR/make" ]; then fi cd "$LFS_BUILD/make" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT "../configure" \ --prefix=$LFS \ @@ -867,8 +879,8 @@ if [ ! -f "$STEPS_DIR/libiconv" ]; then fi cd "$LFS_BUILD/libiconv" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT "../configure" \ --prefix=/usr \ @@ -897,8 +909,8 @@ if [ ! -f "$STEPS_DIR/patch" ]; then fi cd "$LFS_BUILD/patch" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT "../configure" \ --prefix=$LFS/usr \ @@ -922,8 +934,8 @@ if [ ! -f "$STEPS_DIR/sed" ]; then fi cd "$LFS_BUILD/sed" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT "../configure" \ --prefix=$LFS \ @@ -950,8 +962,8 @@ if [ ! -f "$STEPS_DIR/tar" ]; then export LDFLAGS_old="$LDFLAGS" export LDFLAGS="$LDFLAGS -liconv" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT # cat > config.cache << EOF #gl_cv_func_wcwidth_works=yes @@ -981,6 +993,44 @@ if [ ! -f "$STEPS_DIR/tar" ]; then touch "$STEPS_DIR/tar" fi +## build the rest of gcc +#if [ ! -f "$STEPS_DIR/gcc-final" ]; then +# bash unpack-gcc.sh "$LFS_BUILD/" +# cd "$LFS_BUILD/gcc/" +# +# mkdir -vp build-$LFS_TGT +# cd build-$LFS_TGT +# +# "../configure" \ +# --target=$LFS_TGT \ +# --host=${BUILD_MACHINE_TRIPLET} \ +# --build=${LFS_TGT} \ +# --prefix=$LFS \ +# --with-glibc-version=2.40 \ +# --with-sysroot=$LFS \ +# --enable-c99 \ +# --enable-long-long \ +# --enable-default-pie \ +# --enable-default-ssp \ +# --disable-nls \ +# --disable-multilib \ +# --disable-libgomp \ +# --disable-libquadmath \ +# --disable-libquadmath-support \ +# --disable-decimal-float \ +# --enable-languages=c,c++ +# +# # Reebuild everything now that we have bootstrapped an initial gcc and glibc +# make -j 32 # if build fails add --disable-libsanitizer +# make -j 32 install +# +# cd "$BASE_DIR" +# rm -rf "$LFS_BUILD/gcc" +# touch "$STEPS_DIR/gcc-step3" +#fi +#exit 0 + + # build gettext if [ ! -f "$STEPS_DIR/gettext" ]; then if [ ! -d "$LFS_BUILD/gettext" ]; then @@ -989,10 +1039,10 @@ if [ ! -f "$STEPS_DIR/gettext" ]; then fi cd "$LFS_BUILD/gettext" - EMACS="no" autoreconf -fi + #EMACS="no" autoreconf -fi - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT EMACS="no" "../configure" \ --prefix=$LFS \ @@ -1000,8 +1050,10 @@ if [ ! -f "$STEPS_DIR/gettext" ]; then --build=${BUILD_MACHINE_TRIPLET} \ --disable-shared \ --libdir=$LFS/usr/lib \ + --with-sysroot=$SYSROOT \ + --enable-curses \ --cache-file=config.cache - + make -j 32 make -j 32 install @@ -1019,8 +1071,8 @@ if [ ! -f "$STEPS_DIR/texinfo" ]; then fi cd "$LFS_BUILD/texinfo" - mkdir -vp build - cd build + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT PERL=/usr/bin/perl \ "../configure" \