64 lines
1.6 KiB
Bash
Executable file
64 lines
1.6 KiB
Bash
Executable file
#!/bin/sh -eu
|
|
# vim: set ts=2 sw=2 et:
|
|
|
|
LOCAL_PROJECT_PATH="${1-$PWD}"
|
|
|
|
TARGET_ARCH="${2-amd64}"
|
|
|
|
DOCKER_IMAGE=""
|
|
|
|
BUILD_COMMAND=" \
|
|
shards build --static --release \
|
|
&& chown 1000:1000 -R bin \
|
|
&& find bin -type f -maxdepth 1 -exec mv {} {}_${TARGET_ARCH} \; \
|
|
"
|
|
INSTALL_CRYSTAL=" \
|
|
echo '@edge http://dl-cdn.alpinelinux.org/alpine/edge/community' >>/etc/apk/repositories \
|
|
&& apk add --update --no-cache --force-overwrite \
|
|
crystal@edge \
|
|
g++ \
|
|
gc-dev \
|
|
libxml2-dev \
|
|
llvm16-dev \
|
|
llvm16-static \
|
|
make \
|
|
musl-dev \
|
|
openssl-dev \
|
|
openssl-libs-static \
|
|
pcre-dev \
|
|
shards@edge \
|
|
yaml-dev \
|
|
yaml-static \
|
|
zlib-dev \
|
|
zlib-static \
|
|
"
|
|
|
|
# setup arch
|
|
case "$TARGET_ARCH" in
|
|
amd64) DOCKER_IMAGE="alpine" ;;
|
|
arm64) DOCKER_IMAGE="multiarch/alpine:aarch64-edge" ;;
|
|
armel) DOCKER_IMAGE="multiarch/alpine:armv7-edge" ;;
|
|
# armhf) DOCKER_IMAGE="multiarch/alpine:armhf-edge" ;;
|
|
# i386) DOCKER_IMAGE="multiarch/alpine:x86-edge" ;;
|
|
mips) DOCKER_IMAGE="multiarch/alpine:mips-edge" ;;
|
|
mipsel) DOCKER_IMAGE="multiarch/alpine:mipsel-edge" ;;
|
|
powerpc) DOCKER_IMAGE="multiarch/alpine:powerpc-edge" ;;
|
|
ppc64el) DOCKER_IMAGE="multiarch/alpine:ppc64el-edge" ;;
|
|
s390x) DOCKER_IMAGE="multiarch/alpine:s390x-edge" ;;
|
|
esac
|
|
|
|
# Compile Crystal project statically for target architecture
|
|
docker pull multiarch/qemu-user-static:register
|
|
docker run \
|
|
--rm \
|
|
--privileged \
|
|
multiarch/qemu-user-static:register \
|
|
--reset
|
|
docker run \
|
|
-it \
|
|
-v "$LOCAL_PROJECT_PATH:/app" \
|
|
-w /app \
|
|
--rm \
|
|
"$DOCKER_IMAGE" \
|
|
/bin/sh -c "$INSTALL_CRYSTAL && $BUILD_COMMAND"
|
|
|