#!/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"