|
1 | | -FROM debian:stable-slim as metaeuk-builder |
2 | | - |
3 | | -RUN apt-get update && apt-get upgrade -y && apt-get install -y \ |
4 | | - build-essential cmake xxd git zlib1g-dev libbz2-dev \ |
5 | | - && rm -rf /var/lib/apt/lists/* |
| 1 | +ARG APP=metaeuk |
| 2 | +FROM --platform=$BUILDPLATFORM debian:stable-slim as builder |
| 3 | +ARG TARGETARCH |
| 4 | +ARG APP |
| 5 | + |
| 6 | +RUN dpkg --add-architecture $TARGETARCH \ |
| 7 | + && apt-get update \ |
| 8 | + && apt-get install -y \ |
| 9 | + build-essential cmake xxd git \ |
| 10 | + zlib1g-dev libbz2-dev libatomic1 \ |
| 11 | + crossbuild-essential-$TARGETARCH zlib1g-dev:$TARGETARCH libbz2-dev:$TARGETARCH \ |
| 12 | + && rm -rf /var/lib/apt/lists/* |
6 | 13 |
|
7 | | -WORKDIR /opt/metaeuk |
| 14 | +WORKDIR /opt/build |
8 | 15 | ADD . . |
9 | 16 |
|
10 | | -RUN mkdir -p build_sse/bin && mkdir -p build_avx/bin |
11 | | - |
12 | | -WORKDIR /opt/metaeuk/build_sse |
13 | | -RUN cmake -DHAVE_SSE4_1=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \ |
14 | | - make -j $(nproc --all) && make install; |
15 | | - |
16 | | -WORKDIR /opt/metaeuk/build_avx |
17 | | -RUN cmake -DHAVE_AVX2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \ |
18 | | - make -j $(nproc --all) && make install; |
| 17 | +RUN if [ "$TARGETARCH" = "arm64" ]; then \ |
| 18 | + mkdir -p build_$TARGETARCH/src; \ |
| 19 | + cd /opt/build/build_$TARGETARCH; \ |
| 20 | + 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=. ..; \ |
| 21 | + make -j $(nproc --all); \ |
| 22 | + mv src/${APP} /opt/build/${APP}_arch; \ |
| 23 | + touch /opt/build/${APP}_sse2 /opt/build/${APP}_sse41 /opt/build/${APP}_avx2; \ |
| 24 | + 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; \ |
| 39 | + fi |
19 | 40 |
|
20 | 41 | FROM debian:stable-slim |
21 | | -MAINTAINER Eli Levy Karin < [email protected]> |
| 42 | +MAINTAINER Milot Mirdita < [email protected]> |
| 43 | +ARG APP |
22 | 44 |
|
23 | | -RUN apt-get update && apt-get upgrade -y && apt-get install -y \ |
24 | | - gawk bash grep wget libstdc++6 libgomp1 zlib1g libbz2-1.0 \ |
| 45 | +RUN apt-get update && apt-get install -y \ |
| 46 | + gawk bash grep libstdc++6 libgomp1 libatomic1 zlib1g libbz2-1.0 wget tar \ |
25 | 47 | && rm -rf /var/lib/apt/lists/* |
26 | 48 |
|
27 | | -COPY --from=metaeuk-builder /opt/metaeuk/build_sse/bin/metaeuk /usr/local/bin/metaeuk_sse42 |
28 | | -COPY --from=metaeuk-builder /opt/metaeuk/build_avx/bin/metaeuk /usr/local/bin/metaeuk_avx2 |
29 | | -RUN echo '#!/bin/bash\n\ |
30 | | -if $(grep -q -E "^flags.+avx2" /proc/cpuinfo); then\n\ |
31 | | - exec /usr/local/bin/metaeuk_avx2 "$@"\n\ |
32 | | -else\n\ |
33 | | - exec /usr/local/bin/metaeuk_sse42 "$@"\n\ |
34 | | -fi' > /usr/local/bin/metaeuk |
35 | | -RUN chmod +x /usr/local/bin/metaeuk |
36 | | - |
37 | | -ENTRYPOINT ["/usr/local/bin/metaeuk"] |
| 49 | +COPY --from=builder /opt/build/${APP}_arch /opt/build/${APP}_sse2 /opt/build/${APP}_sse41 /opt/build/${APP}_avx2 /usr/local/bin/ |
| 50 | +ADD util/${APP}_wrapper.sh /usr/local/bin/${APP} |
| 51 | +RUN if [ "$TARGETARCH" = "arm64" ]; then mv -f /opt/build/${APP}_arch /usr/local/bin/${APP}; fi |
| 52 | + |
| 53 | +ENV APP=$APP |
| 54 | +ENTRYPOINT /usr/local/bin/${APP} |
| 55 | + |
0 commit comments