Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add scrypto toolchain install shell scripts #2000

Merged
merged 5 commits into from
Nov 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions .github/actions/setup-env/action.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: 'Setup environment'
description: 'Common GH action to setup job environment'
name: "Setup environment"
description: "Common GH action to setup job environment"

runs:
using: "composite"
Expand All @@ -17,6 +17,10 @@ runs:
# different version is used.
# => [Dockerfile] Update "FROM rust:X.XX.X-slim-bookworm AS base-image" in the deterministic builder
# => [radix-clis/assets/template/rust-toolchain.toml_template] Update the rust version
# => [scrypto-install-scripts/*] Update the all version in each scripts "# Versions to install" section. Keep the current version number format:
# => [scrypto-install-scripts/install-scrypto-debian.sh] "LLVM_VERSION=XX", "RUST_VERSION=X.XX.X", "RADIX_CLI_VERSION=X.X.X"
# => [scrypto-install-scripts/install-scrypto-macos.sh] "LLVM_VERSION=XX", "RUST_VERSION=X.XX.X", "RADIX_CLI_VERSION=X.X.X"
# => [scrypto-install-scripts/install-scrypto-windows.ps1] "$llvmVersion = 'XX.X.X'", "$rustVersion = 'X.XX.X'", "$radixCliVersion = 'X.X.X'"
# => [https://docs.radixdlt.com/docs/getting-rust-scrypto] Update the recommended rust version on docs
# Additionally, Rust version should be updated in below repos on respective branches:
# - babylon-node - .github/actions/setup-env/action.yml
Expand All @@ -43,7 +47,7 @@ runs:
if: runner.os == 'Linux'
uses: RDXWorks-actions/actions-setup-cmake@master
with:
cmake-version: '3.27.9'
cmake-version: "3.27.9"
- name: Install libclang-dev
if: runner.os == 'Linux'
run: sudo apt-get -y update && sudo apt-get install clang libclang-dev -y -f
Expand Down
214 changes: 214 additions & 0 deletions scrypto-install-scripts/install-scrypto-debian.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
#!/bin/bash

# Exit on error
set -e

# Versions to install
LLVM_VERSION=18
RUST_VERSION=1.81.0
RADIX_CLI_VERSION=1.3.0

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Function to log messages with colors
log() {
local level=$1
shift
case $level in
"INFO") echo -e "${BLUE}[INFO]${NC} $*" ;;
"SUCCESS") echo -e "${GREEN}[SUCCESS]${NC} $*" ;;
"ERROR") echo -e "${RED}[ERROR]${NC} $*" ;;
"WARN") echo -e "${YELLOW}[WARN]${NC} $*" ;;
esac
}

# Function to check if command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}

# Function to check system dependencies
check_dependencies() {
log "INFO" "Checking system dependencies..."

# Check if we're on a Debian-based system
if ! command_exists apt-get; then
log "ERROR" "This script requires apt-get (Debian/Ubuntu). For other distributions, please modify the script accordingly."
exit 1
fi

# Check if sudo is available
if ! command_exists sudo; then
log "ERROR" "This script requires sudo privileges."
exit 1
fi
}

# Function to install build essentials
install_build_essentials() {
log "INFO" "Installing build essentials..."

# Update package list
sudo apt-get update

# Install build essentials
sudo apt-get install -y build-essential

if [ $? -eq 0 ]; then
log "SUCCESS" "Build essentials installed successfully"
else
log "ERROR" "Failed to install build essentials"
exit 1
fi
}

# Function to install LLVM
install_llvm() {
log "INFO" "Installing LLVM..."

# Download and install LLVM
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh $LLVM_VERSION
rm llvm.sh

if [ $? -eq 0 ]; then
log "SUCCESS" "LLVM installed successfully"
else
log "ERROR" "Failed to install LLVM"
exit 1
fi
}

# Function to install Rust
install_rust() {
log "INFO" "Installing Rust..."

# Download and install Rust with specific toolchain
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain=$RUST_VERSION -y

if [ $? -eq 0 ]; then
log "SUCCESS" "Rust installed successfully"
else
log "ERROR" "Failed to install Rust"
exit 1
fi
}

# Function to setup Cargo environment
setup_cargo() {
log "INFO" "Setting up Cargo environment..."

# Source cargo environment
source "$HOME/.cargo/env"

if command_exists cargo; then
log "SUCCESS" "Cargo environment setup successfully"
else
log "ERROR" "Failed to setup Cargo environment"
exit 1
fi
}

# Function to add WebAssembly target
add_wasm_target() {
log "INFO" "Adding WebAssembly target..."

rustup target add wasm32-unknown-unknown

if [ $? -eq 0 ]; then
log "SUCCESS" "WebAssembly target added successfully"
else
log "ERROR" "Failed to add WebAssembly target"
exit 1
fi
}

# Function to install Radix tools
install_radix_tools() {
log "INFO" "Installing Radix Engine Simulator and CLI tools..."

cargo install --force radix-clis@$RADIX_CLI_VERSION

if [ $? -eq 0 ]; then
log "SUCCESS" "Radix tools installed successfully"
else
log "ERROR" "Failed to install Radix tools"
exit 1
fi
}

