diff --git a/linux/Dockerfile b/linux/Dockerfile index 631cb77..35aabc1 100644 --- a/linux/Dockerfile +++ b/linux/Dockerfile @@ -1,3 +1,23 @@ +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 @@ -55,10 +75,15 @@ 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 0b8823e..b6390da 100644 --- a/linux/bundled.dockerfile +++ b/linux/bundled.dockerfile @@ -5,16 +5,6 @@ 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 @@ -37,14 +27,12 @@ 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/