- Detecta automaticamente o home do usuário atual - Substitui /home/gbuser hardcoded por $USER_HOME - Funciona em qualquer máquina (dev local, CI, etc)
79 lines
No EOL
2.2 KiB
Bash
Executable file
79 lines
No EOL
2.2 KiB
Bash
Executable file
#!/bin/bash
|
|
set -e
|
|
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo "Run as root (use sudo)"
|
|
exit 1
|
|
fi
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
echo "Installing runtime dependencies first..."
|
|
bash "$SCRIPT_DIR/DEPENDENCIES.sh"
|
|
|
|
echo "Installing dev/build dependencies..."
|
|
OS=$(grep -oP '(?<=^ID=).+' /etc/os-release 2>/dev/null | tr -d '"' || echo "unknown")
|
|
|
|
install_debian() {
|
|
apt-get install -y -qq \
|
|
clang lld build-essential pkg-config libssl-dev libpq-dev cmake git \
|
|
libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev libjavascriptcoregtk-4.1-dev \
|
|
libayatana-appindicator3-dev librsvg2-dev libsoup-3.0-dev
|
|
}
|
|
|
|
install_fedora() {
|
|
dnf install -y -q \
|
|
clang lld gcc gcc-c++ make pkg-config openssl-devel postgresql-devel cmake git \
|
|
glib2-devel gobject-introspection-devel gtk3-devel webkit2gtk3-devel \
|
|
javascriptcoregtk-devel libappindicator-gtk3-devel librsvg2-devel libsoup3-devel
|
|
}
|
|
|
|
install_arch() {
|
|
pacman -Sy --noconfirm \
|
|
clang lld gcc make pkg-config openssl libpq cmake git \
|
|
glib2 gtk3 webkit2gtk4 javascriptcoregtk libappindicator librsvg libsoup
|
|
}
|
|
|
|
case $OS in
|
|
ubuntu|debian|linuxmint|pop) install_debian ;;
|
|
fedora|rhel|centos|rocky|almalinux) install_fedora ;;
|
|
arch|manjaro) install_arch ;;
|
|
*) echo "Unsupported OS: $OS"; exit 1 ;;
|
|
esac
|
|
|
|
install_mold() {
|
|
curl -L "https://github.com/rui314/mold/releases/download/v2.4.0/mold-2.4.0-x86_64-linux.tar.gz" -o /tmp/mold.tar.gz
|
|
tar -xzf /tmp/mold.tar.gz -C /tmp
|
|
cp "/tmp/mold-2.4.0-x86_64-linux/bin/mold" /usr/local/bin/
|
|
rm -rf /tmp/mold-2.4.0* /tmp/mold.tar.gz
|
|
ldconfig
|
|
}
|
|
|
|
command -v mold &> /dev/null || install_mold
|
|
|
|
configure_cargo() {
|
|
echo "Configuring Cargo for fast linking (mold/lld)..."
|
|
|
|
# Detect current user's home directory
|
|
if [ -n "$SUDO_USER" ]; then
|
|
USER_HOME=$(eval echo ~$SUDO_USER)
|
|
else
|
|
USER_HOME=$HOME
|
|
fi
|
|
|
|
mkdir -p "$USER_HOME/.cargo"
|
|
cat > "$USER_HOME/.cargo/config.toml" << 'EOF'
|
|
[target.x86_64-unknown-linux-gnu]
|
|
linker = "clang"
|
|
rustflags = ["-C", "link-arg=-fuse-ld=lld"]
|
|
|
|
[build]
|
|
jobs = 6
|
|
EOF
|
|
|
|
echo "Cargo configured for $USER_HOME!"
|
|
echo "Link time reduced by ~30-40%"
|
|
}
|
|
|
|
configure_cargo
|
|
|
|
echo "Dev dependencies installed!" |