# Function to add Clang to shell configuration
add_clang_to_shell_config() {
# Determine the user's shell
SHELL_NAME=$(basename "$SHELL")

# Determine the shell configuration file based on the default shell
case "$SHELL_NAME" in
bash) SHELL_CONFIG="$HOME/.bashrc" ;;
zsh) SHELL_CONFIG="$HOME/.zshrc" ;;
ksh) SHELL_CONFIG="$HOME/.kshrc" ;;
fish) SHELL_CONFIG="$HOME/.config/fish/config.fish" ;;
*)
log "ERROR" "Unsupported shell. Please add 'export CC=clang-${LLVM_VERSION}' to your shell configuration manually."
exit 1
;;
esac

# The line to add
EXPORT_LINE="export CC=clang-${LLVM_VERSION}"

# Check if the line already exists to prevent duplicates
if grep -Fxq "$EXPORT_LINE" "$SHELL_CONFIG"
then
log "INFO" "The CC variable is already set in $SHELL_CONFIG"
else
# Backup the shell configuration file
cp "$SHELL_CONFIG" "${SHELL_CONFIG}.backup"

# Append the export line to the shell configuration file
echo "$EXPORT_LINE" >> "$SHELL_CONFIG"
log "INFO" "Added '$EXPORT_LINE' to $SHELL_CONFIG"
fi
}

# Main installation process
main() {
log "INFO" "Starting installation process..."

# Check system dependencies
check_dependencies

# Install components
install_build_essentials
install_llvm
install_rust
setup_cargo
add_wasm_target
install_radix_tools
add_clang_to_shell_config

# Final success message
log "SUCCESS" "Installation completed successfully!"
source $HOME/.cargo/env

# Verify installations
log "INFO" "Verifying installations..."
echo -e "\nVersions installed:"
echo -e "LLVM: $(llvm-config-${LLVM_VERSION} --version)"
echo -e "Clang: $(clang-${LLVM_VERSION} --version | head -n 1)"
echo -e "Rust: $(rustc --version)"
echo -e "Cargo: $(cargo --version)"
echo -e "Radix CLI: $(scrypto --version)\n"

log "INFO" "Please restart your terminal or run:"
echo "source $SHELL_CONFIG"
}

# Run main function
main
78 changes: 78 additions & 0 deletions scrypto-install-scripts/install-scrypto-macos.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#!/bin/bash

# Print commands and exit on errors
set -ex

# Versions to install
LLVM_VERSION=18
RUST_VERSION=1.81.0
RADIX_CLI_VERSION=1.3.0

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo -e "${BLUE}Starting installation process...${NC}"

# Function to check if a command was successful
check_status() {
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ $1 successful${NC}"
else
echo -e "${RED}✗ $1 failed${NC}"
exit 1
fi
}

# Install Xcode Command Line Tools
echo -e "\n${BLUE}Installing Xcode Command Line Tools...${NC}"
xcode-select --install 2>/dev/null || true
check_status "Xcode Command Line Tools installation"

# Install cmake and LLVM
echo -e "\n${BLUE}Installing cmake and LLVM...${NC}"
brew install cmake llvm@$LLVM_VERSION
check_status "cmake and LLVM installation"

# Detect shell and configure appropriate rc file
SHELL_CONFIG=""
if [[ "$SHELL" == */bin/zsh ]]; then
SHELL_CONFIG="$HOME/.zshrc"
elif [[ "$SHELL" == */bin/bash ]]; then
SHELL_CONFIG="$HOME/.profile"
else
echo -e "${RED}Unsupported shell: $SHELL${NC}"
exit 1
fi

# Add LLVM to PATH
echo -e "\n${BLUE}Configuring LLVM in $SHELL_CONFIG...${NC}"
if ! grep -q "$(brew --prefix llvm@${LLVM_VERSION})/bin" "$SHELL_CONFIG"; then
echo 'PATH="$(brew --prefix llvm@'$LLVM_VERSION')/bin:$PATH"' >> "$SHELL_CONFIG"
fi
check_status "LLVM path configuration"

# Install Rust
echo -e "\n${BLUE}Installing Rust...${NC}"
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain=$RUST_VERSION -y
check_status "Rust installation"

# Source cargo environment
echo -e "\n${BLUE}Enabling cargo in current shell...${NC}"
source "$HOME/.cargo/env"
check_status "Cargo environment setup"

# Add WebAssembly target
echo -e "\n${BLUE}Adding WebAssembly target...${NC}"
rustup target add wasm32-unknown-unknown
check_status "WebAssembly target installation"

# Install Radix Engine Simulator and CLI tools
echo -e "\n${BLUE}Installing Radix Engine Simulator and CLI tools...${NC}"
cargo install --force radix-clis@$RADIX_CLI_VERSION
check_status "Radix tools installation"

echo -e "\n${GREEN}Installation complete! Please restart your terminal or run:${NC}"
echo -e "source $SHELL_CONFIG"
Loading
Loading