Skip to content

Commit fc9bac9

Browse files
committed
Linux Script Force GCC14
1 parent 3481e8d commit fc9bac9

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

scripts/linux/setupGCC.sh

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/usr/bin/env bash
2+
3+
OFDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
4+
OFDIR="$(realpath "$OF_DIR/../..")"
5+
6+
GCC_VERSION=$(gcc -dumpversion 2>/dev/null)
7+
GCC_VERSION=${GCC_VERSION:-0}
8+
GCC_REQUIRED_VERSION="14"
9+
10+
if [[ "$GCC_VERSION" =~ ^$GCC_REQUIRED_VERSION ]]; then
11+
echo "GCC $GCC_VERSION is already installed."
12+
exit 0
13+
fi
14+
15+
echo "GCC 14 not found. Attempting to install..."
16+
if [[ -f /etc/debian_version ]]; then
17+
sudo apt update
18+
sudo apt install -y software-properties-common
19+
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
20+
sudo apt update && sudo apt install gcc-14 g++-14 -y --allow-unauthenticated
21+
elif [[ -f /etc/redhat-release ]]; then
22+
sudo dnf install gcc14 gcc14-c++ -y
23+
elif [[ -f /etc/arch-release ]]; then
24+
sudo pacman -Syu gcc
25+
elif [[ -f /etc/SuSE-release ]]; then
26+
sudo zypper install gcc14 gcc14-c++
27+
else
28+
echo "Package manager not supported. Compiling from source..."
29+
wget https://ftp.gnu.org/gnu/gcc/gcc-14.0.0/gcc-14.0.0.tar.gz
30+
tar -xvzf gcc-14.0.0.tar.gz && cd gcc-14.0.0
31+
mkdir build && cd build
32+
../configure --prefix=/usr/local/gcc-14 --enable-languages=c,c++ --disable-multilib
33+
make -j$(nproc)
34+
sudo make install
35+
ARCH=$(uname -m)
36+
if [[ "$ARCH" == "x86_64" ]]; then
37+
GCC_PATH="/usr/local/gcc-14/bin"
38+
GCC_LIB_PATH="/usr/local/gcc-14/lib64"
39+
elif [[ "$ARCH" == "aarch64" || "$ARCH" == "arm64" ]]; then
40+
GCC_PATH="/usr/local/gcc-14-arm64/bin"
41+
GCC_LIB_PATH="/usr/local/gcc-14-arm64/lib"
42+
else
43+
echo "Unsupported architecture: $ARCH"
44+
exit 1
45+
fi
46+
USER_SHELL=$(basename "$SHELL")
47+
if [[ "$USER_SHELL" == "bash" ]]; then
48+
PROFILE_FILE="$HOME/.bashrc"
49+
elif [[ "$USER_SHELL" == "zsh" ]]; then
50+
PROFILE_FILE="$HOME/.zshrc"
51+
elif [[ "$USER_SHELL" == "fish" ]]; then
52+
PROFILE_FILE="$HOME/.config/fish/config.fish"
53+
elif [[ -f "$HOME/.profile" ]]; then
54+
PROFILE_FILE="$HOME/.profile" # Works for Alpine Linux
55+
else
56+
PROFILE_FILE="$HOME/.bashrc" # Fallback
57+
fi
58+
echo "export PATH=$GCC_PATH:\$PATH" >> "$PROFILE_FILE"
59+
echo "export LD_LIBRARY_PATH=$GCC_LIB_PATH:\$LD_LIBRARY_PATH" >> "$PROFILE_FILE"
60+
if [[ "$USER_SHELL" != "fish" ]]; then
61+
source "$PROFILE_FILE"
62+
fi
63+
fi

0 commit comments

Comments
 (0)