diff --git a/linux/Dockerfile b/linux/Dockerfile index 7ae24e6..e77fda8 100644 --- a/linux/Dockerfile +++ b/linux/Dockerfile @@ -1,23 +1,3 @@ -FROM debian:11 AS debian - -RUN apt-get update \ - && apt-get install -y build-essential libevent-dev libpcre2-dev automake libtool pkg-config git curl llvm-13 clang-13 \ - && (pkg-config || true) - -ARG release -ENV CFLAGS="-fPIC -pipe ${release:+-O2}" -ENV CC="clang-13" - -# Build libgc -ARG gc_version - -RUN git clone https://github.com/ivmai/bdwgc \ - && cd bdwgc \ - && git checkout ${gc_version} \ - && ./autogen.sh \ - && ./configure --disable-debug --disable-shared --enable-large-config \ - && make -j$(nproc) - FROM alpine:3.17 # Install dependencies @@ -85,15 +65,10 @@ RUN git clone https://github.com/crystal-lang/shards \ \ && ([ "$(ldd bin/shards 2>&1 | wc -l)" -eq "1" ] || { echo 'shards is not statically linked'; ldd bin/shards; exit 1; }) -COPY --from=debian /bdwgc/.libs/libgc.a /libgc-debian.a - ARG package_iteration RUN \ - # Copy libgc.a to /lib/crystal/ mkdir -p /output/lib/crystal/ \ - && cp /libgc-debian.a /output/lib/crystal/libgc.a \ - \ # Install crystal && make -C /crystal install DESTDIR=/output PREFIX= \ \ diff --git a/linux/bundled.dockerfile b/linux/bundled.dockerfile index b6390da..0b8823e 100644 --- a/linux/bundled.dockerfile +++ b/linux/bundled.dockerfile @@ -5,6 +5,16 @@ RUN apt-get update \ ENV CFLAGS="-fPIC -pipe ${release:+-O2}" +# Build libgc +FROM debian AS bdwgc +ARG gc_version +RUN curl -L https://github.com/ivmai/bdwgc/archive/refs/tags/${gc_version}.tar.gz | tar -zx \ + && mv bdwgc-* bdwgc-${gc_version} \ + && cd bdwgc-${gc_version} \ + && ./autogen.sh \ + && ./configure --disable-debug --disable-shared --enable-large-config \ + && make -j$(nproc) + # build libpcre2 FROM debian AS libpcre2 ARG libpcre2_version @@ -27,12 +37,14 @@ RUN git clone https://github.com/libevent/libevent \ FROM debian ARG crystal_version ARG package_iteration +ARG gc_version ARG libpcre2_version ARG libevent_version RUN mkdir -p /output/lib/crystal/lib/ # Copy libraries +COPY --from=bdwgc bdwgc-${gc_version}/.libs/libgc.a /output/lib/crystal/ COPY --from=libpcre2 pcre2-${libpcre2_version}/.libs/libpcre2-8.a /output/lib/crystal/ COPY --from=libevent libevent/.libs/libevent.a libevent/.libs/libevent_pthreads.a /output/lib/crystal/