Files
ere/scripts/install_tamago.sh
2025-11-06 20:15:45 +08:00

120 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
set -e # Exit on error
GO_BRANCH="tamago1.25.2-zkvm-dev"
# Configuration
INSTALL_DIR="$HOME/.tamago" # that can't be empty nor "/"!
TEMP_DIR=$(mktemp -d)
GO_BRANCH="${GO_BRANCH:-master}" # Default to master, can override with env var
# Stock Go configuration
STOCK_GO_VERSION="go1.25.3"
STOCK_GO_DIR="$TEMP_DIR/stock-go"
STOCK_GO_INSTALL=false
echo "Building Go compiler..."
echo "Installation directory: $INSTALL_DIR"
echo "Version/branch: $GO_BRANCH"
echo ""
# Clean up temp directory on exit
trap "rm -rf $TEMP_DIR" EXIT
# Check if Go 1.25.3 is installed
echo "Checking for Go compiler..."
if command -v go &> /dev/null; then
CURRENT_GO_VERSION=$(go version | awk '{print $3}')
if [ "$CURRENT_GO_VERSION" = "$STOCK_GO_VERSION" ]; then
echo "Found Go $STOCK_GO_VERSION already installed"
else
echo "Found Go $CURRENT_GO_VERSION, but need $STOCK_GO_VERSION"
STOCK_GO_INSTALL=true
fi
else
echo "Go compiler not found, will install $STOCK_GO_VERSION"
STOCK_GO_INSTALL=true
fi
# Install stock Go if needed
if [ "$STOCK_GO_INSTALL" = true ]; then
echo "Installing stock Go $STOCK_GO_VERSION..."
# Detect OS and architecture
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
case "$ARCH" in
x86_64)
ARCH="amd64"
;;
aarch64|arm64)
ARCH="arm64"
;;
*)
echo "Error: Unsupported architecture: $ARCH"
exit 1
;;
esac
GO_ARCHIVE="${STOCK_GO_VERSION}.${OS}-${ARCH}.tar.gz"
GO_URL="https://go.dev/dl/${GO_ARCHIVE}"
echo "Downloading from $GO_URL..."
cd "$TEMP_DIR"
curl -L -O "$GO_URL"
echo "Extracting Go archive..."
tar -xzf "$GO_ARCHIVE"
mv go "$STOCK_GO_DIR"
# Add stock Go to PATH
export PATH="$STOCK_GO_DIR/bin:$PATH"
export GOROOT="$STOCK_GO_DIR"
echo "Stock Go installed temporarily at $STOCK_GO_DIR"
go version
fi
# Check if git is installed
if ! command -v git &> /dev/null; then
echo "Error: git is not installed. Please install git first."
exit 1
fi
# Clone Go repository
echo "Cloning Go repository..."
cd "$TEMP_DIR"
git clone --depth 1 --branch $GO_BRANCH https://github.com/eth-act/tamago-go.git go
cd go
# Remove .git directory to save space
echo "Removing .git directory..."
rm -rf .git
# Build Go
echo "Building Go compiler..."
cd src
GOROOT_FINAL="$INSTALL_DIR" ./make.bash
# Move built Go to installation directory
echo "Installing to $INSTALL_DIR..."
cd ../..
rm -rf "$INSTALL_DIR"
mv go "$INSTALL_DIR"
echo ""
echo "Go compiler successfully built and installed to: $INSTALL_DIR"
echo ""
echo "To use this Go installation, add the following to your shell profile:"
echo ""
echo " export GOROOT=$INSTALL_DIR"
echo " export PATH=\$GOROOT/bin:\$PATH"
echo ""
echo "Then run: source ~/.bashrc (or ~/.zshrc, depending on your shell)"
echo ""
echo "Verify installation with: go version"