docker: Refactor into build matrix. [ci skip]

This commit is contained in:
Jason Volk 2023-03-30 23:46:29 +00:00
parent 1b67a12a5f
commit 7929733978
20 changed files with 365 additions and 314 deletions

View File

@ -1,4 +1,7 @@
FROM --platform=$TARGETPLATFORM alpine:3.16.1
ARG dist_name alpine
ARG dist_version 3.16
FROM --platform=$TARGETPLATFORM ${dist_name}:${dist_version}
ENV packages="\
boost-chrono \

View File

@ -1,8 +1,11 @@
ARG acct
ARG repo
ARG dist_name
ARG dist_version
ARG feature
ARG machine
FROM ${acct}/${repo}:alpine-3.16-${feature}-${TARGETARCH}
FROM ${acct}/${repo}:${dist_name}-${dist_version}-${feature}-${machine}
ARG cc
ARG cxx
@ -12,6 +15,7 @@ ARG extra_packages_dev2
ARG rocksdb_version 7.4.3
ARG rocksdb_url
ARG ctor_url https://github.com/matrix-construct/construct
ARG machine_spec
ENV CC ${cc}
ENV CXX ${cxx}
@ -20,12 +24,12 @@ ENV CONFIG_SHELL bash
ENV rocksdb_version ${rocksdb_version}
ENV rocksdb_url https://codeload.github.com/facebook/rocksdb/tar.gz/refs/tags/v${rocksdb_version}
ENV ctor_url ${ctor_url}
ENV machine_spec ${machine_spec}
ENV packages_dev="\
${packages_dev} \
autoconf \
autoconf-archive \
autoconf2.13 \
automake \
bash \
binutils-gold \
@ -50,7 +54,7 @@ RUN true \
&& ln -sv /usr/src/rocksdb construct/deps/rocksdb \
&& cd /usr/src/construct \
&& ./autogen.sh \
&& (./configure --disable-iou || (cat config.log; exit 1)) \
&& (./configure --disable-iou --enable-generic --with-machine="${machine_spec}" || (cat config.log; exit 1)) \
&& make -j `nproc` EXTRA_LDFLAGS="-Wl,--strip-all" install \
&& rm -rf /usr/src/rocksdb \
&& rm -rf /usr/src/construct \

View File

@ -1,7 +1,10 @@
ARG acct
ARG repo
ARG dist_name
ARG dist_version
ARG machine
FROM ${acct}/${repo}:alpine-3.16-base-${TARGETARCH}
FROM ${acct}/${repo}:${dist_name}-${dist_version}-base-${machine}
ENV packages="\
freetype \

View File

@ -1,9 +1,12 @@
ARG acct
ARG repo
ARG dist_name
ARG dist_version
ARG feature
ARG cc
ARG machine
FROM ${acct}/${repo}:alpine-3.16-${feature}-built-${cc}-${TARGETARCH}
FROM ${acct}/${repo}:${dist_name}-${dist_version}-${feature}-built-${cc}-${machine}
ENV ircd_mods_unload_check=false
WORKDIR /root

View File

