1
1
ARG APP=mmseqs
2
- FROM --platform=$BUILDPLATFORM debian:stable -slim as builder
2
+ FROM --platform=$BUILDPLATFORM debian:bookworm -slim AS builder
3
3
ARG TARGETARCH
4
4
ARG APP
5
+ ARG GPU
5
6
6
7
RUN dpkg --add-architecture $TARGETARCH \
7
8
&& apt-get update \
8
9
&& apt-get install -y \
9
- build-essential cmake xxd git \
10
+ build-essential cmake xxd git wget \
10
11
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 ninja-build; \
17
+ fi; \
18
+ rm -rf /var/lib/apt/lists/*;
13
19
14
20
WORKDIR /opt/build
15
21
ADD . .
@@ -22,33 +28,51 @@ RUN if [ "$TARGETARCH" = "arm64" ]; then \
22
28
mv src/${APP} /opt/build/${APP}_arch; \
23
29
touch /opt/build/${APP}_sse2 /opt/build/${APP}_sse41 /opt/build/${APP}_avx2; \
24
30
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
+ cmake -GNinja -DHAVE_AVX2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 \
36
+ -DPREFER_STATIC=1 -DBUILD_SHARED_LIBS=OFF \
37
+ -DCMAKE_EXE_LINKER_FLAGS="-static-libgcc -static-libstdc++" \
38
+ -DENABLE_CUDA=1 -DCMAKE_CUDA_ARCHITECTURES="75-real;80-real;86-real;89-real;90" \
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; \
39
59
fi
40
60
41
- FROM debian:stable -slim
61
+ FROM debian:bookworm -slim
42
62
ARG TARGETARCH
43
63
ARG 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
48
65
49
66
COPY --from=builder /opt/build/${APP}_arch /opt/build/${APP}_sse2 /opt/build/${APP}_sse41 /opt/build/${APP}_avx2 /usr/local/bin/
50
67
ADD 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
52
68
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
54
77
78
+ ENTRYPOINT ["/usr/local/bin/entrypoint" ]
0 commit comments