Skip to content

Commit 89f75fe

Browse files
committed
Build docker with build containers
1 parent f2498a2 commit 89f75fe

File tree

2 files changed

+46
-65
lines changed

2 files changed

+46
-65
lines changed

.github/workflows/docker.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,9 @@ jobs:
128128
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
129129
with:
130130
context: .
131-
platforms: linux/amd64
131+
platforms: linux/amd64,linux/arm64
132132
push: true
133-
cache-from: type=gha
134-
cache-to: type=gha,mode=max
133+
no-cache: true
135134
build-args: |
136135
GPU=1
137136
tags: |

Dockerfile

Lines changed: 44 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,62 @@
1+
ARG TARGETARCH
12
ARG APP=mmseqs
2-
FROM --platform=$BUILDPLATFORM debian:bookworm-slim AS builder
3+
ARG GPU=0
4+
5+
FROM --platform=$BUILDPLATFORM ghcr.io/steineggerlab/build-containers:main-sbsa AS builder-arm64
6+
7+
FROM --platform=$BUILDPLATFORM ghcr.io/steineggerlab/build-containers:main-x86_64 AS builder-amd64
8+
9+
FROM builder-${TARGETARCH} AS builder
310
ARG TARGETARCH
411
ARG APP
512
ARG GPU
613

