From 409517b49f530518c3c104cadd23a0111714b219 Mon Sep 17 00:00:00 2001 From: ag-tsotetsi Date: Sun, 22 Mar 2026 21:30:15 +0200 Subject: [PATCH] re-edit --- build.bash | 693 +++++++++++++++++++++++++-------- build.sh | 15 + stage/bootstrap/binutils.bash | 22 ++ stage/bootstrap/gcc.bash | 46 +++ stage/bootstrap/glibc.bash | 31 ++ stage/bootstrap/libstdc++.bash | 22 ++ stage/bootstrap/linux.bash | 12 + stage/toolchain/m4.bash | 17 + utilities.bash | 20 +- version.bash | 34 ++ 10 files changed, 733 insertions(+), 179 deletions(-) create mode 100644 build.sh create mode 100644 stage/bootstrap/binutils.bash create mode 100644 stage/bootstrap/gcc.bash create mode 100644 stage/bootstrap/glibc.bash create mode 100644 stage/bootstrap/libstdc++.bash create mode 100644 stage/bootstrap/linux.bash create mode 100644 stage/toolchain/m4.bash diff --git a/build.bash b/build.bash index 36e9003..a92d8c2 100755 --- a/build.bash +++ b/build.bash @@ -8,165 +8,18 @@ umask 022 . flags.bash . utilities.bash -bootstrap_binutils() { - fetch $BINUTILS_URL - - cd "$SOURCES" && tar xf binutils-$BINUTILS_VERSION.tar.xz && cd binutils-$BINUTILS_VERSION - - mkdir -p build && cd build - - ../configure \ - --prefix="$CROSS" \ - --with-sysroot="$SYSROOT" \ - --target=$TARGET \ - --disable-nls \ - --enable-gprofng=no \ - --disable-werror \ - --enable-new-dtags \ - --enable-default-hash-style=gnu \ - --silent \ - --quiet - - make && make install - - cd "$SOURCES" - rm -rf binutils-$BINUTILS_VERSION -} - -bootstap_gcc() { - fetch $GCC_URL - fetch $GMP_URL - fetch $ISL_URL - fetch $MPC_URL - fetch $MPFR_URL - - cd "$SOURCES" && tar xf gcc-$GCC_VERSION.tar.xz && cd gcc-$GCC_VERSION - - tar xf ../gmp-$GMP_VERSION.tar.xz && mv gmp-$GMP_VERSION gmp - tar xf ../isl-$ISL_VERSION.tar.xz && mv isl-$ISL_VERSION isl - tar xf ../mpc-$MPC_VERSION.tar.gz && mv mpc-$MPC_VERSION mpc - tar xf ../mpfr-$MPFR_VERSION.tar.xz && mv mpfr-$MPFR_VERSION mpfr - - sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64 - - mkdir -p build && cd build - - ../configure \ - --target=$TARGET \ - --prefix="$CROSS" \ - --with-glibc-version=$GLIBC_VERSION \ - --with-sysroot="$SYSROOT" \ - --with-newlib \ - --without-headers \ - --enable-default-pie \ - --enable-default-ssp \ - --disable-nls \ - --disable-shared \ - --disable-multilib \ - --disable-threads \ - --disable-libatomic \ - --disable-libgomp \ - --disable-libquadmath \ - --disable-libssp \ - --disable-libvtv \ - --disable-libstdcxx \ - --enable-languages=c,c++ \ - --silent \ - --quiet - - make && make install - - cd .. - cat gcc/limitx.h gcc/glimits.h gcc/limity.h > "`dirname $($TARGET-gcc -print-libgcc-file-name)`/include/limits.h" - - cd "$SOURCES" && rm -rf gcc-$GCC_VERSION -} - -bootstap_linux() { - fetch $LINUX_URL - - cd "$SOURCES" && tar xf linux-$LINUX_VERSION.tar.xz && cd linux-$LINUX_VERSION - - make mrproper - make headers - find usr/include -type f ! -name '*.h' -delete - cp -r usr/include "$SYSROOT"/usr - - cd "$SOURCES" && rm -rf linux-$LINUX_VERSION -} - -bootstap_glibc() { - fetch $GLIBC_URL - fetch $GLIBC_PATCH_URL - - cd "$SOURCES" && tar xf glibc-$GLIBC_VERSION.tar.xz && cd glibc-$GLIBC_VERSION - - ln -sf ld-linux-x86-64.so.2 "$SYSROOT"/lib/ld-lsb-x86-64.so.3 - - patch -sNp1 -i "$SOURCES"/glibc-fhs-1.patch - - mkdir -p build && cd build - - echo "rootsbindir=/usr/sbin" > configparms - - ../configure \ - --prefix=/usr \ - --host=$TARGET \ - --build=$(../scripts/config.guess) \ - --disable-nscd \ - --disable-nls \ - libc_cv_slibdir=/usr/lib \ - --enable-kernel=$LINUX_VERSION \ - --silent \ - --quiet - make && make DESTDIR="$SYSROOT" install - - sed '/RTLDLIST=/s@/usr@@g' -i "$SYSROOT"/usr/bin/ldd - - cd "$SOURCES" && rm -rf glibc-$GLIBC_VERSION -} - -bootstap_libstdcpp() { - cd "$SOURCES" && tar xf gcc-$GCC_VERSION.tar.xz && cd gcc-$GCC_VERSION - - mkdir -p build && cd build - - ../libstdc++-v3/configure \ - --host=$TARGET \ - --build=$(../config.guess) \ - --prefix=/usr \ - --disable-multilib \ - --disable-nls \ - --disable-libstdcxx-pch \ - --with-gxx-include-dir=/cross/$TARGET/include/c++/$GCC_VERSION \ - --silent \ - --quiet - make && make DESTDIR="$SYSROOT" install - rm -rf "$SYSROOT"/usr/lib/lib{stdc++{,exp,fs},supc++}.la - cd "$SOURCES" && rm -rf gcc-$GCC_VERSION -} + + + toolchain_m4() { - fetch $M4_URL - cd "$SOURCES" && tar xf m4-$M4_VERSION.tar.xz && cd m4-$M4_VERSION - - sed -r '/_GL_EXTERN_C/s/w?memchr|bsearch/(&)/' -i $(find -name \*.in.h) - - ./configure \ - --prefix=/usr \ - --host=$TARGET \ - --build=$(build-aux/config.guess) - - make && make DESTDIR="$SYSROOT" install - - cd "$SOURCES" && rm -rf m4-$M4_VERSION } toolchain_ncurses() { @@ -179,7 +32,9 @@ toolchain_ncurses() { pushd build ../configure \ --prefix="$CROSS" \ - AWK=gawk + AWK=gawk \ + --silent \ + --quiet make -C include make -C progs tic install progs/tic "$CROSS/bin" @@ -197,7 +52,9 @@ toolchain_ncurses() { --without-debug \ --without-ada \ --disable-stripping \ - AWK=gawk + AWK=gawk \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -217,11 +74,13 @@ toolchain_bash() { --prefix=/usr \ --build=$(sh support/config.guess) \ --host=$TARGET \ - --without-bash-malloc + --without-bash-malloc \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install - ln -sv bash "$SYSROOT"/bin/sh + ln -s bash "$SYSROOT"/bin/sh cd "$SOURCES" && rm -rf bash-$BASH_VERSION } @@ -238,7 +97,9 @@ toolchain_coreutils() { --host=$TARGET \ --build=$(build-aux/config.guess) \ --enable-install-program=hostname \ - --enable-no-install-program=kill,uptime + --enable-no-install-program=kill,uptime \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -256,7 +117,9 @@ toolchain_diffutils() { --prefix=/usr \ --host=$TARGET \ gl_cv_func_strcasecmp_works=y \ - --build=$(./build-aux/config.guess) + --build=$(./build-aux/config.guess) \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -275,14 +138,18 @@ toolchain_file() { --disable-bzlib \ --disable-libseccomp \ --disable-xzlib \ - --disable-zlib + --disable-zlib \ + --silent \ + --quiet make popd ./configure \ --prefix=/usr \ --host="$TARGET" \ - --build=$(./config.guess) + --build=$(./config.guess) \ + --silent \ + --quiet make FILE_COMPILE="$(pwd)/build/src/file" && make DESTDIR="$SYSROOT" install @@ -300,7 +167,9 @@ toolchain_findutils() { --prefix=/usr \ --localstatedir=/var/lib/locate \ --host=$TARGET \ - --build=$(build-aux/config.guess) + --build=$(build-aux/config.guess) \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -317,7 +186,9 @@ toolchain_gawk() { ./configure \ --prefix=/usr \ --host=$TARGET \ - --build=$(build-aux/config.guess) + --build=$(build-aux/config.guess) \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -332,7 +203,9 @@ toolchain_grep() { ./configure \ --prefix=/usr \ --host=$TARGET \ - --build=$(build-aux/config.guess) + --build=$(build-aux/config.guess) \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -346,7 +219,9 @@ toolchain_gzip() { ./configure \ --prefix=/usr \ - --host=$TARGET + --host=$TARGET \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -361,7 +236,9 @@ toolchain_make() { ./configure \ --prefix=/usr \ --host=$TARGET \ - --build=$(build-aux/config.guess) + --build=$(build-aux/config.guess) \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -376,7 +253,9 @@ toolchain_patch() { ./configure \ --prefix=/usr \ --host=$TARGET \ - --build=$(build-aux/config.guess) + --build=$(build-aux/config.guess) \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -391,7 +270,9 @@ toolchain_sed() { ./configure \ --prefix=/usr \ --host=$TARGET \ - --build=$(build-aux/config.guess) + --build=$(build-aux/config.guess) \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -406,7 +287,9 @@ toolchain_tar() { ./configure \ --prefix=/usr \ --host=$TARGET \ - --build=$(build-aux/config.guess) + --build=$(build-aux/config.guess) \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -422,7 +305,9 @@ toolchain_xz() { --prefix=/usr \ --host=$TARGET \ --build=$(build-aux/config.guess) \ - --disable-static + --disable-static \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -448,7 +333,9 @@ toolchain_binutils() { --disable-werror \ --enable-64-bit-bfd \ --enable-new-dtags \ - --enable-default-hash-style=gnu + --enable-default-hash-style=gnu \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -488,7 +375,9 @@ toolchain_gcc() { --disable-libssp \ --disable-libvtv \ --enable-languages=c,c++ \ - LDFLAGS_FOR_TARGET=-L"$PWD/$TARGET/libgcc" + LDFLAGS_FOR_TARGET=-L"$PWD/$TARGET/libgcc" \ + --silent \ + --quiet make && make DESTDIR="$SYSROOT" install @@ -497,13 +386,459 @@ toolchain_gcc() { cd "$SOURCES" && rm -rf gcc-$GCC_VERSION } +prechroot_gettext() { + fetch $GETTEXT_URL + + sudo chroot "$SYSROOT" /usr/bin/env -i \ + MAKEFLAGS="$MAKEFLAGS" \ + PATH=/usr/bin:/usr/sbin \ + SOURCES=/sources \ + GETTEXT_VERSION=$GETTEXT_VERSION \ + /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf gettext-$GETTEXT_VERSION.tar.xz && cd gettext-$GETTEXT_VERSION + + ./configure \ + --disable-shared \ + --silent \ + --quiet + + make + + cp gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin + + cd "$SOURCES" && rm -rf gettext-$GETTEXT_VERSION + EOF +} + +prechroot_bison() { + fetch $BISON_URL + + sudo chroot "$SYSROOT" /usr/bin/env -i \ + MAKEFLAGS="$MAKEFLAGS" \ + PATH=/usr/bin:/usr/sbin \ + SOURCES=/sources \ + BISON_VERSION=$BISON_VERSION \ + /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf bison-$BISON_VERSION.tar.xz && cd bison-$BISON_VERSION + + ./configure \ + --prefix=/usr \ + --silent \ + --quiet + + make && make install + + cd "$SOURCES" && rm -rf bison-$BISON_VERSION + EOF +} + +prechroot_perl() { + fetch $PERL_URL + + sudo chroot "$SYSROOT" /usr/bin/env -i \ + MAKEFLAGS="$MAKEFLAGS" \ + PATH=/usr/bin:/usr/sbin \ + SOURCES=/sources \ + PERL_VERSION=$PERL_VERSION \ + /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf perl-$PERL_VERSION.tar.gz && cd perl-$PERL_VERSION + + sh Configure -des \ + -D prefix=/usr \ + -D vendorprefix=/usr \ + -D useshrplib \ + -D privlib=/usr/lib/perl5/$PERL_VERSION/core_perl \ + -D archlib=/usr/lib/perl5/$PERL_VERSION/core_perl \ + -D sitelib=/usr/lib/perl5/$PERL_VERSION/site_perl \ + -D sitearch=/usr/lib/perl5/$PERL_VERSION/site_perl \ + -D vendorlib=/usr/lib/perl5/$PERL_VERSION/vendor_perl \ + -D vendorarch=/usr/lib/perl5/$PERL_VERSION/vendor_perl + + make && make install + + cd "$SOURCES" && rm -rf perl-$PERL_VERSION + EOF +} + +prechroot_python() { + fetch $PYTHON_URL + + sudo chroot "$SYSROOT" /usr/bin/env -i \ + MAKEFLAGS="$MAKEFLAGS" \ + PATH=/usr/bin:/usr/sbin \ + SOURCES=/sources \ + PYTHON_VERSION=$PYTHON_VERSION \ + /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf Python-$PYTHON_VERSION.tar.xz && cd Python-$PYTHON_VERSION + + ./configure \ + --prefix=/usr \ + --enable-shared \ + --without-static-libpython \ + --disable-test-modules \ + --without-ensurepip \ + --silent \ + --quiet + + make && make install + + rm -rf /usr/lib/python$PYTHON_VERSION/test + + cd "$SOURCES" && rm -rf Python-$PYTHON_VERSION + EOF +} + +prechroot_util_linux() { + fetch $UTIL_LINUX_URL + + sudo chroot "$SYSROOT" /usr/bin/env -i \ + MAKEFLAGS="$MAKEFLAGS" \ + PATH=/usr/bin:/usr/sbin \ + SOURCES=/sources \ + UTIL_LINUX_VERSION=$UTIL_LINUX_VERSION \ + /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf util-linux-$UTIL_LINUX_VERSION.tar.xz && cd util-linux-$UTIL_LINUX_VERSION + + mkdir -p /var/lib/hwclock + + ./configure --libdir=/usr/lib \ + --runstatedir=/run \ + --disable-chfn-chsh \ + --disable-login \ + --disable-nologin \ + --disable-su \ + --disable-setpriv \ + --disable-runuser \ + --disable-pylibmount \ + --disable-static \ + --disable-liblastlog2 \ + --without-python \ + ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --silent \ + --quiet + + make && make install + + cd "$SOURCES" && rm -rf util-linux-$UTIL_LINUX_VERSION + EOF +} + +prechroot_cleanup() { + sudo chroot "$SYSROOT" /usr/bin/env -i \ + /usr/bin/bash <<- "EOF" + + rm -rf /usr/share/{info,man,doc}/* + + find /usr/{lib,libexec} -name \*.la -delete + + rm -rf /cross + EOF +} + +chroot_tmpfs_setup() { + sudo chroot "$SYSROOT" /usr/bin/env -i /usr/bin/bash <<- "EOF" + ln -s run /var/run + ln -sfv run/lock /var/lock + + install -dv -m 0750 /root + install -dv -m 1777 /tmp /var/tmp + + ln -s proc/self/mounts /etc/mtab + + cat > /etc/hosts <<- "END_OF_FILE" + 127.0.0.1 localhost axe + ::1 localhost + END_OF_FILE + + cat > /etc/passwd <<- "END_OF_FILE" + root:x:0:0:root:/root:/usr/bin/bash + uuidd:x:6:6::/dev/null:/usr/bin/nologin + messagebus:x:7:7::/run/dbus:/usr/bin/nologin + nobody:x:65534:65534::/dev/null:/usr/bin/nologin + END_OF_FILE + + cat > /etc/group <<- "END_OF_FILE" + root:x:0: + tty:x:1: + audio:x:2: + video:x:3: + input:x:4: + wheel:x:5: + uuidd:x:6: + messagebus:x:7: + users:x:999: + nogroup:x:65534: + END_OF_FILE + EOF +} + +chroot_iana_etc() { + fetch $IANA_ETC_URL + + sudo chroot "$SYSROOT" /usr/bin/env -i MAKEFLAGS="$MAKEFLAGS" PATH=/usr/bin:/usr/sbin SOURCES=/sources IANA_ETC_VERSION=$IANA_ETC_VERSION /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf iana-etc-$IANA_ETC_VERSION.tar.gz && cd iana-etc-$IANA_ETC_VERSION + + cp services protocols /etc + + cd "$SOURCES" && rm -rf iana-etc-$IANA_ETC_VERSION + EOF +} + +chroot_glibc() { + fetch $TZDATA_URL + + sudo chroot "$SYSROOT" /usr/bin/env -i MAKEFLAGS="$MAKEFLAGS" PATH=/usr/bin:/usr/sbin SOURCES=/sources GLIBC_VERSION=$GLIBC_VERSION LINUX_VERSION=$LINUX_VERSION TZDATA_VERSION=$TZDATA_VERSION /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf glibc-$GLIBC_VERSION.tar.xz && cd glibc-$GLIBC_VERSION + + patch -Np1 -i ../glibc-fhs-1.patch + + mkdir -p build && cd build + + echo "rootsbindir=/usr/sbin" > configparms + + ../configure \ + --prefix=/usr \ + --disable-werror \ + --disable-nscd \ + libc_cv_slibdir=/usr/lib \ + --enable-stack-protector=strong \ + --enable-kernel= \ + --disable-nls \ + --enable-kernel=$LINUX_VERSION \ + --silent \ + --quiet + + make && make install + + touch /etc/ld.so.conf + sed '/RTLDLIST=/s@/usr@@g' -i /usr/bin/ldd + + cat > /etc/nsswitch.conf <<- "END_OF_FILE" + passwd: files + group: files + shadow: files + + hosts: files dns + networks: files + + protocols: files + services: files + ethers: files + rpc: files + END_OF_FILE + + tar xf $SOURCES/tzdata$TZDATA_VERSION.tar.gz + + ZONEINFO=/usr/share/zoneinfo + + mkdir -p $ZONEINFO/{posix,right} + + for tz in etcetera southamerica northamerica europe africa antarctica asia australasia backward; do + zic -L /dev/null -d $ZONEINFO ${tz} + zic -L /dev/null -d $ZONEINFO/posix ${tz} + zic -L leapseconds -d $ZONEINFO/right ${tz} + done + + cp zone.tab zone1970.tab iso3166.tab $ZONEINFO + + zic -d $ZONEINFO -p Africa/Johannesburg + + unset ZONEINFO tz + + ln -sf /usr/share/zoneinfo/Africa/Johannesburg /etc/localtime + + cat > /etc/ld.so.conf <<- "END_OF_FILE" + /usr/local/lib + /opt/lib + include /etc/ld.so.conf.d/*.conf + END_OF_FILE + + mkdir -p /etc/ld.so.conf.d + + cd "$SOURCES" && rm -rf glibc-$GLIBC_VERSION + EOF +} + +chroot_zlib() { + fetch $ZLIB_URL + + sudo chroot "$SYSROOT" /usr/bin/env -i MAKEFLAGS="$MAKEFLAGS" PATH=/usr/bin:/usr/sbin SOURCES=/sources ZLIB_VERSION=$ZLIB_VERSION /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf zlib-$ZLIB_VERSION.tar.gz && cd zlib-$ZLIB_VERSION + + ./configure \ + --prefix=/usr + + make && make install + + rm -f /usr/lib/libz.a + + cd "$SOURCES" && rm -rf zlib-$ZLIB_VERSION + EOF +} + +chroot_bzip2() { + fetch $BZIP2_URL + + sudo chroot "$SYSROOT" /usr/bin/env -i MAKEFLAGS="$MAKEFLAGS" PATH=/usr/bin:/usr/sbin SOURCES=/sources BZIP2_VERSION=$BZIP2_VERSION /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf bzip2-$BZIP2_VERSION.tar.gz && cd bzip2-$BZIP2_VERSION + + sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile + + make -f Makefile-libbz2_so + + make clean + + make && make PREFIX=/usr install + + cp -a libbz2.so.* /usr/lib + + ln -sf libbz2.so.1.0.8 /usr/lib/libbz2.so + + ln -sf libbz2.so.1.0.8 /usr/lib/libbz2.so.1 + + cp bzip2-shared /usr/bin/bzip2 + + for i in /usr/bin/{bzcat,bunzip2}; do + ln -sf bzip2 $i + done + + rm -f /usr/lib/libbz2.a + + cd "$SOURCES" && rm -rf bzip2-$BZIP2_VERSION + EOF +} + +chroot_xz() { + sudo chroot "$SYSROOT" /usr/bin/env -i MAKEFLAGS="$MAKEFLAGS" PATH=/usr/bin:/usr/sbin SOURCES=/sources XZ_VERSION=$XZ_VERSION /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf xz-$XZ_VERSION.tar.xz && cd xz-$XZ_VERSION + + ./configure \ + --prefix=/usr \ + --disable-static + + make && make install + + cd "$SOURCES" && rm -rf xz-$XZ_VERSION + EOF +} + +chroot_zstd() { + fetch $ZSTD_URL + + sudo chroot "$SYSROOT" /usr/bin/env -i MAKEFLAGS="$MAKEFLAGS" PATH=/usr/bin:/usr/sbin SOURCES=/sources ZSTD_VERSION=$ZSTD_VERSION /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf zstd-$ZSTD_VERSION.tar.gz && cd zstd-$ZSTD_VERSION + + make prefix=/usr + make prefix=/usr install + + rm /usr/lib/libzstd.a + + cd "$SOURCES" && rm -rf zstd-$ZSTD_VERSION + EOF +} + +chroot_file() { + fetch $FILE_URL + + sudo chroot "$SYSROOT" /usr/bin/env -i MAKEFLAGS="$MAKEFLAGS" PATH=/usr/bin:/usr/sbin SOURCES=/sources FILE_VERSION=$FILE_VERSION /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf file-$FILE_VERSION.tar.gz && cd file-$FILE_VERSION + + ./configure \ + --prefix=/usr + + make && make install + + cd "$SOURCES" && rm -rf file-$FILE_VERSION + EOF +} + +chroot_readline() { + fetch $READLINE_URL + + sudo chroot "$SYSROOT" /usr/bin/env -i MAKEFLAGS="$MAKEFLAGS" PATH=/usr/bin:/usr/sbin SOURCES=/sources READLINE_VERSION=$READLINE_VERSION /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf readline-$READLINE_VERSION.tar.gz && cd readline-$READLINE_VERSION + + sed -i '/MV.*old/d' Makefile.in + + sed -i '/{OLDSUFF}/c:' support/shlib-install + + sed -i 's/-Wl,-rpath,[^ ]*//' support/shobj-conf + + sed -e '270a\ + else\ + chars_avail = 1;' \ + -e '288i\ result = -1;' \ + -i.orig input.c + + ./configure \ + --prefix=/usr \ + --disable-static \ + --with-curses + + make SHLIB_LIBS="-lncursesw" && make install + + cd "$SOURCES" && rm -rf readline-$READLINE_VERSION + EOF +} + +chroot_pcre2() { + fetch $PCRE2_URL + + sudo chroot "$SYSROOT" /usr/bin/env -i MAKEFLAGS="$MAKEFLAGS" PATH=/usr/bin:/usr/sbin SOURCES=/sources PCRE2_VERSION=$PCRE2_VERSION /usr/bin/bash <<- "EOF" + set -euo pipefail + + cd "$SOURCES" && tar xf pcre2-$PCRE2_VERSION.tar.gz && cd pcre2-$PCRE2_VERSION + + ./configure \ + --prefix=/usr \ + --enable-unicode \ + --enable-jit \ + --enable-pcre2-16 \ + --enable-pcre2-32 \ + --enable-pcre2grep-libz \ + --enable-pcre2grep-libbz2 \ + --enable-pcre2test-libreadline \ + --disable-static + + make && make install + + cd "$SOURCES" && rm -rf pcre2-$PCRE2_VERSION + EOF +} + #create_sysroot #bootstrap_binutils #bootstap_gcc #bootstap_linux #bootstap_glibc #bootstap_libstdcpp -toolchain_m4 +#toolchain_m4 #toolchain_ncurses #toolchain_bash #toolchain_coreutils @@ -521,4 +856,20 @@ toolchain_m4 #toolchain_binutils #toolchain_gcc #change_owner -#do_mount \ No newline at end of file +#do_mount +#prechroot_gettext +#prechroot_bison +#prechroot_perl +#prechroot_python +#prechroot_util_linux +#prechroot_cleanup +#do_unmount +#chroot_iana_etc +#chroot_glibc +#chroot_zlib +#chroot_bzip2 +#chroot_xz +#chroot_zstd +#chroot_file +#chroot_readline +#chroot_pcre2 \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..0b9054e --- /dev/null +++ b/build.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +set -euo pipefail + +umask 022 + +. version.bash +. flags.bash +. utilities.bash + + +STAGE="$1" +PACKAGE="$2" + +. "stage/${MODE}/${PACKAGE}.bash" \ No newline at end of file diff --git a/stage/bootstrap/binutils.bash b/stage/bootstrap/binutils.bash new file mode 100644 index 0000000..0082164 --- /dev/null +++ b/stage/bootstrap/binutils.bash @@ -0,0 +1,22 @@ + +fetch $BINUTILS_URL + +cd "$SOURCES" && tar xf binutils-$BINUTILS_VERSION.tar.xz && cd binutils-$BINUTILS_VERSION + +mkdir -p build && cd build + +../configure \ + --prefix="$CROSS" \ + --with-sysroot="$SYSROOT" \ + --target=$TARGET \ + --disable-nls \ + --enable-gprofng=no \ + --disable-werror \ + --enable-new-dtags \ + --enable-default-hash-style=gnu \ + --silent \ + --quiet + +make && make install + +cd "$SOURCES" && rm -rf binutils-$BINUTILS_VERSION \ No newline at end of file diff --git a/stage/bootstrap/gcc.bash b/stage/bootstrap/gcc.bash new file mode 100644 index 0000000..0bc1df1 --- /dev/null +++ b/stage/bootstrap/gcc.bash @@ -0,0 +1,46 @@ + +fetch $GCC_URL +fetch $GMP_URL +fetch $ISL_URL +fetch $MPC_URL +fetch $MPFR_URL + +cd "$SOURCES" && tar xf gcc-$GCC_VERSION.tar.xz && cd gcc-$GCC_VERSION + +tar xf ../gmp-$GMP_VERSION.tar.xz && mv gmp-$GMP_VERSION gmp +tar xf ../isl-$ISL_VERSION.tar.xz && mv isl-$ISL_VERSION isl +tar xf ../mpc-$MPC_VERSION.tar.gz && mv mpc-$MPC_VERSION mpc +tar xf ../mpfr-$MPFR_VERSION.tar.xz && mv mpfr-$MPFR_VERSION mpfr + +sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64 + +mkdir -p build && cd build + +../configure \ + --target=$TARGET \ + --prefix="$CROSS" \ + --with-glibc-version=$GLIBC_VERSION \ + --with-sysroot="$SYSROOT" \ + --with-newlib \ + --without-headers \ + --enable-default-pie \ + --enable-default-ssp \ + --disable-nls \ + --disable-shared \ + --disable-multilib \ + --disable-threads \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libvtv \ + --disable-libstdcxx \ + --enable-languages=c,c++ \ + --silent \ + --quiet + +make && make install + +cd .. && cat gcc/limitx.h gcc/glimits.h gcc/limity.h > "`dirname $($TARGET-gcc -print-libgcc-file-name)`/include/limits.h" + +cd "$SOURCES" && rm -rf gcc-$GCC_VERSION \ No newline at end of file diff --git a/stage/bootstrap/glibc.bash b/stage/bootstrap/glibc.bash new file mode 100644 index 0000000..8ef2e22 --- /dev/null +++ b/stage/bootstrap/glibc.bash @@ -0,0 +1,31 @@ + +fetch $GLIBC_URL +fetch $GLIBC_PATCH_URL + +cd "$SOURCES" && tar xf glibc-$GLIBC_VERSION.tar.xz && cd glibc-$GLIBC_VERSION + +ln -fs ld-linux-x86-64.so.2 "$SYSROOT"/lib/ld-lsb-x86-64.so.3 + +patch -sNp1 -i "$SOURCES"/glibc-fhs-1.patch + +mkdir -p build && cd build + +echo "rootsbindir=/usr/sbin" > configparms + +../configure \ + --prefix=/usr \ + --host=$TARGET \ + --build=$(../scripts/config.guess) \ + --disable-nscd \ + --disable-nls \ + libc_cv_slibdir=/usr/lib \ + --enable-kernel=$LINUX_VERSION \ + --silent \ + --quiet + + +make && make DESTDIR="$SYSROOT" install + +sed '/RTLDLIST=/s@/usr@@g' -i "$SYSROOT"/usr/bin/ldd + +cd "$SOURCES" && rm -rf glibc-$GLIBC_VERSION \ No newline at end of file diff --git a/stage/bootstrap/libstdc++.bash b/stage/bootstrap/libstdc++.bash new file mode 100644 index 0000000..60b750e --- /dev/null +++ b/stage/bootstrap/libstdc++.bash @@ -0,0 +1,22 @@ + +cd "$SOURCES" && tar xf gcc-$GCC_VERSION.tar.xz && cd gcc-$GCC_VERSION + +mkdir -p build && cd build + +../libstdc++-v3/configure \ + --host=$TARGET \ + --build=$(../config.guess) \ + --prefix=/usr \ + --disable-multilib \ + --disable-nls \ + --disable-libstdcxx-pch \ + --with-gxx-include-dir=/cross/$TARGET/include/c++/$GCC_VERSION \ + --silent \ + --quiet + + +make && make DESTDIR="$SYSROOT" install + +rm -rf "$SYSROOT"/usr/lib/lib{stdc++{,exp,fs},supc++}.la + +cd "$SOURCES" && rm -rf gcc-$GCC_VERSION \ No newline at end of file diff --git a/stage/bootstrap/linux.bash b/stage/bootstrap/linux.bash new file mode 100644 index 0000000..0709764 --- /dev/null +++ b/stage/bootstrap/linux.bash @@ -0,0 +1,12 @@ + +fetch $LINUX_URL + +cd "$SOURCES" && tar xf linux-$LINUX_VERSION.tar.xz && cd linux-$LINUX_VERSION + +make mrproper && make headers + +find usr/include -type f ! -name '*.h' -delete + +cp -r usr/include "$SYSROOT"/usr + +cd "$SOURCES" && rm -rf linux-$LINUX_VERSION \ No newline at end of file diff --git a/stage/toolchain/m4.bash b/stage/toolchain/m4.bash new file mode 100644 index 0000000..82bc932 --- /dev/null +++ b/stage/toolchain/m4.bash @@ -0,0 +1,17 @@ + +fetch $M4_URL + +cd "$SOURCES" && tar xf m4-$M4_VERSION.tar.xz && cd m4-$M4_VERSION + +sed -r '/_GL_EXTERN_C/s/w?memchr|bsearch/(&)/' -i $(find -name \*.in.h) + +./configure \ + --prefix=/usr \ + --host=$TARGET \ + --build=$(build-aux/config.guess) \ + --silent \ + --quiet + +make && make DESTDIR="$SYSROOT" install + +cd "$SOURCES" && rm -rf m4-$M4_VERSION \ No newline at end of file diff --git a/utilities.bash b/utilities.bash index 4a41a51..0bf84f5 100644 --- a/utilities.bash +++ b/utilities.bash @@ -10,13 +10,13 @@ create_directories() { ln -fs usr/$directory "$SYSROOT"/$directory done - ln -s usr/lib "$SYSROOT"/lib64 + ln -fs usr/lib "$SYSROOT"/lib64 - ln -s run "$SYSROOT"/var/run - ln -sfv run/lock "$SYSROOT"/var/lock + ln -fs run "$SYSROOT"/var/run + ln -fs run/lock "$SYSROOT"/var/lock - install -dv -m 0750 "$SYSROOT"/root - install -dv -m 1777 "$SYSROOT"/tmp "$SYSROOT"/var/tmp + install -d -m 0750 "$SYSROOT"/root + install -d -m 1777 "$SYSROOT"/tmp "$SYSROOT"/var/tmp fi } @@ -57,16 +57,17 @@ create_sysroot() { } change_owner() { - sudo chown -R root:root "$SYSROOT"/{etc,cross,usr,dev,proc,sys,run,var} + sudo chown -R root:root "$SYSROOT"/{bin,cross,dev,etc,lib,lib64,proc,sys,root,run,sbin,sys,tmp,usr,var} } do_mount() { if ! mountpoint -q "$SYSROOT/dev"; then sudo mount --bind /dev "$SYSROOT"/dev - sudo mount -t devpts devpts -o gid=5,mode=0620 "$SYSROOT"/dev/pts + sudo mount -t devpts devpts -o gid=1,mode=0620 "$SYSROOT"/dev/pts sudo mount -t proc proc "$SYSROOT"/proc sudo mount -t sysfs sysfs "$SYSROOT"/sys sudo mount -t tmpfs tmpfs "$SYSROOT"/run + if [ -h "$SYSROOT"/dev/shm ]; then sudo install -d -m 1777 "$SYSROOT"$(realpath /dev/shm) else @@ -76,7 +77,10 @@ do_mount() { } do_unmount() { - sudo umount -R "$SYSROOT/" + sudo mountpoint -q "$SYSROOT"/dev/shm + sudo umount "$SYSROOT"/dev/shm + sudo umount "$SYSROOT"/dev/pts + sudo umount "$SYSROOT"/{sys,proc,run,dev} } fetch() { diff --git a/version.bash b/version.bash index 2bfd48b..b65dd21 100644 --- a/version.bash +++ b/version.bash @@ -74,3 +74,37 @@ export XZ_URL=https://github.com//tukaani-project/xz/releases/download/v$XZ_VERS export GETTEXT_VERSION=1.0 export GETTEXT_URL=https://mirror.ufs.ac.za/gnu/gettext/gettext-$GETTEXT_VERSION.tar.xz + +export BISON_VERSION=3.8.2 +export BISON_URL=https://mirror.ufs.ac.za/gnu/bison/bison-$BISON_VERSION.tar.xz + +export PERL_VERSION=5.42.0 +export PERL_URL=https://www.cpan.org/src/5.0/perl-$PERL_VERSION.tar.gz + +export PYTHON_VERSION=3.14.3 +export PYTHON_URL=https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz + +export UTIL_LINUX_VERSION=2.41.3 +export UTIL_LINUX_URL=https://www.kernel.org/pub/linux/utils/util-linux/v2.41/util-linux-$UTIL_LINUX_VERSION.tar.xz + +export IANA_ETC_VERSION=20260202 +export IANA_ETC_URL=https://github.com/Mic92/iana-etc/releases/download/$IANA_ETC_VERSION/iana-etc-$IANA_ETC_VERSION.tar.gz + +export TZDATA_VERSION=2025c +export TZDATA_URL=https://www.iana.org/time-zones/repository/releases/tzdata$TZDATA_VERSION.tar.gz + +export ZLIB_VERSION=1.3.2 +export ZLIB_URL=https://zlib.net/fossils/zlib-$ZLIB_VERSION.tar.gz + +export BZIP2_VERSION=1.0.8 +export BZIP2_URL=https://www.sourceware.org/pub/bzip2/bzip2-$BZIP2_VERSION.tar.gz + +export ZSTD_VERSION=1.5.7 +export ZSTD_URL=https://github.com/facebook/zstd/releases/download/v$ZSTD_VERSION/zstd-$ZSTD_VERSION.tar.gz + +export READLINE_VERSION=8.3 +export READLINE_URL=https://mirror.ufs.ac.za/gnu/readline/readline-$READLINE_VERSION.tar.gz + +export PCRE2_VERSION=10.47 +export PCRE2_URL=https://github.com/PCRE2Project/pcre2/releases/download/pcre2-$PCRE2_VERSION/pcre2-$PCRE2_VERSION.tar.gz +