@ -3,144 +3,195 @@
BASEDIR=$(dirname "$0")
ACCT=jevolk
REPO=construct
ctor_url="https://github.com/matrix-construct/construct"
rocksdb_version=7.4.3
ARGS_=""
ARGS_="$ARGS_ --compress=true"
ARGS_="$ARGS_ --build-arg acct=$ACCT"
ARGS_="$ARGS_ --build-arg repo=$REPO"
ARGS_="$ARGS_ --build-arg ctor_url=$ctor_url"
ARGS_="$ARGS_ --build-arg rocksdb_version=$rocksdb_version"
CTOR_URL="https://github.com/matrix-construct/construct"
export DOCKER_BUILDKIT=1
#export BUILDKIT_PROGRESS=plain
###############################################################################
#
# Alpine 3.16
#
features="base full"
distros="ubuntu-22.04 ubuntu-22.10 alpine-3.16 alpine-3.17"
machines="arm64 amd64 amd64-avx amd64-avx2 amd64-avx512"
toolchains="gcc-10 gcc-11 gcc-12 clang-14 clang-15"
stages="built test"
#
# L0 - Base featured image
#
matrix()
{
for feature_ in $features; do
for distro_ in $distros; do
for machine_ in $machines; do
for toolchain_ in $toolchains; do
for stage_ in $stages; do
build $feature_ $distro_ $machine_ $toolchain_ $stage_
done
done
done
done
done
}
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-amd64 $BASEDIR/alpine/3.16/base
build()
{
feature=$1
distro=$2
machine=$3
toolchain=$4
stage=$5
#
# L1 - Fully featured image
#
dist_name=$(echo $distro | cut -d"-" -f1)
dist_version=$(echo $distro | cut -d"-" -f2)
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-amd64 $BASEDIR/alpine/3.16/full
args=""
args="$args --compress=true"
args="$args --build-arg acct=$ACCT"
args="$args --build-arg repo=$REPO"
args="$args --build-arg ctor_url=$CTOR_URL"
args="$args --build-arg dist_name=${dist_name}"
args="$args --build-arg dist_version=${dist_version}"
args="$args --build-arg feature=${feature}"
args="$args --build-arg machine=${machine}"
#
# L2/L3 - Built/Test images
#
args_dist $dist_name $dist_version
if test $? -ne 0; then return 1; fi
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
ARGS="$ARGS --build-arg feature=base"
ARGS="$ARGS --build-arg extra_packages_dev=gcc"
ARGS="$ARGS --build-arg extra_packages_dev1=g++"
ARGS="$ARGS --build-arg cc=gcc --build-arg cxx=g++"
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-built-gcc-amd64 $BASEDIR/alpine/3.16/built
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-test-gcc-amd64 $BASEDIR/alpine/3.16/test
docker push $ACCT/$REPO:alpine-3.16-base-built-gcc-amd64
args_toolchain $toolchain $dist_name $dist_version
if test $? -ne 0; then return 1; fi
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
ARGS="$ARGS --build-arg feature=base"
ARGS="$ARGS --build-arg extra_packages_dev=clang"
ARGS="$ARGS --build-arg extra_packages_dev1=llvm"
ARGS="$ARGS --build-arg extra_packages_dev2=llvm-dev"
ARGS="$ARGS --build-arg cc=clang --build-arg cxx=clang++"
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-built-clang-amd64 $BASEDIR/alpine/3.16/built
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-test-clang-amd64 $BASEDIR/alpine/3.16/test
docker push $ACCT/$REPO:alpine-3.16-base-built-clang-amd64
args_machine $machine
if test $? -ne 0; then return 1; fi
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
ARGS="$ARGS --build-arg feature=full"
ARGS="$ARGS --build-arg extra_packages_dev=gcc"
ARGS="$ARGS --build-arg extra_packages_dev1=g++"
ARGS="$ARGS --build-arg cc=gcc --build-arg cxx=g++"
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-built-gcc-amd64 $BASEDIR/alpine/3.16/built
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-test-gcc-amd64 $BASEDIR/alpine/3.16/test
docker push $ACCT/$REPO:alpine-3.16-full-built-gcc-amd64
args_platform $machine
if test $? -ne 0; then return 1; fi
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
ARGS="$ARGS --build-arg feature=full"
ARGS="$ARGS --build-arg extra_packages_dev=clang"
ARGS="$ARGS --build-arg extra_packages_dev1=llvm"
ARGS="$ARGS --build-arg extra_packages_dev2=llvm-dev"
ARGS="$ARGS --build-arg cc=clang --build-arg cxx=clang++"
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-built-clang-amd64 $BASEDIR/alpine/3.16/built
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-test-clang-amd64 $BASEDIR/alpine/3.16/test
docker push $ACCT/$REPO:alpine-3.16-full-built-clang-amd64
# Intermediate stage build; usually cached from prior iteration.
tag="$ACCT/$REPO:${distro}-${feature}-${machine}"
cmd="$args -t $tag $BASEDIR/${dist_name}/${feature}"
docker build $cmd
###############################################################################
#
# Ubuntu 22.04
#
# Leaf stage build; unique to each iteration.
tag="$ACCT/$REPO:${distro}-${feature}-${stage}-${toolchain}-${machine}"
cmd="$args -t $tag $BASEDIR/${dist_name}/${stage}"
docker build $cmd
return 0
}
#
# L0 - Base featured image
#
args_dist()
{
case $1 in
alpine)
case $2 in
3.16)
args="$args --build-arg rocksdb_version=7.2.2"
return 0
;;
3.17)
args="$args --build-arg rocksdb_version=7.7.3"
return 0
;;
esac
;;
ubuntu)
case $2 in
22.04)
args="$args --build-arg rocksdb_version=7.4.3"
args="$args --build-arg boost_version=1.74"
args="$args --build-arg icu_version=70"
return 0
;;
22.10)
args="$args --build-arg rocksdb_version=7.10.2"
args="$args --build-arg boost_version=1.74"
args="$args --build-arg icu_version=71"
return 0
;;
esac
;;
esac
return 1
}
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-amd64 $BASEDIR/ubuntu/22.04/base
args_toolchain()
{
_name=$(echo $1 | cut -d"-" -f1)
_version=$(echo $1 | cut -d"-" -f2)
#
# L1 - Fully featured image
#
case $2 in
alpine)
toolchain=$_name
case $1 in
gcc*)
args="$args --build-arg extra_packages_dev=gcc"
args="$args --build-arg extra_packages_dev1=g++"
args="$args --build-arg cc=gcc --build-arg cxx=g++"
return 0
;;
clang*)
args="$args --build-arg extra_packages_dev=clang"
args="$args --build-arg extra_packages_dev1=llvm"
args="$args --build-arg extra_packages_dev2=llvm-dev"
args="$args --build-arg cc=clang --build-arg cxx=clang++"
test $3 != "3.16"
return $?
;;
esac
;;
ubuntu)
case $1 in
gcc*)
args="$args --build-arg extra_packages_dev=gcc-${_version}"
args="$args --build-arg extra_packages_dev1=g++-${_version}"
args="$args --build-arg cc=gcc-${_version} --build-arg cxx=g++-${_version}"
return 0
;;
clang*)
args="$args --build-arg extra_packages_dev=clang-${_version}"
args="$args --build-arg extra_packages_dev1=llvm-${_version}-dev"
args="$args --build-arg extra_packages_dev2=llvm-spirv-${_version}"
args="$args --build-arg cc=clang-${_version} --build-arg cxx=clang++-${_version}"
return 0
;;
esac
;;
esac
return 1
}
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-full-amd64 $BASEDIR/ubuntu/22.04/full
args_machine()
{
case $1 in
amd64)
args="$args --build-arg machine_spec=arch=amdfam10"
;;
amd64-avx)
args="$args --build-arg machine_spec=arch=sandybridge"
args="$args --build-arg rocksdb_avx=1"
;;
amd64-avx2)
args="$args --build-arg machine_spec=arch=haswell"
args="$args --build-arg rocksdb_avx2=1"
;;
amd64-avx512)
args="$args --build-arg machine_spec=arch=skylake-avx512"
args="$args --build-arg rocksdb_avx2=1"
;;
esac
return 0
}
#
# L2/L3 - Build/Built/Test
#
args_platform()
{
case $1 in
amd64*)
args="$args --platform linux/amd64"
test $(uname -m) = "x86_64"
return $?
;;
arm64*)
args="$args --platform linux/arm64"
test $(uname -m) = "aarch64"
return $?
;;
esac
return 1
}
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
ARGS="$ARGS --build-arg feature=base"
ARGS="$ARGS --build-arg extra_packages_dev=gcc-10"
ARGS="$ARGS --build-arg extra_packages_dev1=g++-10"
ARGS="$ARGS --build-arg cc=gcc-10 --build-arg cxx=g++-10"
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-build-gcc-10-amd64 $BASEDIR/ubuntu/22.04/build
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-built-gcc-10-amd64 $BASEDIR/ubuntu/22.04/built
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-test-gcc-10-amd64 $BASEDIR/ubuntu/22.04/test
docker push $ACCT/$REPO:ubuntu-22.04-base-build-gcc-10-amd64
docker push $ACCT/$REPO:ubuntu-22.04-base-built-gcc-10-amd64
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
ARGS="$ARGS --build-arg feature=base"
ARGS="$ARGS --build-arg extra_packages_dev=gcc-12"
ARGS="$ARGS --build-arg extra_packages_dev1=g++-12"
ARGS="$ARGS --build-arg cc=gcc-12 --build-arg cxx=g++-12"
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-build-gcc-12-amd64 $BASEDIR/ubuntu/22.04/build
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-built-gcc-12-amd64 $BASEDIR/ubuntu/22.04/built
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-test-gcc-12-amd64 $BASEDIR/ubuntu/22.04/test
docker push $ACCT/$REPO:ubuntu-22.04-base-build-gcc-12-amd64
docker push $ACCT/$REPO:ubuntu-22.04-base-built-gcc-12-amd64
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
ARGS="$ARGS --build-arg feature=full"
ARGS="$ARGS --build-arg extra_packages_dev=clang-15"
ARGS="$ARGS --build-arg extra_packages_dev1=llvm-15-dev"
ARGS="$ARGS --build-arg extra_packages_dev2=llvm-spirv-15"
ARGS="$ARGS --build-arg cc=clang-15 --build-arg cxx=clang++-15"
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-full-build-clang-15-amd64 $BASEDIR/ubuntu/22.04/build
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-full-built-clang-15-amd64 $BASEDIR/ubuntu/22.04/built
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-full-test-clang-15-amd64 $BASEDIR/ubuntu/22.04/test
docker push $ACCT/$REPO:ubuntu-22.04-full-build-clang-15-amd64
docker push $ACCT/$REPO:ubuntu-22.04-full-built-clang-15-amd64
matrix