7-
RUN dpkg --add-architecture $TARGETARCH \
8-
&& apt-get update \
9-
&& apt-get install -y \
10-
build-essential cmake xxd git wget \
11-
zlib1g-dev libbz2-dev libatomic1 \
12-
crossbuild-essential-$TARGETARCH zlib1g-dev:$TARGETARCH libbz2-dev:$TARGETARCH; \
13-
if [ "$GPU" = "1" ]; then \
14-
wget https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/cuda-keyring_1.1-1_all.deb; \
15-
dpkg -i cuda-keyring_1.1-1_all.deb; \
16-
apt-get update && apt-get install -y cuda-nvcc-12-6 cuda-cudart-dev-12-6 ninja-build; \
17-
fi; \
18-
rm -rf /var/lib/apt/lists/*; \
19-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \
20-
sh -s -- --profile minimal --default-host ${ARCH}-unknown-linux-gnu -y
21-
2214
WORKDIR /opt/build
2315
ADD . .
24-
25-
RUN if [ "$TARGETARCH" = "arm64" ]; then \
26-
mkdir -p build_$TARGETARCH/src; \
27-
cd /opt/build/build_$TARGETARCH; \
28-
CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ cmake -DHAVE_ARM8=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
29-
make -j $(nproc --all); \
30-
mv src/${APP} /opt/build/${APP}_arch; \
31-
touch /opt/build/${APP}_sse2 /opt/build/${APP}_sse41 /opt/build/${APP}_avx2; \
16+
RUN set -x; \
17+
mkdir -p build/src; \
18+
cd /opt/build/build; \
19+
if [ "$TARGETARCH" = "arm64" ]; then \
20+
/usr/local/bin/cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DHAVE_TESTS=1 -DENABLE_WERROR=1 -DHAVE_ARM8=1 \
21+
-DCMAKE_TOOLCHAIN_FILE=/opt/toolchain.cmake \
22+
-DOpenMP_C_FLAGS="-Xpreprocessor -fopenmp -I${LIBOMP_AARCH64} -pthread" -DOpenMP_C_LIB_NAMES=omp \
23+
-DOpenMP_CXX_FLAGS="-Xpreprocessor -fopenmp -I${LIBOMP_AARCH64} -pthread" -DOpenMP_CXX_LIB_NAMES=omp \
24+
-DOpenMP_C_LIB_NAMES="libomp;dl" \
25+
-DOpenMP_CXX_LIB_NAMES="libomp;dl" \
26+
-DOpenMP_libomp_LIBRARY=${LIBOMP_AARCH64}/libomp.a \
27+
-DOpenMP_dl_LIBRARY=dl \
28+
-DRust_TOOLCHAIN=stable-x86_64-unknown-linux-gnu \
29+
-DRust_CARGO_TARGET=aarch64-unknown-linux-gnu \
30+
-DCMAKE_POLICY_DEFAULT_CMP0074=NEW -DCMAKE_POLICY_DEFAULT_CMP0144=NEW \
31+
-DFORCE_STATIC_DEPS=1 -DENABLE_CUDA=${GPU} -DCMAKE_CUDA_ARCHITECTURES="75-real;80-real;86-real;89-real;90" ..; \
32+
/usr/local/bin/cmake --build . -j$(nproc --all) -v; \
3233
else \
33-
if [ "$GPU" = "1" ]; then \
34-
export CUDACXX=/usr/local/cuda/bin/nvcc; \
35-
mkdir -p build_avx2/src; \
36-
cd /opt/build/build_avx2; \
37-
LIBGOMP=/usr/lib/gcc/x86_64-linux-gnu/12/; \
38-
cmake -GNinja -DHAVE_AVX2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DFORCE_STATIC_DEPS=1 \
39-
-DENABLE_CUDA=1 -DCMAKE_CUDA_ARCHITECTURES="75-real;80-real;86-real;89-real;90" \
40-
-DOpenMP_C_FLAGS="-fopenmp -I${LIBGOMP}" -DOpenMP_C_LIB_NAMES=gomp -DOpenMP_CXX_FLAGS="-fopenmp -I${LIBGOMP}" -DOpenMP_CXX_LIB_NAMES=gomp -DOpenMP_gomp_LIBRARY=${LIBGOMP}/libgomp.a \
41-
-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
42-
cmake --build . -j$(nproc --all); \
43-
mv src/${APP} /opt/build/${APP}_avx2; \
44-
touch /opt/build/${APP}_arch /opt/build/${APP}_sse41 /opt/build/${APP}_sse2; \
45-
else \
46-
mkdir -p build_sse2/src && mkdir -p build_sse41/src && mkdir -p build_avx2/src; \
47-
cd /opt/build/build_sse2; \
48-
cmake -DHAVE_SSE2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
49-
make -j $(nproc --all); \
50-
mv src/${APP} /opt/build/${APP}_sse2; \
51-
cd /opt/build/build_sse41; \
52-
cmake -DHAVE_SSE4_1=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
53-
make -j $(nproc --all); \
54-
mv src/${APP} /opt/build/${APP}_sse41; \
55-
cd /opt/build/build_avx2; \
56-
cmake -DHAVE_AVX2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
57-
make -j $(nproc --all); \
58-
mv src/${APP} /opt/build/${APP}_avx2; \
59-
touch /opt/build/${APP}_arch; \
34+
if [ -e "${LIBGCC}/libgomp.so" ]; then \
35+
mv -f -- "${LIBGCC}/libgomp.so" "${LIBGCC}/libgomp.so.disabled"; \
6036
fi; \
61-
fi
37+
/usr/local/bin/cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DHAVE_TESTS=1 -DENABLE_WERROR=1 -DHAVE_AVX2=1 \
38+
-DOpenMP_C_FLAGS="-fopenmp -I${LIBGCC} -L${LIBGCC}" -DOpenMP_C_LIB_NAMES=gomp \
39+
-DOpenMP_CXX_FLAGS="-fopenmp -I${LIBGCC} -L${LIBGCC}" -DOpenMP_CXX_LIB_NAMES=gomp \
40+
-DOpenMP_gomp_LIBRARY="${LIBGCC}/libgomp.a" \
41+
-DATOMIC_LIB_OVERRIDE="${LIBGCC}/libatomic.a" \
42+
-DCMAKE_POLICY_DEFAULT_CMP0074=NEW -DCMAKE_POLICY_DEFAULT_CMP0144=NEW \
43+
-DZLIB_ROOT=/deps -DBZIP2_ROOT=/deps \
44+
-DFORCE_STATIC_DEPS=1 -DENABLE_CUDA=${GPU} -DCMAKE_CUDA_ARCHITECTURES="75-real;80-real;86-real;89-real;90" ..; \
45+
/usr/local/bin/cmake --build . -j$(nproc --all) -v; \
46+
fi; \
47+
mv src/${APP} /opt/build/${APP};
6248

63-
FROM debian:bookworm-slim
49+
FROM debian:trixie-slim
6450
ARG TARGETARCH
6551
ARG APP
6652
ARG GPU
6753

68-
COPY --from=builder /opt/build/${APP}_arch /opt/build/${APP}_sse2 /opt/build/${APP}_sse41 /opt/build/${APP}_avx2 /usr/local/bin/
69-
ADD util/${APP}_wrapper.sh /usr/local/bin/entrypoint
54+
COPY --from=builder /opt/build/${APP} /usr/local/bin/
7055

7156
RUN apt-get update && apt-get install -y \
72-
gawk bash grep libstdc++6 libgomp1 libatomic1 zlib1g libbz2-1.0 wget tar aria2 \
73-
&& rm -rf /var/lib/apt/lists/*; \
74-
if [ "$TARGETARCH" = "arm64" ]; then \
75-
rm -f /usr/local/bin/entrypoint; ln -s /usr/local/bin/${APP}_arch /usr/local/bin/entrypoint; \
76-
elif [ "$GPU" = "1" ]; then \
77-
rm -f /usr/local/bin/entrypoint; ln -s /usr/local/bin/${APP}_avx2 /usr/local/bin/entrypoint; \
78-
fi
57+
gawk bash grep wget tar aria2 \
58+
&& rm -rf /var/lib/apt/lists/*;
7959

60+
RUN echo "#!/bin/sh\nexec /usr/local/bin/$APP \"\${@}\"" > /usr/local/bin/entrypoint && chmod +x /usr/local/bin/entrypoint
61+
RUN cat /usr/local/bin/entrypoint
8062
ENTRYPOINT ["/usr/local/bin/entrypoint"]

0 commit comments

Comments
 (0)