#!/usr/bin/env bash set -e CONTAINER_NAME=kindle_go_builder WORKDIR=/src OUTFILE=kindle_fbink_go if ! docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}\$"; then echo "[sh] Creating container" docker run -dit --name ${CONTAINER_NAME} debian:bookworm sleep infinity fi echo "[sh] Installing toolchain inside container" docker exec ${CONTAINER_NAME} bash -c " set -e apt-get update apt-get install -y golang-go curl xz-utils build-essential gcc-arm-linux-gnueabi g++-arm-linux-gnueabi if [ ! -d /usr/local/arm-linux-musleabi-cross ]; then echo '[sh] Downloading musl cross toolchain...' cd /usr/local curl -L https://musl.cc/arm-linux-musleabi-cross.tgz | tar xz fi " echo "[sh] Copying project into container" docker exec ${CONTAINER_NAME} rm -rf ${WORKDIR} docker cp ./go ${CONTAINER_NAME}:${WORKDIR} echo "[sh] Building for ARMv7 soft-float (musl static)" docker exec ${CONTAINER_NAME} bash -c " set -e export PATH=/usr/local/arm-linux-musleabi-cross/bin:\$PATH cd ${WORKDIR} export GOOS=linux GOARCH=arm GOARM=5 CGO_ENABLED=1 CC=arm-linux-gnueabi-gcc go build -ldflags '-linkmode external -extldflags "-static"' -o kindle_fbink_go . " echo "[sh] Copying binary back to hsot" docker cp ${CONTAINER_NAME}:${WORKDIR}/${OUTFILE} ./${OUTFILE} echo "[sh] Build complete: ${OUTFILE}"