#!/bin/sh -eu # vim: set ts=2 sw=2 et: LOCAL_PROJECT_PATH="${1-$PWD}" TARGET_ARCH="${2-arm64}" DOCKER_IMAGE="" BUILD_COMMAND=" \ shards build --static --release \ && chown 1000:1000 -R bin \ && find bin -type f -maxdepth 1 -exec mv {} {}_${TARGET_ARCH} \; \ " # crystal INSTALL_CRYSTAL=" \ sed -i -e '/^deb/d' /etc/apt/sources.list \ && sed -i -e '/jessie.updates/d' /etc/apt/sources.list \ && sed -i -e 's/^# deb/deb/' /etc/apt/sources.list \ && apt-get update" cat > /dev/null <<EOF " && apt-get install -y \ g\+\+ \ gcc \ curl \ autoconf \ automake \ python2 \ libxml2-dev \ llvm-dev \ make \ libssl-dev \ libpcre2-dev \ libyaml-dev \ zlib1g-dev \ " EOF # setup arch case "$TARGET_ARCH" in amd64) DOCKER_IMAGE="debian:8" ;; arm64) DOCKER_IMAGE="arm64v8/debian:8" ;; armel) DOCKER_IMAGE="arm32v7/debian" ;; armhf) DOCKER_IMAGE="armhf/debian" ;; i386) DOCKER_IMAGE="x86/debian" ;; mips) DOCKER_IMAGE="mips/debian" ;; mipsel) DOCKER_IMAGE="mipsel/debian" ;; powerpc) DOCKER_IMAGE="powerpc/debian" ;; ppc64el) DOCKER_IMAGE="ppc64el/debian" ;; s390x) DOCKER_IMAGE="s390x/debian" ;; esac # Compile Crystal project statically for target architecture docker pull multiarch/qemu-user-static docker run \ --rm \ --privileged \ multiarch/qemu-user-static \ --reset -p yes set -x docker run \ -it \ -v "$LOCAL_PROJECT_PATH:/app" \ -w /app \ --rm \ --platform linux/arm64 \ "$DOCKER_IMAGE" \ /bin/sh -c "$INSTALL_CRYSTAL && bash" exit 0 set -x docker run \ -it \ -v "$LOCAL_PROJECT_PATH:/app" \ -w /app \ --rm \ --platform linux/arm64 \ "$DOCKER_IMAGE" \ /bin/sh -c "$INSTALL_CRYSTAL && $BUILD_COMMAND"