diff --git a/Makefile b/Makefile index 97b0541..42f6462 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,10 @@ else endif VENDOR_DIR := vendor/$(PLATFORM)-$(ARCH) +# Vendor directories for air-gapped deployment +VENDOR_MACOS := vendor/macos-arm64 +VENDOR_LINUX_X86 := vendor/linux-x86_64 +VENDOR_LINUX_ARM := vendor/linux-aarch64 # ---------- Config ---------- IMAGE := hdwallet-build:3.12 @@ -45,9 +49,12 @@ help: @echo "๐Ÿ“ฆ Vendoring (for offline/air-gapped use):" @echo " make vendor-macos - Build macOS ARM64 wheels (requires macOS native)" @echo " make vendor-linux - Build Linux x86_64 wheels (Docker - any OS)" + @echo " make vendor-linux-arm - Build Linux ARM64/aarch64 wheels (Docker)" @echo " make vendor-linux-dev - Build Linux x86_64 dev wheels (includes pytest)" - @echo " make vendor-all - Build runtime wheels for both platforms" - @echo " make vendor-all-dev - Build runtime + dev wheels for all platforms" + @echo " make vendor-linux-arm-dev - Build Linux ARM64 dev wheels (includes pytest)" + @echo " make vendor-all - Build runtime wheels for ALL platforms" + @echo " make vendor-all-dev - Build runtime + dev wheels for Linux platforms" + @echo " make verify-vendor - Test offline installation from vendor/" @echo "" @echo "๐Ÿ”จ Binary Distribution:" @@ -127,6 +134,70 @@ vendor-linux: requirements.txt " @echo "โœ“ Linux x86_64 wheels: $(VENDOR_LINUX)/" +# Add after vendor-linux target: + +.PHONY: vendor-linux-arm +vendor-linux-arm: requirements.txt + @echo "Building Linux ARM64/aarch64 wheels (Docker)..." + mkdir -p $(VENDOR_LINUX_ARM) + docker run --rm \ + --platform linux/arm64 \ + -v "$$PWD":$(WORKDIR) \ + -w $(WORKDIR) \ + python:3.12-slim \ + bash -c " \ + set -e && \ + apt-get update -qq && apt-get install -y -qq gcc g++ make libffi-dev && \ + pip install --upgrade pip && \ + pip download --dest $(VENDOR_LINUX_ARM) -r requirements.txt && \ + pip wheel --wheel-dir $(VENDOR_LINUX_ARM) --no-deps $(VENDOR_LINUX_ARM)/*.tar.gz 2>/dev/null || true && \ + rm -f $(VENDOR_LINUX_ARM)/*.tar.gz && \ + cd $(VENDOR_LINUX_ARM) && sha256sum *.whl > SHA256SUMS \ + " + @echo "โœ“ Linux ARM64 wheels: $(VENDOR_LINUX_ARM)/" + +.PHONY: vendor-linux-arm-dev +vendor-linux-arm-dev: requirements-dev.txt + @echo "Building Linux ARM64 dev wheels (Docker)..." + mkdir -p $(VENDOR_LINUX_ARM)-dev + docker run --rm \ + --platform linux/arm64 \ + -v "$$PWD":$(WORKDIR) \ + -w $(WORKDIR) \ + python:3.12-slim \ + bash -c " \ + set -e && \ + apt-get update -qq && apt-get install -y -qq gcc g++ make libffi-dev && \ + pip install --upgrade pip && \ + pip download --dest $(VENDOR_LINUX_ARM)-dev -r requirements-dev.txt && \ + pip wheel --wheel-dir $(VENDOR_LINUX_ARM)-dev --no-deps $(VENDOR_LINUX_ARM)-dev/*.tar.gz 2>/dev/null || true && \ + rm -f $(VENDOR_LINUX_ARM)-dev/*.tar.gz && \ + cd $(VENDOR_LINUX_ARM)-dev && sha256sum *.whl > SHA256SUMS \ + " + @echo "โœ“ Linux ARM64 dev wheels: $(VENDOR_LINUX_ARM)-dev/" + +# Update vendor-all: +.PHONY: vendor-all +vendor-all: vendor-macos vendor-linux vendor-linux-arm + @echo "" + @echo "โœ“ All platforms vendored (runtime only):" + @echo " macOS ARM64: $(VENDOR_MACOS)/ ($$(ls $(VENDOR_MACOS)/*.whl 2>/dev/null | wc -l | xargs) wheels)" + @echo " Linux x86_64: $(VENDOR_LINUX_X86)/ ($$(ls $(VENDOR_LINUX_X86)/*.whl 2>/dev/null | wc -l | xargs) wheels)" + @echo " Linux aarch64: $(VENDOR_LINUX_ARM)/ ($$(ls $(VENDOR_LINUX_ARM)/*.whl 2>/dev/null | wc -l | xargs) wheels)" + @echo "" + @echo "Commit with: git add vendor/ && git commit -m 'vendor: update wheels'" + +.PHONY: vendor-all-dev +vendor-all-dev: vendor-linux vendor-linux-dev vendor-linux-arm vendor-linux-arm-dev + @echo "" + @echo "โœ“ All platform wheels (runtime + dev):" + @echo " Linux x86_64 (runtime): $(VENDOR_LINUX_X86)/" + @echo " Linux x86_64 (dev): $(VENDOR_LINUX_X86)-dev/" + @echo " Linux aarch64 (runtime): $(VENDOR_LINUX_ARM)/" + @echo " Linux aarch64 (dev): $(VENDOR_LINUX_ARM)-dev/" + @echo "" + @echo "For macOS dev wheels, run on native macOS" + .PHONY: vendor-linux-dev vendor-linux-dev: requirements-dev.txt @echo "Building Linux x86_64 dev wheels (Docker)..." @@ -147,26 +218,6 @@ vendor-linux-dev: requirements-dev.txt " @echo "โœ“ Linux x86_64 dev wheels: $(VENDOR_LINUX)-dev/" -.PHONY: vendor-all -vendor-all: vendor-macos vendor-linux - @echo "" - @echo "โœ“ All platforms vendored (runtime only):" - @echo " macOS ARM64: $(VENDOR_MACOS)/ ($$(ls $(VENDOR_MACOS)/*.whl 2>/dev/null | wc -l | xargs) wheels)" - @echo " Linux x86_64: $(VENDOR_LINUX)/ ($$(ls $(VENDOR_LINUX)/*.whl 2>/dev/null | wc -l | xargs) wheels)" - @echo "" - @echo "Commit with: git add vendor/ && git commit -m 'vendor: update wheels'" - -.PHONY: vendor-all-dev -vendor-all-dev: vendor-linux vendor-linux-dev - @echo "" - @echo "โœ“ All platform wheels (runtime + dev):" - @echo " Linux x86_64 (runtime): $(VENDOR_LINUX)/ ($$(ls $(VENDOR_LINUX)/*.whl 2>/dev/null | wc -l | xargs) wheels)" - @echo " Linux x86_64 (dev): $(VENDOR_LINUX)-dev/ ($$(ls $(VENDOR_LINUX)-dev/*.whl 2>/dev/null | wc -l | xargs) wheels)" - @echo "" - @echo "For macOS dev wheels, run on native macOS:" - @echo " python3.12 -m venv .venv312 && source .venv312/bin/activate" - @echo " pip download --dest vendor/macos-arm64-dev -r requirements-dev.txt" - .PHONY: verify-vendor verify-vendor: @echo "Testing offline installation from vendor/..." @@ -377,3 +428,18 @@ clean-release: @echo "๐Ÿงน Cleaning release artifacts..." @rm -rf releases/ @echo "โœ… Release artifacts cleaned" + +.PHONY: clean-vendor +clean-vendor: + @echo "Removing all vendor wheels..." + rm -rf vendor/ + @echo "โœ“ Vendor directory cleaned" + +.PHONY: clean +clean: clean-vendor + @echo "Removing virtual environments..." + rm -rf .venv + @echo "Removing Python cache..." + find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true + find . -type f -name "*.pyc" -delete + @echo "โœ“ Cleanup complete" diff --git a/install_offline.sh b/install_offline.sh index d9c387c..136366e 100755 --- a/install_offline.sh +++ b/install_offline.sh @@ -10,7 +10,19 @@ fi # Detect platform if [[ "$OSTYPE" == "linux-gnu"* ]]; then - PLATFORM="linux-x86_64" + ARCH=$(uname -m) + case "$ARCH" in + x86_64) + PLATFORM="linux-x86_64" + ;; + aarch64|arm64) + PLATFORM="linux-aarch64" + ;; + *) + echo "ERROR: Unsupported Linux architecture: $ARCH" + exit 1 + ;; + esac elif [[ "$OSTYPE" == "darwin"* ]]; then ARCH=$(uname -m) if [[ "$ARCH" == "arm64" ]]; then @@ -24,7 +36,7 @@ else exit 1 fi -echo "Detected platform: $PLATFORM" +echo "Detected platform: $PLATFORM ($(uname -m))" # Check if vendor directory exists VENDOR_PATH="vendor/$PLATFORM" @@ -34,10 +46,26 @@ fi if [ ! -d "$VENDOR_PATH" ]; then echo "ERROR: $VENDOR_PATH not found!" + echo "" + echo "Available vendor directories:" + ls -d vendor/*/ 2>/dev/null || echo " (none)" + echo "" if [ "$DEV_MODE" = true ]; then - echo "Run 'make vendor-linux-dev' to generate dev wheels" + echo "To build dev wheels:" + if [[ "$PLATFORM" == "linux-x86_64" ]]; then + echo " make vendor-linux-dev" + elif [[ "$PLATFORM" == "linux-aarch64" ]]; then + echo " make vendor-linux-arm-dev" + fi else - echo "Run 'make vendor-linux' or 'make vendor-macos' to generate wheels" + echo "To build runtime wheels:" + if [[ "$PLATFORM" == "linux-x86_64" ]]; then + echo " make vendor-linux" + elif [[ "$PLATFORM" == "linux-aarch64" ]]; then + echo " make vendor-linux-arm" + elif [[ "$PLATFORM" == "macos-arm64" ]]; then + echo " make vendor-macos" + fi fi exit 1 fi @@ -47,7 +75,7 @@ if ! command -v python3.12 &> /dev/null; then echo "ERROR: Python 3.12 not found!" echo "Please install Python 3.12:" echo " macOS: brew install python@3.12" - echo " Linux: apt-get install python3.12 python3.12-venv" + echo " Debian/Ubuntu: apt-get install python3.12 python3.12-venv" exit 1 fi @@ -111,7 +139,6 @@ if [ "$DEV_MODE" = true ]; then echo "โš ๏ธ pytest not found in dev install!" fi else - # Only mention pytest in production mode echo "โš ๏ธ Skipping pytest (use --dev for full test suite)" fi @@ -129,6 +156,7 @@ echo "==========================================" echo "" echo "Virtual environment: $VENV_DIR" echo "Python version: $(python --version)" +echo "Platform: $PLATFORM" if [ "$DEV_MODE" = true ]; then echo "Mode: Development (pytest installed)" else