diff --git a/build.sh b/build.sh index c5af1b8..ee4fa2e 100755 --- a/build.sh +++ b/build.sh @@ -124,10 +124,14 @@ host_toolchain() { # Create a directory layout if [ ! -d "$LFS/etc" ]; then - mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin,libexec,share} + mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,share} mkdir -pv $LFS/{dev,proc,sys,run,tmp} - for i in bin lib sbin libexec; do + # like archlinux sbin->/usr/bin + ln -sv usr/bin $LFS/sbin + ln -sv bin $LFS/usr/sbin + + for i in bin lib; do ln -sv usr/$i $LFS/$i done fi @@ -512,15 +516,16 @@ if [ ! -f "$STEPS_DIR/attr" ]; then mkdir -vp build-$LFS_TGT cd build-$LFS_TGT - echo "rootsbindir=/usr/sbin" > configparms + echo "rootsbindir=/usr/bin" > configparms "../configure" \ - --prefix=/ \ + --prefix=/usr \ + --with-sysroot=${LFS} \ --disable-static \ --host=$LFS_TGT - + make -j 32 - make DESTDIR=$LFS install + make -j 32 DESTDIR="$LFS" install cd "$BASE_DIR" rm -rf "$LFS_BUILD/attr" @@ -538,11 +543,17 @@ if [ ! -f "$STEPS_DIR/zlib" ]; then mkdir -vp build-$LFS_TGT cd build-$LFS_TGT + export CFLAGS_old="$CFLAGS" + export CFLAGS+=" -ffat-lto-objects" + "../configure" \ - --prefix=$LFS + --prefix=/usr \ + --enable-shared make -j 32 - make install + make -j 32 DESTDIR="$LFS" install + + export CFLAGS="$CFLAGS_old" cd "$BASE_DIR" rm -rf "$LFS_BUILD/zlib" @@ -582,6 +593,34 @@ if [ ! -f "$STEPS_DIR/ncurses" ]; then touch "$STEPS_DIR/ncurses" fi +# build readline (depends on libncurses) +if [ ! -f "$STEPS_DIR/readline" ]; then + if [ ! -d "$LFS_BUILD/readline" ]; then + tar -xf "$BASE_DIR/sources/readline-8.2.13.tar.gz" + mv "readline-8.2.13" "$LFS_BUILD/readline" + fi + cd "$LFS_BUILD/readline" + + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT + + "../configure" \ + --with-sysroot=${LFS} \ + --host=${LFS_TGT} \ + --build=${BUILD_MACHINE_TRIPLET} \ + --prefix=/usr \ + --with-curses \ + --enable-static=no \ + --cache-file=config.cache + + make -j 32 SHLIB_LIBS=-lncurses + make -j 32 DESTDIR=$LFS install + + cd "$BASE_DIR" + rm -rf "$LFS_BUILD/readline" + touch "$STEPS_DIR/readline" +fi + # build bash if [ ! -f "$STEPS_DIR/bash" ]; then if [ ! -d "$LFS_BUILD/bash" ]; then @@ -593,17 +632,27 @@ if [ ! -f "$STEPS_DIR/bash" ]; then mkdir -vp build-$LFS_TGT cd build-$LFS_TGT - # --build=${CLFS_HOST} \ + _bashconfig=(-DDEFAULT_PATH_VALUE=\'\"/usr/local/sbin:/usr/local/bin:/usr/bin\"\' + -DSTANDARD_UTILS_PATH=\'\"/usr/bin\"\' + -DSYS_BASHRC=\'\"/etc/bash.bashrc\"\' + -DSYS_BASH_LOGOUT=\'\"/etc/bash.bash_logout\"\' + -DNON_INTERACTIVE_LOGIN_SHELLS) + export CFLAGS_old="$CFLAGS" + export CFLAGS="${CFLAGS} ${_bashconfig[@]}" + "../configure" \ - --prefix=$LFS \ + --prefix=/usr \ --host=${LFS_TGT} \ --build=${BUILD_MACHINE_TRIPLET} \ --without-bash-malloc \ --enable-threads \ + --enable-readline \ --with-curses make -j 32 - make install + make -j 32 DESTDIR="$LFS" install + + export CFLAGS="$CFLAGS_old" cd "$BASE_DIR" rm -rf "$LFS_BUILD/bash" @@ -619,7 +668,7 @@ if [ ! -f "$STEPS_DIR/bzip2" ]; then cd "$LFS_BUILD/bzip2" #make - make CC="${CC} ${CFLAGS}" AR="${AR}" RANLIB="${RANLIB}" LD="${LD} ${LDFLAGS}" -j 32 PREFIX=$LFS install + make CC="${CC} ${CFLAGS}" AR="${AR}" RANLIB="${RANLIB}" LD="${LD} ${LDFLAGS}" -j 32 PREFIX="$LFS/usr" install if [ -f "$LFS/bin/bzip2" ]; then "$LFS_TGT-strip" --strip-unneeded "$LFS/bin/bzip2" @@ -673,14 +722,15 @@ if [ ! -f "$STEPS_DIR/coreutils" ]; then cd build-$LFS_TGT "../configure" \ - --prefix=$LFS \ + --prefix=/usr \ + --libexecdir=/usr/lib \ --host=${LFS_TGT} \ --build=${BUILD_MACHINE_TRIPLET} \ --enable-install-program=hostname \ --cache-file=config.cache make -j 32 - make -j 32 install + make -j 32 DESTDIR="$LFS" install cd "$BASE_DIR" rm -rf "$LFS_BUILD/coreutils" @@ -713,6 +763,31 @@ if [ ! -f "$STEPS_DIR/diffutils" ]; then touch "$STEPS_DIR/diffutils" fi +# build libseccomp +if [ ! -f "$STEPS_DIR/libseccomp" ]; then + if [ ! -d "$LFS_BUILD/libseccomp" ]; then + tar -xf "$BASE_DIR/sources/libseccomp-2.5.5.tar.gz" + mv "libseccomp-2.5.5" "$LFS_BUILD/libseccomp" + fi + cd "$LFS_BUILD/libseccomp" + + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT + + "../configure" \ + --prefix=/usr \ + --host=${LFS_TGT} \ + --build=${BUILD_MACHINE_TRIPLET} \ + --cache-file=config.cache + + make -j 32 + make -j 32 DESTDIR="$LFS" install + + cd "$BASE_DIR" + rm -rf "$LFS_BUILD/libseccomp" + touch "$STEPS_DIR/libseccomp" +fi + # build file if [ ! -f "$STEPS_DIR/file" ]; then if [ ! -d "$LFS_BUILD/file" ]; then @@ -725,13 +800,17 @@ if [ ! -f "$STEPS_DIR/file" ]; then cd build-$LFS_TGT "../configure" \ - --prefix=$LFS \ + --prefix=/usr \ + --libdir=/usr/lib \ + --datadir=/usr/share/file \ + --with-sysroot=$LFS \ --host=${LFS_TGT} \ --build=${BUILD_MACHINE_TRIPLET} \ - --libdir=$LFS/lib + --enable-libseccomp \ + --cache-file=config.cache make -j 32 - make -j 32 install + make -j 32 DESTDIR="$LFS" install cd "$BASE_DIR" rm -rf "$LFS_BUILD/file" @@ -753,13 +832,13 @@ if [ ! -f "$STEPS_DIR/findutils" ]; then echo "ac_cv_func_fnmatch_gnu=yes" >> config.cache "../configure" \ - --prefix=$LFS \ + --prefix=/usr \ --host=${LFS_TGT} \ --build=${BUILD_MACHINE_TRIPLET} \ --cache-file=config.cache make -j 32 - make -j 32 install + make -j 32 DESTDIR="$LFS" install cd "$BASE_DIR" rm -rf "$LFS_BUILD/findutils" @@ -778,16 +857,16 @@ if [ ! -f "$STEPS_DIR/gawk" ]; then cd build-$LFS_TGT "../configure" \ - --prefix=$LFS/usr \ - --libexecdir=$LFS/usr/lib \ - --sysconfdir=$LFS/etc \ + --prefix=/usr \ + --libexecdir=/usr/lib \ + --sysconfdir=/etc \ --host=${LFS_TGT} \ --build=${BUILD_MACHINE_TRIPLET} \ --without-libsigsegv \ --cache-file=config.cache make -j 32 - make -j 32 install + make -j 32 DESTDIR="$LFS" install "$STRIP" --strip-unneeded "$LFS/bin/gawk" @@ -808,14 +887,14 @@ if [ ! -f "$STEPS_DIR/grep" ]; then cd build-$LFS_TGT "../configure" \ - --prefix=$LFS \ + --prefix=/usr \ --host=${LFS_TGT} \ --build=${BUILD_MACHINE_TRIPLET} \ --without-included-regex \ --cache-file=config.cache make -j 32 - make -j 32 install + make -j 32 DESTDIR="$LFS" install "$STRIP" --strip-unneeded "$LFS/bin/grep" @@ -863,13 +942,13 @@ if [ ! -f "$STEPS_DIR/make" ]; then cd build-$LFS_TGT "../configure" \ - --prefix=$LFS \ + --prefix=/usr \ --host=${LFS_TGT} \ --build=${BUILD_MACHINE_TRIPLET} \ --cache-file=config.cache make -j 32 - make -j 32 install + make -j 32 DESTDIR="$LFS" install cd "$BASE_DIR" rm -rf "$LFS_BUILD/make" @@ -943,13 +1022,15 @@ if [ ! -f "$STEPS_DIR/sed" ]; then cd build-$LFS_TGT "../configure" \ - --prefix=$LFS \ + --prefix=/usr \ --host=${LFS_TGT} \ --build=${BUILD_MACHINE_TRIPLET} \ --cache-file=config.cache - - make -j 32 install + make -j 32 + make -j 32 DESTDIR="$LFS" install + + "$LFS_TGT-strip" --strip-unneeded "$LFS/bin/sed" cd "$BASE_DIR" rm -rf "$LFS_BUILD/sed" @@ -983,15 +1064,18 @@ if [ ! -f "$STEPS_DIR/tar" ]; then #EOF "../configure" \ - --prefix=$LFS \ + --prefix=/usr \ + --sbindir=/usr/bin \ + --libexecdir=/usr/lib/tar \ --host=${LFS_TGT} \ --build=${BUILD_MACHINE_TRIPLET} \ + --enable-backup-scripts \ --cache-file=config.cache make -j 32 - make -j 32 install + make -j 32 DESTDIR="$LFS" install - "$LFS_TGT-strip" --strip-unneeded $LFS/bin/tar + "$LFS_TGT-strip" --strip-unneeded "$LFS/bin/tar" export LDFLAGS="$LDFLAGS_old" @@ -1037,39 +1121,6 @@ fi #fi #exit 0 - -# build gettext -if [ ! -f "$STEPS_DIR/gettext" ]; then - if [ ! -d "$LFS_BUILD/gettext" ]; then - tar -xf "$BASE_DIR/sources/gettext-0.23.tar.gz" - mv "gettext-0.23" "$LFS_BUILD/gettext" - fi - cd "$LFS_BUILD/gettext" - - #EMACS="no" autoreconf -fi - - mkdir -vp build-$LFS_TGT - cd build-$LFS_TGT - - EMACS="no" "../configure" \ - --prefix=$LFS \ - --host=${LFS_TGT} \ - --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 - - cd "$BASE_DIR" - rm -rf "$LFS_BUILD/gettext" - touch "$STEPS_DIR/gettext" -fi - # build xz-utils if [ ! -f "$STEPS_DIR/xz" ]; then if [ ! -d "$LFS_BUILD/xz" ]; then @@ -1094,11 +1145,48 @@ if [ ! -f "$STEPS_DIR/xz" ]; then # Remove the libtool archive file because it is harmful for cross compilation #rm -v $LFS/usr/lib/liblzma.la + "$LFS_TGT-strip" --strip-unneeded "$LFS/bin/xz" + "$LFS_TGT-strip" --strip-unneeded "$LFS/bin/xzdec" + "$LFS_TGT-strip" --strip-unneeded "$LFS/bin/xzcat" + cd "$BASE_DIR" rm -rf "$LFS_BUILD/xz" touch "$STEPS_DIR/xz" fi +# build gettext +if [ ! -f "$STEPS_DIR/gettext" ]; then + if [ ! -d "$LFS_BUILD/gettext" ]; then + tar -xf "$BASE_DIR/sources/gettext-0.23.tar.gz" + mv "gettext-0.23" "$LFS_BUILD/gettext" + fi + cd "$LFS_BUILD/gettext" + + #EMACS="no" autoreconf -fi + + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT + + EMACS="no" "../configure" \ + --prefix=/usr \ + --host=${LFS_TGT} \ + --build=${BUILD_MACHINE_TRIPLET} \ + --disable-shared \ + --libdir=/usr/lib \ + --with-sysroot=$SYSROOT \ + --enable-curses \ + --with-xz \ + --cache-file=config.cache + + + make -j 32 + make -j 32 DESTDIR="$LFS" install + + cd "$BASE_DIR" + rm -rf "$LFS_BUILD/gettext" + touch "$STEPS_DIR/gettext" +fi + # build acl if [ ! -f "$STEPS_DIR/acl" ]; then if [ ! -d "$LFS_BUILD/acl" ]; then @@ -1112,25 +1200,136 @@ if [ ! -f "$STEPS_DIR/acl" ]; then "../configure" \ --prefix=/usr \ - --libexecdir=/usr/libexec \ + --libexecdir=/usr/lib \ --libdir=/usr/lib \ + --with-sysroot=${LFS} \ --host=${LFS_TGT} \ --build=${BUILD_MACHINE_TRIPLET} \ - --with-sysroot=$LFS \ --disable-static \ --cache-file=config.cache make -j 32 make -j 32 DESTDIR=$LFS install - # Remove the libtool archive file because it is harmful for cross compilation - #rm -v $LFS/usr/lib/liblzma.la - cd "$BASE_DIR" rm -rf "$LFS_BUILD/acl" touch "$STEPS_DIR/acl" fi +exit 0 + +# build pcre2 +if [ ! -f "$STEPS_DIR/pcre2" ]; then + if [ ! -d "$LFS_BUILD/pcre2" ]; then + tar -xf "$BASE_DIR/sources/pcre2-10.44.tar.bz2" + mv "pcre2-10.44" "$LFS_BUILD/pcre2" + fi + cd "$LFS_BUILD/pcre2" + + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT + + export CFLAGS_old="$CFLAGS" + export CXXFLAGS_old="$CXXFLAGS" + # use fat LTO objects for static libraries + CFLAGS+=" -ffat-lto-objects" + CXXFLAGS+=" -ffat-lto-objects" + + "../configure" \ + --with-sysroot=${LFS} \ + --host=${LFS_TGT} \ + --build=${BUILD_MACHINE_TRIPLET} \ + --prefix=/usr \ + --enable-jit \ + --enable-pcre2-16 \ + --enable-pcre2-32 \ + --enable-pcre2grep-libbz2 \ + --enable-pcre2grep-libz \ + --enable-pcre2test-libreadline \ + --prefix=/usr \ + --cache-file=config.cache + + make -j 32 + make -j 32 DESTDIR=$LFS install + + cd "$BASE_DIR" + rm -rf "$LFS_BUILD/pcre2" + touch "$STEPS_DIR/pcre2" +fi + +# build libcap-ng (needs swig) +if [ ! -f "$STEPS_DIR/libcap-ng" ]; then + if [ ! -d "$LFS_BUILD/libcap-ng" ]; then + tar -xf "$BASE_DIR/sources/libcap-ng-0.8.5.tar.gz" + mv "libcap-ng-0.8.5" "$LFS_BUILD/libcap-ng" + fi + cd "$LFS_BUILD/libcap-ng" + + autoreconf -fiv + + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT + + # --enable-zos-remote requires libldap + "../configure" \ + --with-sysroot=${LFS} \ + --host=${LFS_TGT} \ + --build=${BUILD_MACHINE_TRIPLET} \ + --prefix="/usr" \ + --without-python \ + --without-python3 \ + --enable-static=no \ + --cache-file=config.cache + + make -j 32 + make -j 32 DESTDIR=$LFS install + + cd "$BASE_DIR" + rm -rf "$LFS_BUILD/libcap-ng" + touch "$STEPS_DIR/libcap-ng" +fi +exit 0 +# build audit +if [ ! -f "$STEPS_DIR/audit-userspace" ]; then + if [ ! -d "$LFS_BUILD/audit-userspace" ]; then + tar -xf "$BASE_DIR/sources/audit-userspace-4.0.2.tar.gz" + mv "audit-userspace-4.0.2" "$LFS_BUILD/audit-userspace" + fi + cd "$LFS_BUILD/audit-userspace" + + autoreconf -fiv + + mkdir -vp build-$LFS_TGT + cd build-$LFS_TGT + + # --enable-zos-remote requires libldap + "../configure" \ + --with-sysroot=${LFS} \ + --host=${LFS_TGT} \ + --build=${BUILD_MACHINE_TRIPLET} \ + --enable-gssapi-krb5=no \ + --enable-systemd=no \ + --disable-zos-remote \ + --libexecdir=/usr/lib/audit \ + --prefix=/usr \ + --runstatedir=/run \ + --sbindir=/usr/bin \ + --sysconfdir=/etc \ + --with-apparmor=yes \ + --with-io_uring=yes \ + --with-libcap-ng=yes \ + --with-python3=no \ + --disable-static \ + --cache-file=config.cache + + make -j 32 + make -j 32 DESTDIR=$LFS install + + cd "$BASE_DIR" + rm -rf "$LFS_BUILD/audit-userspace" + touch "$STEPS_DIR/audit-userspace" +fi + # Postpone texinfo exit 0