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"
|