summaryrefslogtreecommitdiff
path: root/gcc_setup.sh
blob: 22c96ff7665650c49b406965e37552869bcbb74a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/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"