From 8a3e9a03e81b9129ca5a13729a666248098efcd4 Mon Sep 17 00:00:00 2001 From: Denis Benato Date: Thu, 12 Dec 2024 13:41:56 +0100 Subject: [PATCH] tested working --- .gitattributes | 42 ++++++++++ build-arm-virtio.sh | 5 ++ build-host-tools.sh | 59 ++++++++++++++ build-toolchain.sh | 185 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 291 insertions(+) create mode 100644 .gitattributes create mode 100644 build-host-tools.sh create mode 100755 build-toolchain.sh diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..fef60f3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,42 @@ +sources/audit-userspace-4.0.2.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/binutils-2.43.tar.zst filter=lfs diff=lfs merge=lfs -text +sources/gettext-0.23.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/grep-3.11.tar.xz filter=lfs diff=lfs merge=lfs -text +sources/swig-4.3.0.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/openssl-ca-dir.patch filter=lfs diff=lfs merge=lfs -text +sources/coreutils-9.5.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/libcap-ng-0.8.5.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/libiconv-1.17.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/m4-1.4.19.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/mpfr-4.2.1.tar.xz filter=lfs diff=lfs merge=lfs -text +sources/attr-2.5.2.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/libxcrypt-4.4.36.tar.xz filter=lfs diff=lfs merge=lfs -text +sources/ncurses.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/zlib-1.3.1.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/check-0.15.2.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/gzip-1.13.tar.xz filter=lfs diff=lfs merge=lfs -text +sources/patch-2.7.6.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/readline-8.2.13.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/xz-5.6.3.tar.xz filter=lfs diff=lfs merge=lfs -text +sources/file-5.46.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/findutils-4.10.0.tar.xz filter=lfs diff=lfs merge=lfs -text +sources/gmp-6.3.0.tar.xz filter=lfs diff=lfs merge=lfs -text +sources/libseccomp-2.5.5.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/make-4.4.1.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/libcap-2.73.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/mpc-1.3.1.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/bzip2-1.0.8.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/cloog-0.18.4.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/gcc-14.2.0.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/glibc-2.40.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/isl-0.27.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/acl-2.3.2.tar.xz filter=lfs diff=lfs merge=lfs -text +sources/diffutils-3.10.tar.xz filter=lfs diff=lfs merge=lfs -text +sources/linux-6.12.1.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/pcre2-10.44.tar.bz2 filter=lfs diff=lfs merge=lfs -text +sources/texinfo-7.1.1.tar.xz filter=lfs diff=lfs merge=lfs -text +sources/bash-5.2.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/gawk-5.3.1.tar.xz filter=lfs diff=lfs merge=lfs -text +sources/openssl-3.4.0.tar.gz filter=lfs diff=lfs merge=lfs -text +sources/sed-4.9.tar.xz filter=lfs diff=lfs merge=lfs -text +sources/tar-1.35.tar.xz filter=lfs diff=lfs merge=lfs -text diff --git a/build-arm-virtio.sh b/build-arm-virtio.sh index 2de12e9..de63cd8 100755 --- a/build-arm-virtio.sh +++ b/build-arm-virtio.sh @@ -5,6 +5,11 @@ export TARGET_TRIPLET_VENDOR="lfs" export TARGET_TRIPLET_OS="linux" export TARGET_TRIPLET_GNUEABI="gnueabi" +# See https://mesonbuild.com/Reference-tables.html#cpu-families +export CPU_FAMILY="arm" +export CPU="arm" +export TARGET_ENDIANNESS="little" + # Pick one: #linux-aarch64 linux-alpha-gcc linux-aout linux-arm64ilp32 #linux-arm64ilp32-clang linux-armv4 linux-c64xplus linux-elf linux-generic32 diff --git a/build-host-tools.sh b/build-host-tools.sh new file mode 100644 index 0000000..14d95a1 --- /dev/null +++ b/build-host-tools.sh @@ -0,0 +1,59 @@ +#!/bin/bash + + + +# build m4 +if [ ! -f "$STEPS_DIR/m4-tool" ]; then + if [ ! -d "$LFS_BUILD/m4" ]; then + tar -xzf "$BASE_DIR/sources/m4-1.4.19.tar.gz" + mv "m4-1.4.19" "$LFS_BUILD/m4" + fi + cd "$LFS_BUILD/m4" + + mkdir -vp build-$BUILD_MACHINE_TRIPLET + cd build-$BUILD_MACHINE_TRIPLET + + echo "rootsbindir=/usr/sbin" > configparms + + "../configure" \ + --prefix=/usr \ + --build=${BUILD_MACHINE_TRIPLET} \ + --host=${BUILD_MACHINE_TRIPLET} \ + --with-build-cc + + make -j 32 + make DESTDIR=$LFS_TOOLS install + + "strip" --strip-unneeded $LFS_TOOLS/usr/bin/m4 + + cd "$BASE_DIR" + #rm -rf "$LFS_BUILD/m4" # leave the directory there for the following compilation + touch "$STEPS_DIR/m4-tool" +fi + +# build bash +if [ ! -f "$STEPS_DIR/bash-tools" ]; then + if [ ! -d "$LFS_BUILD/bash" ]; then + tar -xzf "$BASE_DIR/sources/bash-5.2.tar.gz" + mv "bash-5.2" "$LFS_BUILD/bash" + fi + cd "$LFS_BUILD/bash" + + mkdir -vp build-$BUILD_MACHINE_TRIPLET + cd build-$BUILD_MACHINE_TRIPLET + + "../configure" \ + --prefix=$LFS_TOOLS \ + --host=${BUILD_MACHINE_TRIPLET} \ + --build=${BUILD_MACHINE_TRIPLET} \ + --without-bash-malloc \ + --enable-threads \ + --without-curses + + make -j 32 + make install + + cd "$BASE_DIR" + #rm -rf "$LFS_BUILD/bash" # leave the directory there for the following compilation + touch "$STEPS_DIR/bash-tools" +fi diff --git a/build-toolchain.sh b/build-toolchain.sh new file mode 100755 index 0000000..38ca8e1 --- /dev/null +++ b/build-toolchain.sh @@ -0,0 +1,185 @@ +#!/bin/bash + +# Function to handle errors +error_handler() { + local exit_code=$? + local line_number=$1 + local file_name=$2 + echo "Error in file: $file_name, line: $line_number, reason: Command exited with status $exit_code" +} + +# Set the trap to catch errors +trap 'error_handler $LINENO $0' ERR + +set -eo pipefail + +export BUILDER_ARCH="x86_64" +export TOOLCHAIN_TRIPLET="$BUILDER_ARCH-linux-musl" + +export LINUX_VERSION="6.12.1" + +# automatic +export BASE_DIR=$(pwd) +export TOOLCHAIN_DIR="$BASE_DIR/out/$TOOLCHAIN_TRIPLET/toolchain/" +export BUILD_DIR="$TOOLCHAIN_DIR/../build" +export TOOLCHAIN_SYSROOT="$TOOLCHAIN_DIR/../sysroot/" + +export PATH="$TOOLCHAIN_DIR/bin/:$PATH" + +# Create the target directory +mkdir -vp "${TOOLCHAIN_DIR}" +mkdir -vp "${BUILD_DIR}" +mkdir -vp "${TOOLCHAIN_SYSROOT}" + +export BUILD_MACHINE_TRIPLET=$(gcc -dumpmachine) +#export TARGET_MACHINE_TRIPLET=$LFS_TGT + +## Build binutils +#if [ ! -d "$BUILD_DIR/binutils" ]; then +# tar -xf "$BASE_DIR/sources/binutils-2.43.tar.zst" +# mv "binutils-2.43" "$BUILD_DIR/binutils" +#fi +#cd "$BUILD_DIR/binutils" +#mkdir -vp "build-$TOOLCHAIN_TRIPLET" +#cd "build-$TOOLCHAIN_TRIPLET" +#"../configure" \ +# --prefix=$TOOLCHAIN_DIR \ +# --with-sysroot=$TOOLCHAIN_SYSROOT \ +# --target=$TOOLCHAIN_TRIPLET \ +# --with-gnu-as \ +# --with-gnu-ld \ +# --enable-ld=default \ +# --disable-shared \ +# --disable-nls \ +# --enable-gprofng=no \ +# --disable-werror \ +# --enable-new-dtags \ +# --disable-multilib \ +# --disable-libquadmath \ +# --disable-libquadmath-support \ +# --disable-plugins \ +# --enable-deterministic-archives \ +# --enable-default-hash-style=gnu +##make configure-host +#make -j 32 +#make -j 32 install +#cd "$BASE_DIR" +# +## Install kernel headers +#if [ ! -d "$BUILD_DIR/linux" ]; then +# tar -xzf "$BASE_DIR/sources/linux-$LINUX_VERSION.tar.gz" +# mv "linux-$LINUX_VERSION" "$BUILD_DIR/linux" +#fi +#cd "$BUILD_DIR/linux" +#make mrproper +#make headers_install ARCH="$BUILDER_ARCH" INSTALL_HDR_PATH="$TOOLCHAIN_DIR/" +#cd "$BASE_DIR" +# +# +## Build gcc +#export CFLAGS="$CFLAGS -static " +#export LDFLAGS="$LDFLAGS -Bstatic " +#bash unpack-gcc.sh "$BUILD_DIR" +#cd "$BUILD_DIR/gcc/" +#mkdir -vp "build-$-step1" +#cd "build-$-step1" +#"../configure" \ +# --target=$TOOLCHAIN_TRIPLET \ +# --host=${BUILD_MACHINE_TRIPLET} \ +# --build=${BUILD_MACHINE_TRIPLET} \ +# --prefix=$TOOLCHAIN_DIR \ +# --with-glibc-version=2.40 \ +# --with-sysroot=$TOOLCHAIN_SYSROOT \ +# --with-newlib \ +# --disable-shared \ +# --disable-gdbtk \ +# --without-headers \ +# --enable-default-pie \ +# --enable-default-ssp \ +# --disable-nls \ +# --disable-multilib \ +# --disable-threads \ +# --disable-libatomic \ +# --disable-libmudflap \ +# --disable-libgomp \ +# --disable-libquadmath \ +# --disable-libquadmath-support \ +# --disable-libssp \ +# --disable-libvtv \ +# --disable-libstdcxx \ +# --disable-decimal-float \ +# --disable-libsanitizer \ +# --enable-languages=c +#make -j 32 +#make -j 32 install +#cd "$BASE_DIR" +# +## From now on use +#export BUILD_CC=gcc +#export CC="$TOOLCHAIN_TRIPLET-gcc" +#export CXX="$TOOLCHAIN_TRIPLET-g++" +#export AS="$TOOLCHAIN_TRIPLET-as" +#export LD="$TOOLCHAIN_TRIPLET-ld" +#export AR="$TOOLCHAIN_TRIPLET-ar" +#export RANLIB="$TOOLCHAIN_TRIPLET-ranlib" +#export STRIP="$TOOLCHAIN_TRIPLET-strip" +#export OBJDUMP="$TOOLCHAIN_TRIPLET-objdump" +## remove hardening options for building libraries +#export CFLAGS="-U_FORTIFY_SOURCE -O2 -static " +#export CPPFLAGS="-U_FORTIFY_SOURCE -O2 -static" +#export LDFLAGS=" -Bstatic " +#export LD_LIBRARY_PATH_old="$LD_LIBRARY_PATH" +#unset LD_LIBRARY_PATH +# +## build musl +#if [ ! -d "$BUILD_DIR/musl" ]; then +# tar -xzf "$BASE_DIR/sources/musl-1.2.5.tar.gz" +# mv "musl-1.2.5" "$BUILD_DIR/musl" +#fi +#cd "$BUILD_DIR/musl" +#mkdir -vp "build-$TOOLCHAIN_TRIPLET" +#cd "build-$TOOLCHAIN_TRIPLET" +#"../configure" --prefix=/ +## CROSS_COMPILE="${TOOLCHAIN_TRIPLET}-" \ +## --target=${TOOLCHAIN_TRIPLET} +# +#make -j 32 +#DESTDIR="${TOOLCHAIN_DIR}" make install +#cd "$BASE_DIR" + +# build gcc (step2) +export CFLAGS="$CFLAGS -static " +export LDFLAGS="$LDFLAGS -Bstatic " +bash unpack-gcc.sh "$BUILD_DIR" +cd "$BUILD_DIR/gcc/" +mkdir -vp "build-step2" +cd "build-step2" +"../configure" \ + --target=$TOOLCHAIN_TRIPLET \ + --build=${TOOLCHAIN_TRIPLET} \ + --prefix=$TOOLCHAIN_DIR \ + --with-glibc-version=2.40 \ + --with-sysroot=$TOOLCHAIN_SYSROOT \ + --with-newlib \ + --disable-shared \ + --disable-gdbtk \ + --without-headers \ + --enable-default-pie \ + --enable-default-ssp \ + --disable-nls \ + --disable-multilib \ + --disable-threads \ + --disable-libatomic \ + --disable-libmudflap \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libquadmath-support \ + --disable-libssp \ + --disable-libvtv \ + --disable-libstdcxx \ + --disable-decimal-float \ + --disable-libsanitizer \ + --enable-languages=c +make +make -j 32 install +cd "$BASE_DIR"