#!/bin/bash # bootstrap.sh - Build project-local GCC toolchain set -e GCC_VERSION=15.2.0 # Use latest stable release TOOLCHAIN_DIR="$(pwd)/toolchain" GCC_PREFIX="${TOOLCHAIN_DIR}/gcc-${GCC_VERSION}" # Check if already built if [ -f "${GCC_PREFIX}/bin/gcc" ]; then echo "GCC ${GCC_VERSION} already built in ${GCC_PREFIX}" echo "To rebuild, remove ${TOOLCHAIN_DIR} and re-run" exit 0 fi # Check system dependencies check_deps() { local missing="" for cmd in make tar wget as ld; do if ! command -v $cmd &> /dev/null; then missing="$missing $cmd" fi done # Check for required libraries for lib in isl mpc; do if ! ldconfig -p | grep -q "lib${lib}\.so"; then missing="$missing lib${lib}" fi done if [ -n "$missing" ]; then echo "ERROR: Missing system dependencies:$missing" echo "On Arch: sudo pacman -S base-devel binutils wget libisl libmpc" exit 1 fi } check_deps echo "Building GCC ${GCC_VERSION} in ${GCC_PREFIX}" echo "This will take ~3-4 minutes on an AMD 7950X..." mkdir -p "${TOOLCHAIN_DIR}" cd "${TOOLCHAIN_DIR}" # Download GCC sources if [ ! -f "gcc-${GCC_VERSION}.tar.xz" ]; then echo "Downloading GCC ${GCC_VERSION}..." # Use mirror redirect (usually faster) wget "https://ftpmirror.gnu.org/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.xz" \ || wget "https://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.xz" fi # Extract if [ ! -d "gcc-${GCC_VERSION}" ]; then echo "Extracting GCC sources..." tar xf "gcc-${GCC_VERSION}.tar.xz" fi cd "gcc-${GCC_VERSION}" # Download prerequisites (GMP, MPFR, MPC, ISL) echo "Downloading GCC prerequisites..." ./contrib/download_prerequisites # Build mkdir -p build cd build echo "Configuring GCC..." ../configure \ --prefix="${GCC_PREFIX}" \ --enable-languages=c \ --with-system-zlib \ --with-linker-hash-style=gnu \ --disable-multilib \ --disable-bootstrap \ --disable-libsanitizer \ --disable-libssp \ --disable-werror \ --disable-cet \ --disable-default-pie \ --disable-default-ssp \ --enable-lto echo "Building GCC (using $(nproc) cores)..." make -j$(nproc) echo "Installing GCC to ${GCC_PREFIX}..." make install echo "" echo "======================================" echo "GCC ${GCC_VERSION} built successfully!" echo "======================================" echo "Toolchain installed in: ${GCC_PREFIX}" echo "" echo "To use it, just run: ./build.sh or ./Bench.sh"