11ARG APP=mmseqs
2- FROM --platform=$BUILDPLATFORM debian:stable -slim as builder
2+ FROM --platform=$BUILDPLATFORM debian:bookworm -slim AS builder
33ARG TARGETARCH
44ARG APP
5+ ARG GPU
56
67RUN dpkg --add-architecture $TARGETARCH \
78 && apt-get update \
89 && apt-get install -y \
9- build-essential cmake xxd git \
10+ build-essential cmake xxd git wget \
1011 zlib1g-dev libbz2-dev libatomic1 \
11- crossbuild-essential-$TARGETARCH zlib1g-dev:$TARGETARCH libbz2-dev:$TARGETARCH \
12- && rm -rf /var/lib/apt/lists/*
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/*;
1319
1420WORKDIR /opt/build
1521ADD . .
@@ -22,33 +28,51 @@ RUN if [ "$TARGETARCH" = "arm64" ]; then \
2228 mv src/${APP} /opt/build/${APP}_arch; \
2329 touch /opt/build/${APP}_sse2 /opt/build/${APP}_sse41 /opt/build/${APP}_avx2; \
2430 else \
25- mkdir -p build_sse2/src && mkdir -p build_sse41/src && mkdir -p build_avx2/src; \
26- cd /opt/build/build_sse2; \
27- cmake -DHAVE_SSE2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
28- make -j $(nproc --all); \
29- mv src/${APP} /opt/build/${APP}_sse2; \
30- cd /opt/build/build_sse41; \
31- cmake -DHAVE_SSE4_1=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
32- make -j $(nproc --all); \
33- mv src/${APP} /opt/build/${APP}_sse41; \
34- cd /opt/build/build_avx2; \
35- cmake -DHAVE_AVX2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
36- make -j $(nproc --all); \
37- mv src/${APP} /opt/build/${APP}_avx2; \
38- touch /opt/build/${APP}_arch; \
31+ if [ "$GPU" = "1" ]; then \
32+ export CUDACXX=/usr/local/cuda/bin/nvcc; \
33+ mkdir -p build_avx2/src; \
34+ cd /opt/build/build_avx2; \
35+ LIBGOMP=/usr/lib/gcc/x86_64-linux-gnu/12/; \
36+ cmake -GNinja -DHAVE_AVX2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DFORCE_STATIC_DEPS=1 \
37+ -DENABLE_CUDA=1 -DCMAKE_CUDA_ARCHITECTURES="75-real;80-real;86-real;89-real;90" \
38+ -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 \
39+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
40+ cmake --build . -j$(nproc --all); \
41+ mv src/${APP} /opt/build/${APP}_avx2; \
42+ touch /opt/build/${APP}_arch /opt/build/${APP}_sse41 /opt/build/${APP}_sse2; \
43+ else \
44+ mkdir -p build_sse2/src && mkdir -p build_sse41/src && mkdir -p build_avx2/src; \
45+ cd /opt/build/build_sse2; \
46+ cmake -DHAVE_SSE2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
47+ make -j $(nproc --all); \
48+ mv src/${APP} /opt/build/${APP}_sse2; \
49+ cd /opt/build/build_sse41; \
50+ cmake -DHAVE_SSE4_1=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
51+ make -j $(nproc --all); \
52+ mv src/${APP} /opt/build/${APP}_sse41; \
53+ cd /opt/build/build_avx2; \
54+ cmake -DHAVE_AVX2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
55+ make -j $(nproc --all); \
56+ mv src/${APP} /opt/build/${APP}_avx2; \
57+ touch /opt/build/${APP}_arch; \
58+ fi; \
3959 fi
4060
41- FROM debian:stable -slim
61+ FROM debian:bookworm -slim
4262ARG TARGETARCH
4363ARG APP
44-
45- RUN apt-get update && apt-get install -y \
46- gawk bash grep libstdc++6 libgomp1 libatomic1 zlib1g libbz2-1.0 wget tar \
47- && rm -rf /var/lib/apt/lists/*
64+ ARG GPU
4865
4966COPY --from=builder /opt/build/${APP}_arch /opt/build/${APP}_sse2 /opt/build/${APP}_sse41 /opt/build/${APP}_avx2 /usr/local/bin/
5067ADD util/${APP}_wrapper.sh /usr/local/bin/entrypoint
51- RUN if [ "$TARGETARCH" = "arm64" ]; then rm -f /usr/local/bin/entrypoint; ln -s /usr/local/bin/${APP}_arch /usr/local/bin/entrypoint; fi
5268
53- ENTRYPOINT ["/usr/local/bin/entrypoint" ]
69+ RUN apt-get update && apt-get install -y \
70+ gawk bash grep libstdc++6 libgomp1 libatomic1 zlib1g libbz2-1.0 wget tar aria2 \
71+ && rm -rf /var/lib/apt/lists/*; \
72+ if [ "$TARGETARCH" = "arm64" ]; then \
73+ rm -f /usr/local/bin/entrypoint; ln -s /usr/local/bin/${APP}_arch /usr/local/bin/entrypoint; \
74+ elif [ "$GPU" = "1" ]; then \
75+ rm -f /usr/local/bin/entrypoint; ln -s /usr/local/bin/${APP}_avx2 /usr/local/bin/entrypoint; \
76+ fi
5477
78+ ENTRYPOINT ["/usr/local/bin/entrypoint" ]
0 commit comments