Source
FROM stagex/pallet-gcc-gnu-busybox AS build
ARG VERSION
COPY --from=stagex/core-rust . /
COPY --from=stagex/core-gdbm . /
COPY --from=stagex/core-readline . /
COPY --from=stagex/core-libucontext . /
COPY --from=stagex/core-llvm . /
COPY --from=stagex/core-binutils . /
COPY --from=stagex/core-libffi . /
COPY --from=stagex/core-libzstd . /
COPY --from=stagex/core-linux-headers . /
COPY --from=stagex/core-openssl . /
COPY --from=stagex/core-yaml . /
COPY --from=stagex/core-zlib . /
COPY --from=stagex/core-perl . /
ADD fetch/ruby-${VERSION}.tar.gz .
WORKDIR /ruby-${VERSION}
ENV LDFLAGS="-Wl,-O1 -Wl,--sort-common"
ENV CFLAGS="-march=x86-64 -mtune=generic"
ENV CXXFLAGS="$CFLAGS"
ENV CPPFLAGS="$CXXFLAGS"
ENV ARCH="$(uname -m)"
COPY *.patch .
RUN --network=none <<-EOF
set -eux
patch -p1 dont-install-bundled-gems.patch
export CFLAGS="${CFLAGS/-Os/-O2} -fno-omit-frame-pointer -fno-strict-aliasing"
export CPPFLAGS="${CPPFLAGS/-Os/-O2} -fno-omit-frame-pointer -fno-strict-aliasing"
# Needed for coroutine stuff
export LIBS="-lucontext"
# ruby saves path to install. we want use $PATH
export INSTALL=install
# the configure script does not detect isnan/isinf as macros
export ac_cv_func_isnan=yes
export ac_cv_func_isinf=yes
./configure \
--prefix=/usr \
--sysconfdir=/etc \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--with-sitedir=/usr/local/lib/site_ruby \
--with-search-path="/usr/lib/site_ruby/${VERSION}/${ARCH}" \
--enable-pthread \
--disable-rpath \
--enable-shared \
--with-mantype=man || { cat config.log; exit 1; }
make -j "$(nproc)"
make DESTDIR=/rootfs install
EOF
FROM stagex/core-filesystem AS package
COPY --from=build /rootfs/ /