119 lines
3.2 KiB
Bash
Executable File
119 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${GREEN}=== Sun Language Installer ===${NC}"
|
|
|
|
# Function to check command existence
|
|
check_cmd() {
|
|
command -v "$1" &> /dev/null
|
|
}
|
|
|
|
# 1. Check for build tools and install if missing (Ubuntu/Debian only)
|
|
echo "Checking dependencies..."
|
|
|
|
if ! check_cmd make || ! check_cmd clang++; then
|
|
if [ -f /etc/debian_version ]; then
|
|
echo -e "${YELLOW}Dependencies missing. Attempting to install...${NC}"
|
|
echo "Running: sudo apt update && sudo apt install -y build-essential llvm clang"
|
|
sudo apt update && sudo apt install -y build-essential llvm clang
|
|
else
|
|
if ! check_cmd make; then echo -e "${RED}Error: 'make' is not installed.${NC}"; exit 1; fi
|
|
if ! check_cmd clang++; then echo -e "${RED}Error: 'clang++' is not installed.${NC}"; exit 1; fi
|
|
fi
|
|
fi
|
|
|
|
# 2. Detect LLVM
|
|
echo "Detecting LLVM..."
|
|
LLVM_CONFIG=""
|
|
|
|
# Try standard llvm-config
|
|
if command -v llvm-config &> /dev/null; then
|
|
LLVM_CONFIG="llvm-config"
|
|
fi
|
|
|
|
# Try macOS Homebrew path
|
|
if [ -z "$LLVM_CONFIG" ] && [ -f "/opt/homebrew/opt/llvm/bin/llvm-config" ]; then
|
|
LLVM_CONFIG="/opt/homebrew/opt/llvm/bin/llvm-config"
|
|
fi
|
|
|
|
# Try versioned names (common on Linux)
|
|
if [ -z "$LLVM_CONFIG" ]; then
|
|
for ver in 21 20 19 18 17 16 15; do
|
|
if command -v "llvm-config-$ver" &> /dev/null; then
|
|
LLVM_CONFIG="llvm-config-$ver"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [ -z "$LLVM_CONFIG" ]; then
|
|
echo -e "${RED}Error: LLVM not found.${NC}"
|
|
|
|
if [ -f /etc/debian_version ]; then
|
|
echo -e "${YELLOW}Attempting to install LLVM...${NC}"
|
|
sudo apt install -y llvm
|
|
|
|
# Try to find it again
|
|
if command -v llvm-config &> /dev/null; then
|
|
LLVM_CONFIG="llvm-config"
|
|
else
|
|
# Try versioned names again
|
|
for ver in 21 20 19 18 17 16 15; do
|
|
if command -v "llvm-config-$ver" &> /dev/null; then
|
|
LLVM_CONFIG="llvm-config-$ver"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$LLVM_CONFIG" ]; then
|
|
echo -e "${RED}Error: LLVM could not be found or installed.${NC}"
|
|
echo "Please install LLVM manually:"
|
|
echo " - macOS: brew install llvm@21"
|
|
echo " - Ubuntu: sudo apt install llvm clang"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Using LLVM config: $LLVM_CONFIG"
|
|
|
|
# 3. Build
|
|
echo "Building Sun..."
|
|
# Pass LLVM_CONFIG to make
|
|
if ! make LLVM_CONFIG="$LLVM_CONFIG"; then
|
|
echo -e "${RED}Build failed.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 4. Install
|
|
INSTALL_DIR="/usr/local/bin"
|
|
|
|
# Check if /usr/local/bin exists, if not create it
|
|
if [ ! -d "$INSTALL_DIR" ]; then
|
|
echo "Creating $INSTALL_DIR..."
|
|
sudo mkdir -p "$INSTALL_DIR"
|
|
fi
|
|
|
|
echo "Installing 'sun' binary to $INSTALL_DIR..."
|
|
|
|
if [ -w "$INSTALL_DIR" ]; then
|
|
cp sun "$INSTALL_DIR/sun"
|
|
else
|
|
echo -e "${YELLOW}Permission denied. Trying with sudo...${NC}"
|
|
if sudo cp sun "$INSTALL_DIR/sun"; then
|
|
echo "Copied successfully with sudo."
|
|
else
|
|
echo -e "${RED}Failed to install. Please run with sudo or check permissions.${NC}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo -e "${GREEN}Success! Sun has been installed.${NC}"
|
|
echo "You can now run 'sun' from anywhere."
|