diff --git a/Dockerfile.crystal b/Dockerfile.crystal index c22c4ad..3f65233 100644 --- a/Dockerfile.crystal +++ b/Dockerfile.crystal @@ -11,16 +11,16 @@ RUN apk add --update --no-cache \ # Cross compile for target architecture ARG TARGETARCH # Build crystal -WORKDIR /tmp/crystal -ARG crystal_version=1.9.1 +WORKDIR /usr/src/crystal +ARG crystal_version=1.11.2 RUN git clone --depth=1 --single-branch --branch=$crystal_version https://github.com/crystal-lang/crystal.git . && \ gzip -9 man/crystal.1 && \ mkdir .build && \ make crystal static=1 release=1 target=$TARGETARCH-alpine-linux-musl PREFIX=/usr FLAGS="--no-debug" | tail -1 > .build/crystal.sh && \ rm src/llvm/ext/llvm_ext.o # Build shards -WORKDIR /tmp/shards -ARG shards_version=0.17.0 +WORKDIR /usr/src/shards +ARG shards_version=0.17.4 RUN git clone --depth=1 --single-branch --branch=v${shards_version} https://github.com/crystal-lang/shards.git . && \ gzip -9 man/shards.1 man/shard.yml.5 && \ make bin/shards static=1 release=1 FLAGS="--no-debug --cross-compile --target=$TARGETARCH-alpine-linux-musl" | tail -1 > bin/shards.sh @@ -30,12 +30,12 @@ FROM alpine:$alpine_version AS target-builder ARG llvm_version=16 RUN apk add --update --no-cache \ llvm${llvm_version}-dev llvm${llvm_version}-static \ - zlib-static yaml-static libxml2 libxml2-dev pcre-dev pcre2-dev libevent-static \ + zlib-static yaml-static libxml2 libxml2-dev pcre2-dev libevent-static \ libffi-dev git g++ make automake libtool autoconf curl RUN apk add --update --no-cache libxml2-static || true RUN apk add --update --no-cache zstd-static || true # Build libgc -WORKDIR /tmp/libc +WORKDIR /usr/src/libc ARG gc_version=8.2.4 RUN git clone --depth=1 --single-branch --branch=v${gc_version} https://github.com/ivmai/bdwgc.git . && \ ./autogen.sh && \ @@ -43,32 +43,32 @@ RUN git clone --depth=1 --single-branch --branch=v${gc_version} https://github.c make -j$(nproc) CFLAGS="-DNO_GETCONTEXT -pipe -fPIE -O3" && \ make install # Link crystal -WORKDIR /tmp/crystal -COPY --from=builder /tmp/crystal/Makefile . -COPY --from=builder /tmp/crystal/src/llvm/ext src/llvm/ext -COPY --from=builder /tmp/crystal/.build .build +WORKDIR /usr/src/crystal +COPY --from=builder /usr/src/crystal/Makefile . +COPY --from=builder /usr/src/crystal/src/llvm/ext src/llvm/ext +COPY --from=builder /usr/src/crystal/.build .build RUN make llvm_ext RUN sh -ex .build/crystal.sh && strip .build/crystal # Link shards -WORKDIR /tmp/shards -COPY --from=builder /tmp/shards/bin bin +WORKDIR /usr/src/shards +COPY --from=builder /usr/src/shards/bin bin RUN sh -ex bin/shards.sh && strip bin/shards # start from a clean image FROM alpine:$alpine_version # add dependencies commonly required for building crystal applications -RUN apk add --update --no-cache musl-dev gcc pcre-dev pcre2-dev libevent-dev libevent-static openssl-dev openssl-libs-static libxml2-dev zlib-dev zlib-static git make yaml-dev +RUN apk add --update --no-cache musl-dev gcc pcre2-dev libevent-dev libevent-static openssl-dev openssl-libs-static libxml2-dev zlib-dev zlib-static git make yaml-dev libxml2-static gmp-dev RUN apk add --update --no-cache libxml2-static; exit 0 # copy the binaries + stdlib + libgc from the build stage -COPY --from=builder /tmp/crystal/*.md /usr/share/doc/crystal/ -COPY --from=builder /tmp/crystal/man/crystal.1.gz /usr/share/man/man1/ -COPY --from=builder /tmp/shards/man/shards.1.gz /usr/share/man/man1/ -COPY --from=builder /tmp/shards/man/shard.yml.5.gz /usr/share/man/man5/ -COPY --from=builder /tmp/crystal/src /usr/share/crystal/src -COPY --from=target-builder /tmp/crystal/.build/crystal /usr/bin/ -COPY --from=target-builder /tmp/shards/bin/shards /usr/bin/ +COPY --from=builder /usr/src/crystal/*.md /usr/share/doc/crystal/ +COPY --from=builder /usr/src/crystal/man/crystal.1.gz /usr/share/man/man1/ +COPY --from=builder /usr/src/shards/man/shards.1.gz /usr/share/man/man1/ +COPY --from=builder /usr/src/shards/man/shard.yml.5.gz /usr/share/man/man5/ +COPY --from=builder /usr/src/crystal/src /usr/share/crystal/src +COPY --from=target-builder /usr/src/crystal/.build/crystal /usr/bin/ +COPY --from=target-builder /usr/src/shards/bin/shards /usr/bin/ COPY --from=target-builder /usr/lib/libgc.a /usr/lib/ COPY --from=target-builder /usr/lib/libgc.a /usr/lib/crystal/