#!/usr/bin/env bash # Set up picologic development environment # Downloads oss-cad-suite and installs Python dependencies set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)" OSS_DIR="$SCRIPT_DIR/oss-cad-suite" if [ -d "$OSS_DIR" ] && [ -f "$OSS_DIR/environment" ]; then echo "✓ oss-cad-suite already installed at $OSS_DIR" else echo "Downloading oss-cad-suite for macOS ARM64..." RELEASE=$(curl -s "https://api.github.com/repos/YosysHQ/oss-cad-suite-build/releases/latest" | python3 -c "import sys,json; print(json.load(sys.stdin)['tag_name'])") URL="https://github.com/YosysHQ/oss-cad-suite-build/releases/download/${RELEASE}/oss-cad-suite-darwin-arm64-${RELEASE//-/}.tgz" echo " Release: $RELEASE" echo " URL: $URL" curl -L -o /tmp/oss-cad-suite.tgz "$URL" --progress-bar echo "Extracting..." tar xzf /tmp/oss-cad-suite.tgz -C "$SCRIPT_DIR" rm /tmp/oss-cad-suite.tgz echo "✓ oss-cad-suite installed" fi echo "" echo "Activating environment..." cd "$OSS_DIR" && source environment echo "" echo "Installing Python dependencies..." python3 -m pip install --quiet "amaranth==0.4.5" "luna-usb==0.1.1" pyvcd pyserial pytest 2>&1 | grep -v "DEPRECATION\|notice" echo "" echo "Verifying toolchain..." echo " yosys: $(yosys --version 2>&1 | head -1)" echo " nextpnr: $(nextpnr-ecp5 --version 2>&1 | head -1)" echo " ecppack: $(ecppack --version 2>&1 | head -1)" echo " amaranth: $(python3 -c 'import amaranth; print(amaranth.__version__)')" echo " luna: $(python3 -c 'from luna.gateware.usb.usb2.device import USBDevice; print("OK")')" echo "" echo "✓ Toolchain ready!" echo "" echo "To activate in new shells:" echo " cd $OSS_DIR && source environment" echo "" echo "To build gateware:" echo " cd $SCRIPT_DIR && ./scripts/build.sh"