View File

@ -1,60 +0,0 @@
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
RUN \
apt-get update && \
apt-get install --no-install-recommends -y software-properties-common && \
apt-get update && \
apt-get install --no-install-recommends -y \
autoconf \
autoconf-archive \
autoconf2.13 \
automake \
autotools-dev \
boost1.71 \
build-essential \
cmake \
curl \
git \
libbz2-dev \
liblz4-dev \
libgraphicsmagick1-dev \
libicu-dev \
libjemalloc-dev \
libmagic-dev \
libnss-db \
libsodium-dev \
libssl-dev \
libtool \
libzstd-dev \
shtool \
xz-utils && \
apt-get purge -y software-properties-common && \
apt-get clean && \
apt-get autoremove --purge -y && \
rm -rf /var/lib/apt/lists/*
ENV ROCKSDB_VERSION=6.6.4
RUN \
cd /usr/src && \
curl -sL https://github.com/facebook/rocksdb/archive/v${ROCKSDB_VERSION}.tar.gz -o rocksdb-${ROCKSDB_VERSION}.tar.gz && \
tar xfvz rocksdb-${ROCKSDB_VERSION}.tar.gz && \
rm rocksdb-${ROCKSDB_VERSION}.tar.gz && \
ln -s /usr/src/rocksdb-${ROCKSDB_VERSION} /usr/src/rocksdb && \
cd /usr/src/rocksdb-${ROCKSDB_VERSION} && \
CFLAGS="-g0" \
cmake -H. -Bbuild \
-DCMAKE_BUILD_TYPE=Release \
-DWITH_TESTS=0 \
-DWITH_TOOLS=0 \
-DUSE_RTTI=1 \
-DWITH_LZ4=1 \
-DWITH_GFLAGS=0 \
-DBUILD_SHARED_LIBS=1 && \
cmake --build build --target install && \
rm -rf build
RUN mkdir /build
WORKDIR /build

View File

@ -1,10 +0,0 @@
FROM jevolk/construct:ubuntu-20.04
ENV CC clang-10
ENV CXX clang++-10
RUN apt-get update \
&& apt-get install --no-install-recommends -y clang-10 llvm-10-dev \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*

View File

@ -1,10 +0,0 @@
FROM jevolk/construct:ubuntu-20.04
ENV CC clang-11
ENV CXX clang++-11
RUN apt-get update \
&& apt-get install --no-install-recommends -y clang-11 llvm-11-dev \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*

View File

@ -1,10 +0,0 @@
FROM jevolk/construct:ubuntu-20.04
ENV CC clang-12
ENV CXX clang++-12
RUN apt-get update \
&& apt-get install --no-install-recommends -y clang-12 llvm-12-dev \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*

View File

@ -1,10 +0,0 @@
FROM jevolk/construct:ubuntu-20.04
ENV CC clang-9
ENV CXX clang++-9
RUN apt-get update \
&& apt-get install --no-install-recommends -y clang-9 llvm-9-dev \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*

View File

@ -1,11 +0,0 @@
FROM jevolk/construct:ubuntu-20.04
ENV CXX g++-10
ENV CC gcc-10
RUN apt-get update \
&& apt-get install --no-install-recommends -y software-properties-common \
&& apt-get update \
&& apt-get install --no-install-recommends -y g++-10 gcc-10 \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*

View File

@ -1,9 +0,0 @@
FROM jevolk/construct:ubuntu-20.04
ENV CXX g++-8
ENV CC gcc-8
RUN apt-get update \
&& apt-get install --no-install-recommends -y g++-8 gcc-8 \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*

View File

@ -1,11 +0,0 @@
FROM jevolk/construct:ubuntu-20.04
ENV CXX g++-9
ENV CC gcc-9
RUN apt-get update \
&& apt-get install --no-install-recommends -y software-properties-common \
&& apt-get update \
&& apt-get install --no-install-recommends -y g++-9 gcc-9 \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*

View File

@ -1,37 +0,0 @@
ARG acct
ARG repo
ARG feature
FROM ${acct}/${repo}:ubuntu-22.04-${feature}-${TARGETARCH}
ARG cc
ARG cxx
ARG extra_packages_dev
ARG extra_packages_dev1
ARG extra_packages_dev2
ARG ctor_url https://github.com/matrix-construct/construct
ENV CC ${cc}
ENV CXX ${cxx}
ENV ctor_url ${ctor_url}
ENV packages_dev="\
${packages_dev} \
autoconf \
autoconf-archive \
autoconf2.13 \
automake \
autotools-dev \
git \
libtool \
shtool \
${extra_packages_dev} \
${extra_packages_dev1} \
${extra_packages_dev2} \
"
RUN true \
&& eval ${do_install} ${packages_dev} \
&& eval ${do_fetch_rocksdb} \
&& eval ${do_clean} \
&& true

View File

@ -1,11 +0,0 @@
ARG acct
ARG repo
ARG feature
ARG cc
FROM ${acct}/${repo}:ubuntu-22.04-${feature}-built-${cc}-${TARGETARCH}
WORKDIR /root
RUN true \
&& construct -debug -smoketest localhost \
&& true

View File

@ -0,0 +1,133 @@
ARG dist_name ubuntu
ARG dist_version 22.04
FROM --platform=$TARGETPLATFORM ${dist_name}:${dist_version}
ARG skiprocks
ARG rocksdb_version 7.4.5
ARG rocksdb_url
ARG rocksdb_avx 0
ARG rocksdb_avx2 0
ARG boost_version 1.74
ARG icu_version 70
ENV rocksdb_version ${rocksdb_version}
ENV rocksdb_url https://codeload.github.com/facebook/rocksdb/tar.gz/refs/tags/v${rocksdb_version}
ENV rocksdb_avx ${rocksdb_avx}
ENV rocksdb_avx2 ${rocksdb_avx2}
ENV boost_version ${boost_version}
ENV icu_version ${icu_version}
ENV packages="\
ca-certificates \
libatomic1 \
libjemalloc2 \
libboost-chrono${boost_version}.0 \
libboost-context${boost_version}.0 \
libboost-coroutine${boost_version}.0 \
libboost-system${boost_version}.0 \
libboost-thread${boost_version}.0 \
libicu${icu_version} \
libnss-db \
libsodium23 \
libssl3 \
liblz4-1 \
libmagic1 \
libzstd1 \
"
ENV packages_rocksdb_dev="\
build-essential \
cmake \
libjemalloc-dev \
liblz4-dev \
libzstd-dev \
xz-utils \
"
ENV packages_dev="\
${packages_rocksdb_dev} \
libboost-chrono${boost_version}-dev \
libboost-context${boost_version}-dev \
libboost-coroutine${boost_version}-dev \
libboost-system${boost_version}-dev \
libboost-thread${boost_version}-dev \
libicu-dev \
libmagic-dev \
libsodium-dev \
libssl-dev \
"
ENV rocksdb_cmake="\
-DCMAKE_RULE_MESSAGES:BOOL=OFF \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=1 \
-DFAIL_ON_WARNINGS=0 \
-DUSE_RTTI=1 \
-DPORTABLE=1 \
-DFORCE_AVX=${rocksdb_avx} \
-DFORCE_AVX2=${rocksdb_avx2} \
-DWITH_JNI=0 \
-DWITH_TESTS=0 \
-DWITH_BENCHMARK_TOOLS=0 \
-DWITH_CORE_TOOLS=0 \
-DWITH_GFLAGS=0 \
-DWITH_LIBURING=0 \
-DWITH_JEMALLOC=1 \
-DWITH_LZ4=1 \
-DWITH_ZSTD=1 \
"
ENV do_install true \
&& export DEBIAN_FRONTEND=noninteractive \
&& apt-get update \
&& apt-get install --no-install-recommends -y -f
ENV do_purge true \
&& export DEBIAN_FRONTEND=noninteractive \
&& apt-get purge -y
ENV do_clean true \
&& export DEBIAN_FRONTEND=noninteractive \
&& apt-get clean \
&& apt-get autoremove --purge -y \
&& rm -rf /var/lib/apt/lists/* \
&& true
ENV do_fetch_rocksdb true \
&& eval ${do_install} curl \
&& cd /usr/src \
&& curl -sL ${rocksdb_url} -o rocksdb-${rocksdb_version}.tar.gz \
&& tar xfvz rocksdb-${rocksdb_version}.tar.gz \
&& rm rocksdb-${rocksdb_version}.tar.gz \
&& mv /usr/src/rocksdb-${rocksdb_version} /usr/src/rocksdb \
&& cd - \
&& eval ${do_purge} curl \
&& true
RUN true \
&& eval ${do_install} ${packages} \
&& update-ca-certificates \
&& eval ${do_clean} \
&& mkdir /build \
&& true
WORKDIR /build
RUN true \
&& if test -n "$skiprocks"; then \
exit 0; \
fi \
&& eval ${do_install} ${packages_rocksdb_dev} \
&& eval ${do_fetch_rocksdb} \
&& cd /usr/src/rocksdb \
&& \
CFLAGS="-g0 -ftls-model=initial-exec" \
LDFLAGS="-Wl,--strip-all" \
cmake -H. -Bbuild ${rocksdb_cmake} \
&& cmake --build build --target install --parallel `nproc` \
&& rm -rf /usr/lib/$(uname -m)-linux-gnu/librocksdb.a \
&& rm -rf /usr/src/rocksdb \
&& eval ${do_purge} ${packages_rocksdb_dev} \
&& eval ${do_clean} \
&& true

View File

@ -1,11 +1,19 @@
FROM ubuntu:22.04
ARG distribution
FROM --platform=$TARGETPLATFORM $distribution
ARG skiprocks
ARG rocksdb_version 7.4.5
ARG rocksdb_url
ARG rocksdb_portable 1
ARG rocksdb_avx 0
ARG rocksdb_avx2 0
ENV rocksdb_version ${rocksdb_version}
ENV rocksdb_url https://codeload.github.com/facebook/rocksdb/tar.gz/refs/tags/v${rocksdb_version}
ENV rocksdb_portable ${rocksdb_portable}
ENV rocksdb_avx ${rocksdb_avx}
ENV rocksdb_avx2 ${rocksdb_avx2}
ENV packages="\
ca-certificates \
@ -50,19 +58,22 @@ libssl-dev \
ENV rocksdb_cmake="\
-DCMAKE_RULE_MESSAGES:BOOL=OFF \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=1 \
-DFAIL_ON_WARNINGS=0 \
-DUSE_RTTI=1 \
-DPORTABLE=${rocksdb_portable} \
-DFORCE_AVX=${rocksdb_avx} \
-DFORCE_AVX2=${rocksdb_avx2} \
-DWITH_JNI=0 \
-DWITH_TESTS=0 \
-DWITH_BENCHMARK_TOOLS=0 \
-DWITH_CORE_TOOLS=0 \
-DFAIL_ON_WARNINGS=0 \
-DCMAKE_BUILD_TYPE=Release \
-DWITH_GFLAGS=0 \
-DWITH_LIBURING=0 \
-DWITH_JEMALLOC=1 \
-DWITH_LZ4=1 \
-DWITH_ZSTD=1 \
-DUSE_RTTI=1 \
-DBUILD_SHARED_LIBS=1 \
"
ENV do_install true \

View File

@ -1,8 +1,11 @@
ARG acct
ARG repo
ARG dist_name
ARG dist_version
ARG feature
ARG machine
FROM ${acct}/${repo}:ubuntu-22.04-${feature}-${TARGETARCH}
FROM ${acct}/${repo}:${dist_name}-${dist_version}-${feature}-${machine}
ARG cc
ARG cxx
@ -10,10 +13,12 @@ ARG extra_packages_dev
ARG extra_packages_dev1
ARG extra_packages_dev2
ARG ctor_url https://github.com/matrix-construct/construct
ARG machine_spec
ENV CC ${cc}
ENV CXX ${cxx}
ENV ctor_url ${ctor_url}
ENV machine_spec ${machine_spec}
ENV packages_dev="\
${packages_dev} \
@ -38,7 +43,7 @@ RUN true \
&& rmdir -v deps/rocksdb \
&& ln -sv /usr/src/rocksdb deps \
&& ./autogen.sh \
&& ./configure \
&& ./configure --enable-generic --with-machine="${machine_spec}" \
&& make -j `nproc` \
&& make install \
&& cd .. \

View File

@ -1,7 +1,10 @@
ARG acct
ARG repo
ARG dist_name
ARG dist_version
ARG machine
FROM ${acct}/${repo}:ubuntu-22.04-base-${TARGETARCH}
FROM ${acct}/${repo}:${dist_name}-${dist_version}-base-${machine}
ENV packages="\
libgraphicsmagick-q16-3 \

View File

@ -0,0 +1,14 @@
ARG acct
ARG repo
ARG dist_name
ARG dist_version
ARG feature
ARG cc
ARG machine
FROM ${acct}/${repo}:${dist_name}-${dist_version}-${feature}-built-${cc}-${machine}
WORKDIR /root
RUN true \
&& construct -debug -smoketest localhost \
&& true