#!/usr/bin/env bash set -euo pipefail # Build gplan.so for the Onefinity Pi (armv7l, Python 3.5) # # First run: ~30min (builds the Docker image with pre-compiled cbang/camotics) # After that: ~2sec (just relinks against Python 3.5m) # # Prerequisites: # - Docker with QEMU binfmt support (default on Docker Desktop) # - Python 3.5 headers from the Pi in .pi/pi-python35.tar.gz # Grab once: ssh bbmc@10.1.10.55 'tar czf - /usr/include/python3.5m \ # /usr/lib/arm-linux-gnueabihf/libpython3.5m.so*' > .pi/pi-python35.tar.gz SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" IMAGE="onefin-gplan" HEADERS="$SCRIPT_DIR/pi-python35.tar.gz" OUTPUT="$PROJECT_DIR/src/py/camotics/gplan.so" # Check for Python 3.5 headers if [[ ! -f "$HEADERS" ]]; then echo "Python 3.5 headers not found at $HEADERS" echo "Fetching from Pi..." ssh bbmc@10.1.10.55 'tar czf - /usr/include/python3.5m \ /usr/lib/arm-linux-gnueabihf/libpython3.5m.so*' > "$HEADERS" fi # Build image if needed (one-time, ~30min) if ! docker image inspect "$IMAGE" >/dev/null 2>&1; then echo "Building $IMAGE Docker image (one-time, ~30min under QEMU)..." docker build --platform linux/arm/v7 -t "$IMAGE" -f "$SCRIPT_DIR/Dockerfile.gplan" "$SCRIPT_DIR" fi # Relink gplan.so against Python 3.5m (~2sec) echo "Linking gplan.so against Python 3.5m..." docker run --rm --platform linux/arm/v7 \ -v "$HEADERS:/tmp/pi-python35.tar.gz:ro" \ -v "$PROJECT_DIR:/workspace" \ "$IMAGE" bash -c ' tar xzf /tmp/pi-python35.tar.gz -C / ln -sf /usr/lib/arm-linux-gnueabihf/libpython3.5m.so.1.0 \ /usr/lib/arm-linux-gnueabihf/libpython3.5m.so g++ -o /workspace/src/py/camotics/gplan.so \ -Wl,--as-needed -Wl,-s -Wl,-x -Wl,--gc-sections -pthread -shared \ build/gplan.os -L/opt/cbang/lib \ build/libCAMoticsPy.a build/libCAMotics.a build/libDXF.a \ build/libSTL.a build/libGCode.a \ -lstdc++ -lutil -lm -ldl -lz -lcbang -lcbang-boost \ -lssl -lcrypto -llz4 -lexpat -lbz2 -lcrypt -lpthread \ -lpython3.5m build/dxflib/libdxflib.a file /workspace/src/py/camotics/gplan.so readelf -d /workspace/src/py/camotics/gplan.so | grep python ' echo "✓ Built: $OUTPUT"