From 8e162c4fbcb76825a44d11ea3c318ddc261d733c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20Sch=C3=BCtt?= Date: Tue, 29 Mar 2022 22:38:04 +0200 Subject: [PATCH] Docker: Add generic test and prod files --- tools/docker/Dockerfile.prod_cuda_A100 | 2 + tools/docker/Dockerfile.prod_cuda_P100 | 2 + tools/docker/Dockerfile.prod_cuda_V100 | 2 + tools/docker/Dockerfile.prod_generic_pdbg | 97 +++++++++++++++++++++++ tools/docker/Dockerfile.prod_generic_psmp | 97 +++++++++++++++++++++++ tools/docker/Dockerfile.prod_generic_sdbg | 97 +++++++++++++++++++++++ tools/docker/Dockerfile.prod_generic_ssmp | 97 +++++++++++++++++++++++ tools/docker/Dockerfile.prod_pdbg | 2 + tools/docker/Dockerfile.prod_psmp | 2 + tools/docker/Dockerfile.prod_sdbg | 2 + tools/docker/Dockerfile.prod_ssmp | 2 + tools/docker/Dockerfile.test_generic_pdbg | 90 +++++++++++++++++++++ tools/docker/Dockerfile.test_generic_psmp | 90 +++++++++++++++++++++ tools/docker/Dockerfile.test_generic_sdbg | 90 +++++++++++++++++++++ tools/docker/Dockerfile.test_generic_ssmp | 90 +++++++++++++++++++++ tools/docker/generate_dockerfiles.py | 19 ++++- tools/docker/scripts/prod_entrypoint.sh | 3 +- 17 files changed, 778 insertions(+), 6 deletions(-) create mode 100644 tools/docker/Dockerfile.prod_generic_pdbg create mode 100644 tools/docker/Dockerfile.prod_generic_psmp create mode 100644 tools/docker/Dockerfile.prod_generic_sdbg create mode 100644 tools/docker/Dockerfile.prod_generic_ssmp create mode 100644 tools/docker/Dockerfile.test_generic_pdbg create mode 100644 tools/docker/Dockerfile.test_generic_psmp create mode 100644 tools/docker/Dockerfile.test_generic_sdbg create mode 100644 tools/docker/Dockerfile.test_generic_ssmp diff --git a/tools/docker/Dockerfile.prod_cuda_A100 b/tools/docker/Dockerfile.prod_cuda_A100 index 54bf85c75b..d685bf0097 100644 --- a/tools/docker/Dockerfile.prod_cuda_A100 +++ b/tools/docker/Dockerfile.prod_cuda_A100 @@ -85,6 +85,8 @@ RUN /bin/bash -c " \ echo 'Compiling cp2k...' && \ source /opt/cp2k-toolchain/install/setup && \ make -j ARCH=local_cuda VERSION=psmp && \ + ln -sf ./cp2k.psmp ./exe/local_cuda/cp2k && \ + ln -sf ./cp2k_shell.psmp ./exe/local_cuda/cp2k_shell && \ rm -rf lib obj exe/local_cuda/libcp2k_unittest.psmp" COPY ./data ./data COPY ./tests ./tests diff --git a/tools/docker/Dockerfile.prod_cuda_P100 b/tools/docker/Dockerfile.prod_cuda_P100 index 1ed44a2e97..d65c6ae072 100644 --- a/tools/docker/Dockerfile.prod_cuda_P100 +++ b/tools/docker/Dockerfile.prod_cuda_P100 @@ -85,6 +85,8 @@ RUN /bin/bash -c " \ echo 'Compiling cp2k...' && \ source /opt/cp2k-toolchain/install/setup && \ make -j ARCH=local_cuda VERSION=psmp && \ + ln -sf ./cp2k.psmp ./exe/local_cuda/cp2k && \ + ln -sf ./cp2k_shell.psmp ./exe/local_cuda/cp2k_shell && \ rm -rf lib obj exe/local_cuda/libcp2k_unittest.psmp" COPY ./data ./data COPY ./tests ./tests diff --git a/tools/docker/Dockerfile.prod_cuda_V100 b/tools/docker/Dockerfile.prod_cuda_V100 index d96df2b252..9ed374de95 100644 --- a/tools/docker/Dockerfile.prod_cuda_V100 +++ b/tools/docker/Dockerfile.prod_cuda_V100 @@ -85,6 +85,8 @@ RUN /bin/bash -c " \ echo 'Compiling cp2k...' && \ source /opt/cp2k-toolchain/install/setup && \ make -j ARCH=local_cuda VERSION=psmp && \ + ln -sf ./cp2k.psmp ./exe/local_cuda/cp2k && \ + ln -sf ./cp2k_shell.psmp ./exe/local_cuda/cp2k_shell && \ rm -rf lib obj exe/local_cuda/libcp2k_unittest.psmp" COPY ./data ./data COPY ./tests ./tests diff --git a/tools/docker/Dockerfile.prod_generic_pdbg b/tools/docker/Dockerfile.prod_generic_pdbg new file mode 100644 index 0000000000..8578d8ba59 --- /dev/null +++ b/tools/docker/Dockerfile.prod_generic_pdbg @@ -0,0 +1,97 @@ +# +# This file was created by generate_dockerfiles.py. +# Usage: docker build -f ./Dockerfile.prod_generic_pdbg ../../ +# + +FROM ubuntu:20.04 + +# Install requirements for the toolchain. +WORKDIR /opt/cp2k-toolchain +COPY ./tools/toolchain/install_requirements*.sh ./ +RUN ./install_requirements.sh ubuntu:20.04 + +# Install the toolchain. +RUN mkdir scripts +COPY ./tools/toolchain/scripts/VERSION \ + ./tools/toolchain/scripts/parse_if.py \ + ./tools/toolchain/scripts/tool_kit.sh \ + ./tools/toolchain/scripts/common_vars.sh \ + ./tools/toolchain/scripts/signal_trap.sh \ + ./tools/toolchain/scripts/get_openblas_arch.sh \ + ./scripts/ +COPY ./tools/toolchain/install_cp2k_toolchain.sh . +RUN ./install_cp2k_toolchain.sh \ + --install-all \ + --mpi-mode=mpich \ + --generic \ + --dry-run + +# Dry-run leaves behind config files for the followup install scripts. +# This breaks up the lengthy installation into smaller docker build steps. +COPY ./tools/toolchain/scripts/stage0/ ./scripts/stage0/ +RUN ./scripts/stage0/install_stage0.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage1/ ./scripts/stage1/ +RUN ./scripts/stage1/install_stage1.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage2/ ./scripts/stage2/ +RUN ./scripts/stage2/install_stage2.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage3/ ./scripts/stage3/ +RUN ./scripts/stage3/install_stage3.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage4/ ./scripts/stage4/ +RUN ./scripts/stage4/install_stage4.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage5/ ./scripts/stage5/ +RUN ./scripts/stage5/install_stage5.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage6/ ./scripts/stage6/ +RUN ./scripts/stage6/install_stage6.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage7/ ./scripts/stage7/ +RUN ./scripts/stage7/install_stage7.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage8/ ./scripts/stage8/ +RUN ./scripts/stage8/install_stage8.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/arch_base.tmpl \ + ./tools/toolchain/scripts/generate_arch_files.sh \ + ./scripts/ +RUN ./scripts/generate_arch_files.sh && rm -rf ./build + +# Install CP2K using local.pdbg. +WORKDIR /opt/cp2k +ARG GIT_COMMIT_SHA +COPY ./Makefile . +COPY ./src ./src +COPY ./exts ./exts +COPY ./tools/build_utils ./tools/build_utils +RUN /bin/bash -c " \ + if [ -n "${GIT_COMMIT_SHA}" ] ; then echo "git:\${GIT_COMMIT_SHA::7}" > REVISION; fi && \ + mkdir -p arch && \ + ln -vs /opt/cp2k-toolchain/install/arch/local.pdbg ./arch/ && \ + echo 'Compiling cp2k...' && \ + source /opt/cp2k-toolchain/install/setup && \ + make -j ARCH=local VERSION=pdbg && \ + ln -sf ./cp2k.pdbg ./exe/local/cp2k && \ + ln -sf ./cp2k_shell.pdbg ./exe/local/cp2k_shell && \ + rm -rf lib obj exe/local/libcp2k_unittest.pdbg" +COPY ./data ./data +COPY ./tests ./tests +COPY ./tools/regtesting ./tools/regtesting + +# Run regression tests. +ARG TESTOPTS +RUN /bin/bash -c " \ + source /opt/cp2k-toolchain/install/setup && \ + ./tools/regtesting/do_regtest.py 'local' 'pdbg' "${TESTOPTS}" |& tee regtests.log && \ + rm -rf regtesting" + +# Setup entry point for production. +COPY ./tools/docker/scripts/prod_entrypoint.sh ./ +WORKDIR /mnt +ENTRYPOINT ["/opt/cp2k/prod_entrypoint.sh", "local", "pdbg"] +CMD ["cp2k", "--help"] + +#EOF diff --git a/tools/docker/Dockerfile.prod_generic_psmp b/tools/docker/Dockerfile.prod_generic_psmp new file mode 100644 index 0000000000..5a28522cad --- /dev/null +++ b/tools/docker/Dockerfile.prod_generic_psmp @@ -0,0 +1,97 @@ +# +# This file was created by generate_dockerfiles.py. +# Usage: docker build -f ./Dockerfile.prod_generic_psmp ../../ +# + +FROM ubuntu:20.04 + +# Install requirements for the toolchain. +WORKDIR /opt/cp2k-toolchain +COPY ./tools/toolchain/install_requirements*.sh ./ +RUN ./install_requirements.sh ubuntu:20.04 + +# Install the toolchain. +RUN mkdir scripts +COPY ./tools/toolchain/scripts/VERSION \ + ./tools/toolchain/scripts/parse_if.py \ + ./tools/toolchain/scripts/tool_kit.sh \ + ./tools/toolchain/scripts/common_vars.sh \ + ./tools/toolchain/scripts/signal_trap.sh \ + ./tools/toolchain/scripts/get_openblas_arch.sh \ + ./scripts/ +COPY ./tools/toolchain/install_cp2k_toolchain.sh . +RUN ./install_cp2k_toolchain.sh \ + --install-all \ + --mpi-mode=mpich \ + --generic \ + --dry-run + +# Dry-run leaves behind config files for the followup install scripts. +# This breaks up the lengthy installation into smaller docker build steps. +COPY ./tools/toolchain/scripts/stage0/ ./scripts/stage0/ +RUN ./scripts/stage0/install_stage0.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage1/ ./scripts/stage1/ +RUN ./scripts/stage1/install_stage1.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage2/ ./scripts/stage2/ +RUN ./scripts/stage2/install_stage2.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage3/ ./scripts/stage3/ +RUN ./scripts/stage3/install_stage3.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage4/ ./scripts/stage4/ +RUN ./scripts/stage4/install_stage4.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage5/ ./scripts/stage5/ +RUN ./scripts/stage5/install_stage5.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage6/ ./scripts/stage6/ +RUN ./scripts/stage6/install_stage6.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage7/ ./scripts/stage7/ +RUN ./scripts/stage7/install_stage7.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage8/ ./scripts/stage8/ +RUN ./scripts/stage8/install_stage8.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/arch_base.tmpl \ + ./tools/toolchain/scripts/generate_arch_files.sh \ + ./scripts/ +RUN ./scripts/generate_arch_files.sh && rm -rf ./build + +# Install CP2K using local.psmp. +WORKDIR /opt/cp2k +ARG GIT_COMMIT_SHA +COPY ./Makefile . +COPY ./src ./src +COPY ./exts ./exts +COPY ./tools/build_utils ./tools/build_utils +RUN /bin/bash -c " \ + if [ -n "${GIT_COMMIT_SHA}" ] ; then echo "git:\${GIT_COMMIT_SHA::7}" > REVISION; fi && \ + mkdir -p arch && \ + ln -vs /opt/cp2k-toolchain/install/arch/local.psmp ./arch/ && \ + echo 'Compiling cp2k...' && \ + source /opt/cp2k-toolchain/install/setup && \ + make -j ARCH=local VERSION=psmp && \ + ln -sf ./cp2k.psmp ./exe/local/cp2k && \ + ln -sf ./cp2k_shell.psmp ./exe/local/cp2k_shell && \ + rm -rf lib obj exe/local/libcp2k_unittest.psmp" +COPY ./data ./data +COPY ./tests ./tests +COPY ./tools/regtesting ./tools/regtesting + +# Run regression tests. +ARG TESTOPTS +RUN /bin/bash -c " \ + source /opt/cp2k-toolchain/install/setup && \ + ./tools/regtesting/do_regtest.py 'local' 'psmp' "${TESTOPTS}" |& tee regtests.log && \ + rm -rf regtesting" + +# Setup entry point for production. +COPY ./tools/docker/scripts/prod_entrypoint.sh ./ +WORKDIR /mnt +ENTRYPOINT ["/opt/cp2k/prod_entrypoint.sh", "local", "psmp"] +CMD ["cp2k", "--help"] + +#EOF diff --git a/tools/docker/Dockerfile.prod_generic_sdbg b/tools/docker/Dockerfile.prod_generic_sdbg new file mode 100644 index 0000000000..9e10417ed4 --- /dev/null +++ b/tools/docker/Dockerfile.prod_generic_sdbg @@ -0,0 +1,97 @@ +# +# This file was created by generate_dockerfiles.py. +# Usage: docker build -f ./Dockerfile.prod_generic_sdbg ../../ +# + +FROM ubuntu:20.04 + +# Install requirements for the toolchain. +WORKDIR /opt/cp2k-toolchain +COPY ./tools/toolchain/install_requirements*.sh ./ +RUN ./install_requirements.sh ubuntu:20.04 + +# Install the toolchain. +RUN mkdir scripts +COPY ./tools/toolchain/scripts/VERSION \ + ./tools/toolchain/scripts/parse_if.py \ + ./tools/toolchain/scripts/tool_kit.sh \ + ./tools/toolchain/scripts/common_vars.sh \ + ./tools/toolchain/scripts/signal_trap.sh \ + ./tools/toolchain/scripts/get_openblas_arch.sh \ + ./scripts/ +COPY ./tools/toolchain/install_cp2k_toolchain.sh . +RUN ./install_cp2k_toolchain.sh \ + --install-all \ + --mpi-mode=mpich \ + --generic \ + --dry-run + +# Dry-run leaves behind config files for the followup install scripts. +# This breaks up the lengthy installation into smaller docker build steps. +COPY ./tools/toolchain/scripts/stage0/ ./scripts/stage0/ +RUN ./scripts/stage0/install_stage0.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage1/ ./scripts/stage1/ +RUN ./scripts/stage1/install_stage1.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage2/ ./scripts/stage2/ +RUN ./scripts/stage2/install_stage2.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage3/ ./scripts/stage3/ +RUN ./scripts/stage3/install_stage3.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage4/ ./scripts/stage4/ +RUN ./scripts/stage4/install_stage4.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage5/ ./scripts/stage5/ +RUN ./scripts/stage5/install_stage5.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage6/ ./scripts/stage6/ +RUN ./scripts/stage6/install_stage6.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage7/ ./scripts/stage7/ +RUN ./scripts/stage7/install_stage7.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage8/ ./scripts/stage8/ +RUN ./scripts/stage8/install_stage8.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/arch_base.tmpl \ + ./tools/toolchain/scripts/generate_arch_files.sh \ + ./scripts/ +RUN ./scripts/generate_arch_files.sh && rm -rf ./build + +# Install CP2K using local.sdbg. +WORKDIR /opt/cp2k +ARG GIT_COMMIT_SHA +COPY ./Makefile . +COPY ./src ./src +COPY ./exts ./exts +COPY ./tools/build_utils ./tools/build_utils +RUN /bin/bash -c " \ + if [ -n "${GIT_COMMIT_SHA}" ] ; then echo "git:\${GIT_COMMIT_SHA::7}" > REVISION; fi && \ + mkdir -p arch && \ + ln -vs /opt/cp2k-toolchain/install/arch/local.sdbg ./arch/ && \ + echo 'Compiling cp2k...' && \ + source /opt/cp2k-toolchain/install/setup && \ + make -j ARCH=local VERSION=sdbg && \ + ln -sf ./cp2k.sdbg ./exe/local/cp2k && \ + ln -sf ./cp2k_shell.sdbg ./exe/local/cp2k_shell && \ + rm -rf lib obj exe/local/libcp2k_unittest.sdbg" +COPY ./data ./data +COPY ./tests ./tests +COPY ./tools/regtesting ./tools/regtesting + +# Run regression tests. +ARG TESTOPTS +RUN /bin/bash -c " \ + source /opt/cp2k-toolchain/install/setup && \ + ./tools/regtesting/do_regtest.py 'local' 'sdbg' "${TESTOPTS}" |& tee regtests.log && \ + rm -rf regtesting" + +# Setup entry point for production. +COPY ./tools/docker/scripts/prod_entrypoint.sh ./ +WORKDIR /mnt +ENTRYPOINT ["/opt/cp2k/prod_entrypoint.sh", "local", "sdbg"] +CMD ["cp2k", "--help"] + +#EOF diff --git a/tools/docker/Dockerfile.prod_generic_ssmp b/tools/docker/Dockerfile.prod_generic_ssmp new file mode 100644 index 0000000000..5ecbde3362 --- /dev/null +++ b/tools/docker/Dockerfile.prod_generic_ssmp @@ -0,0 +1,97 @@ +# +# This file was created by generate_dockerfiles.py. +# Usage: docker build -f ./Dockerfile.prod_generic_ssmp ../../ +# + +FROM ubuntu:20.04 + +# Install requirements for the toolchain. +WORKDIR /opt/cp2k-toolchain +COPY ./tools/toolchain/install_requirements*.sh ./ +RUN ./install_requirements.sh ubuntu:20.04 + +# Install the toolchain. +RUN mkdir scripts +COPY ./tools/toolchain/scripts/VERSION \ + ./tools/toolchain/scripts/parse_if.py \ + ./tools/toolchain/scripts/tool_kit.sh \ + ./tools/toolchain/scripts/common_vars.sh \ + ./tools/toolchain/scripts/signal_trap.sh \ + ./tools/toolchain/scripts/get_openblas_arch.sh \ + ./scripts/ +COPY ./tools/toolchain/install_cp2k_toolchain.sh . +RUN ./install_cp2k_toolchain.sh \ + --install-all \ + --mpi-mode=mpich \ + --generic \ + --dry-run + +# Dry-run leaves behind config files for the followup install scripts. +# This breaks up the lengthy installation into smaller docker build steps. +COPY ./tools/toolchain/scripts/stage0/ ./scripts/stage0/ +RUN ./scripts/stage0/install_stage0.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage1/ ./scripts/stage1/ +RUN ./scripts/stage1/install_stage1.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage2/ ./scripts/stage2/ +RUN ./scripts/stage2/install_stage2.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage3/ ./scripts/stage3/ +RUN ./scripts/stage3/install_stage3.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage4/ ./scripts/stage4/ +RUN ./scripts/stage4/install_stage4.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage5/ ./scripts/stage5/ +RUN ./scripts/stage5/install_stage5.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage6/ ./scripts/stage6/ +RUN ./scripts/stage6/install_stage6.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage7/ ./scripts/stage7/ +RUN ./scripts/stage7/install_stage7.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage8/ ./scripts/stage8/ +RUN ./scripts/stage8/install_stage8.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/arch_base.tmpl \ + ./tools/toolchain/scripts/generate_arch_files.sh \ + ./scripts/ +RUN ./scripts/generate_arch_files.sh && rm -rf ./build + +# Install CP2K using local.ssmp. +WORKDIR /opt/cp2k +ARG GIT_COMMIT_SHA +COPY ./Makefile . +COPY ./src ./src +COPY ./exts ./exts +COPY ./tools/build_utils ./tools/build_utils +RUN /bin/bash -c " \ + if [ -n "${GIT_COMMIT_SHA}" ] ; then echo "git:\${GIT_COMMIT_SHA::7}" > REVISION; fi && \ + mkdir -p arch && \ + ln -vs /opt/cp2k-toolchain/install/arch/local.ssmp ./arch/ && \ + echo 'Compiling cp2k...' && \ + source /opt/cp2k-toolchain/install/setup && \ + make -j ARCH=local VERSION=ssmp && \ + ln -sf ./cp2k.ssmp ./exe/local/cp2k && \ + ln -sf ./cp2k_shell.ssmp ./exe/local/cp2k_shell && \ + rm -rf lib obj exe/local/libcp2k_unittest.ssmp" +COPY ./data ./data +COPY ./tests ./tests +COPY ./tools/regtesting ./tools/regtesting + +# Run regression tests. +ARG TESTOPTS +RUN /bin/bash -c " \ + source /opt/cp2k-toolchain/install/setup && \ + ./tools/regtesting/do_regtest.py 'local' 'ssmp' "${TESTOPTS}" |& tee regtests.log && \ + rm -rf regtesting" + +# Setup entry point for production. +COPY ./tools/docker/scripts/prod_entrypoint.sh ./ +WORKDIR /mnt +ENTRYPOINT ["/opt/cp2k/prod_entrypoint.sh", "local", "ssmp"] +CMD ["cp2k", "--help"] + +#EOF diff --git a/tools/docker/Dockerfile.prod_pdbg b/tools/docker/Dockerfile.prod_pdbg index d50baad1e0..17c87085e4 100644 --- a/tools/docker/Dockerfile.prod_pdbg +++ b/tools/docker/Dockerfile.prod_pdbg @@ -73,6 +73,8 @@ RUN /bin/bash -c " \ echo 'Compiling cp2k...' && \ source /opt/cp2k-toolchain/install/setup && \ make -j ARCH=local VERSION=pdbg && \ + ln -sf ./cp2k.pdbg ./exe/local/cp2k && \ + ln -sf ./cp2k_shell.pdbg ./exe/local/cp2k_shell && \ rm -rf lib obj exe/local/libcp2k_unittest.pdbg" COPY ./data ./data COPY ./tests ./tests diff --git a/tools/docker/Dockerfile.prod_psmp b/tools/docker/Dockerfile.prod_psmp index 7564f48b1c..f72acfaf51 100644 --- a/tools/docker/Dockerfile.prod_psmp +++ b/tools/docker/Dockerfile.prod_psmp @@ -73,6 +73,8 @@ RUN /bin/bash -c " \ echo 'Compiling cp2k...' && \ source /opt/cp2k-toolchain/install/setup && \ make -j ARCH=local VERSION=psmp && \ + ln -sf ./cp2k.psmp ./exe/local/cp2k && \ + ln -sf ./cp2k_shell.psmp ./exe/local/cp2k_shell && \ rm -rf lib obj exe/local/libcp2k_unittest.psmp" COPY ./data ./data COPY ./tests ./tests diff --git a/tools/docker/Dockerfile.prod_sdbg b/tools/docker/Dockerfile.prod_sdbg index eea5e54bad..26c793b69a 100644 --- a/tools/docker/Dockerfile.prod_sdbg +++ b/tools/docker/Dockerfile.prod_sdbg @@ -73,6 +73,8 @@ RUN /bin/bash -c " \ echo 'Compiling cp2k...' && \ source /opt/cp2k-toolchain/install/setup && \ make -j ARCH=local VERSION=sdbg && \ + ln -sf ./cp2k.sdbg ./exe/local/cp2k && \ + ln -sf ./cp2k_shell.sdbg ./exe/local/cp2k_shell && \ rm -rf lib obj exe/local/libcp2k_unittest.sdbg" COPY ./data ./data COPY ./tests ./tests diff --git a/tools/docker/Dockerfile.prod_ssmp b/tools/docker/Dockerfile.prod_ssmp index 222f3ae474..3abbebcca6 100644 --- a/tools/docker/Dockerfile.prod_ssmp +++ b/tools/docker/Dockerfile.prod_ssmp @@ -73,6 +73,8 @@ RUN /bin/bash -c " \ echo 'Compiling cp2k...' && \ source /opt/cp2k-toolchain/install/setup && \ make -j ARCH=local VERSION=ssmp && \ + ln -sf ./cp2k.ssmp ./exe/local/cp2k && \ + ln -sf ./cp2k_shell.ssmp ./exe/local/cp2k_shell && \ rm -rf lib obj exe/local/libcp2k_unittest.ssmp" COPY ./data ./data COPY ./tests ./tests diff --git a/tools/docker/Dockerfile.test_generic_pdbg b/tools/docker/Dockerfile.test_generic_pdbg new file mode 100644 index 0000000000..07379fb0a0 --- /dev/null +++ b/tools/docker/Dockerfile.test_generic_pdbg @@ -0,0 +1,90 @@ +# +# This file was created by generate_dockerfiles.py. +# Usage: docker build -f ./Dockerfile.test_generic_pdbg ../../ +# + +FROM ubuntu:20.04 + +# Install requirements for the toolchain. +WORKDIR /opt/cp2k-toolchain +COPY ./tools/toolchain/install_requirements*.sh ./ +RUN ./install_requirements.sh ubuntu:20.04 + +# Install the toolchain. +RUN mkdir scripts +COPY ./tools/toolchain/scripts/VERSION \ + ./tools/toolchain/scripts/parse_if.py \ + ./tools/toolchain/scripts/tool_kit.sh \ + ./tools/toolchain/scripts/common_vars.sh \ + ./tools/toolchain/scripts/signal_trap.sh \ + ./tools/toolchain/scripts/get_openblas_arch.sh \ + ./scripts/ +COPY ./tools/toolchain/install_cp2k_toolchain.sh . +RUN ./install_cp2k_toolchain.sh \ + --install-all \ + --mpi-mode=mpich \ + --generic \ + --dry-run + +# Dry-run leaves behind config files for the followup install scripts. +# This breaks up the lengthy installation into smaller docker build steps. +COPY ./tools/toolchain/scripts/stage0/ ./scripts/stage0/ +RUN ./scripts/stage0/install_stage0.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage1/ ./scripts/stage1/ +RUN ./scripts/stage1/install_stage1.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage2/ ./scripts/stage2/ +RUN ./scripts/stage2/install_stage2.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage3/ ./scripts/stage3/ +RUN ./scripts/stage3/install_stage3.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage4/ ./scripts/stage4/ +RUN ./scripts/stage4/install_stage4.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage5/ ./scripts/stage5/ +RUN ./scripts/stage5/install_stage5.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage6/ ./scripts/stage6/ +RUN ./scripts/stage6/install_stage6.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage7/ ./scripts/stage7/ +RUN ./scripts/stage7/install_stage7.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage8/ ./scripts/stage8/ +RUN ./scripts/stage8/install_stage8.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/arch_base.tmpl \ + ./tools/toolchain/scripts/generate_arch_files.sh \ + ./scripts/ +RUN ./scripts/generate_arch_files.sh && rm -rf ./build + +# Install CP2K using local.pdbg. +WORKDIR /opt/cp2k +COPY ./Makefile . +COPY ./src ./src +COPY ./exts ./exts +COPY ./tools/build_utils ./tools/build_utils +RUN /bin/bash -c " \ + mkdir -p arch && \ + ln -vs /opt/cp2k-toolchain/install/arch/local.pdbg ./arch/ && \ + echo 'Compiling cp2k...' && \ + source /opt/cp2k-toolchain/install/setup && \ + ( make -j ARCH=local VERSION=pdbg &> /dev/null || true )" +COPY ./data ./data +COPY ./tests ./tests +COPY ./tools/regtesting ./tools/regtesting + +# Run regression tests. +ARG TESTOPTS +COPY ./tools/docker/scripts/test_regtest.sh ./ +RUN /bin/bash -c " \ + TESTOPTS="${TESTOPTS}" \ + ./test_regtest.sh 'local' 'pdbg' |& tee report.log && \ + rm -rf regtesting" + +# Output the report if the image is old and was therefore pulled from the build cache. +CMD cat $(find ./report.log -mmin +10) | sed '/^Summary:/ s/$/ (cached)/' + +#EOF diff --git a/tools/docker/Dockerfile.test_generic_psmp b/tools/docker/Dockerfile.test_generic_psmp new file mode 100644 index 0000000000..ab58e506ca --- /dev/null +++ b/tools/docker/Dockerfile.test_generic_psmp @@ -0,0 +1,90 @@ +# +# This file was created by generate_dockerfiles.py. +# Usage: docker build -f ./Dockerfile.test_generic_psmp ../../ +# + +FROM ubuntu:20.04 + +# Install requirements for the toolchain. +WORKDIR /opt/cp2k-toolchain +COPY ./tools/toolchain/install_requirements*.sh ./ +RUN ./install_requirements.sh ubuntu:20.04 + +# Install the toolchain. +RUN mkdir scripts +COPY ./tools/toolchain/scripts/VERSION \ + ./tools/toolchain/scripts/parse_if.py \ + ./tools/toolchain/scripts/tool_kit.sh \ + ./tools/toolchain/scripts/common_vars.sh \ + ./tools/toolchain/scripts/signal_trap.sh \ + ./tools/toolchain/scripts/get_openblas_arch.sh \ + ./scripts/ +COPY ./tools/toolchain/install_cp2k_toolchain.sh . +RUN ./install_cp2k_toolchain.sh \ + --install-all \ + --mpi-mode=mpich \ + --generic \ + --dry-run + +# Dry-run leaves behind config files for the followup install scripts. +# This breaks up the lengthy installation into smaller docker build steps. +COPY ./tools/toolchain/scripts/stage0/ ./scripts/stage0/ +RUN ./scripts/stage0/install_stage0.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage1/ ./scripts/stage1/ +RUN ./scripts/stage1/install_stage1.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage2/ ./scripts/stage2/ +RUN ./scripts/stage2/install_stage2.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage3/ ./scripts/stage3/ +RUN ./scripts/stage3/install_stage3.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage4/ ./scripts/stage4/ +RUN ./scripts/stage4/install_stage4.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage5/ ./scripts/stage5/ +RUN ./scripts/stage5/install_stage5.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage6/ ./scripts/stage6/ +RUN ./scripts/stage6/install_stage6.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage7/ ./scripts/stage7/ +RUN ./scripts/stage7/install_stage7.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage8/ ./scripts/stage8/ +RUN ./scripts/stage8/install_stage8.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/arch_base.tmpl \ + ./tools/toolchain/scripts/generate_arch_files.sh \ + ./scripts/ +RUN ./scripts/generate_arch_files.sh && rm -rf ./build + +# Install CP2K using local.psmp. +WORKDIR /opt/cp2k +COPY ./Makefile . +COPY ./src ./src +COPY ./exts ./exts +COPY ./tools/build_utils ./tools/build_utils +RUN /bin/bash -c " \ + mkdir -p arch && \ + ln -vs /opt/cp2k-toolchain/install/arch/local.psmp ./arch/ && \ + echo 'Compiling cp2k...' && \ + source /opt/cp2k-toolchain/install/setup && \ + ( make -j ARCH=local VERSION=psmp &> /dev/null || true )" +COPY ./data ./data +COPY ./tests ./tests +COPY ./tools/regtesting ./tools/regtesting + +# Run regression tests. +ARG TESTOPTS +COPY ./tools/docker/scripts/test_regtest.sh ./ +RUN /bin/bash -c " \ + TESTOPTS="${TESTOPTS}" \ + ./test_regtest.sh 'local' 'psmp' |& tee report.log && \ + rm -rf regtesting" + +# Output the report if the image is old and was therefore pulled from the build cache. +CMD cat $(find ./report.log -mmin +10) | sed '/^Summary:/ s/$/ (cached)/' + +#EOF diff --git a/tools/docker/Dockerfile.test_generic_sdbg b/tools/docker/Dockerfile.test_generic_sdbg new file mode 100644 index 0000000000..232cd430b0 --- /dev/null +++ b/tools/docker/Dockerfile.test_generic_sdbg @@ -0,0 +1,90 @@ +# +# This file was created by generate_dockerfiles.py. +# Usage: docker build -f ./Dockerfile.test_generic_sdbg ../../ +# + +FROM ubuntu:20.04 + +# Install requirements for the toolchain. +WORKDIR /opt/cp2k-toolchain +COPY ./tools/toolchain/install_requirements*.sh ./ +RUN ./install_requirements.sh ubuntu:20.04 + +# Install the toolchain. +RUN mkdir scripts +COPY ./tools/toolchain/scripts/VERSION \ + ./tools/toolchain/scripts/parse_if.py \ + ./tools/toolchain/scripts/tool_kit.sh \ + ./tools/toolchain/scripts/common_vars.sh \ + ./tools/toolchain/scripts/signal_trap.sh \ + ./tools/toolchain/scripts/get_openblas_arch.sh \ + ./scripts/ +COPY ./tools/toolchain/install_cp2k_toolchain.sh . +RUN ./install_cp2k_toolchain.sh \ + --install-all \ + --mpi-mode=mpich \ + --generic \ + --dry-run + +# Dry-run leaves behind config files for the followup install scripts. +# This breaks up the lengthy installation into smaller docker build steps. +COPY ./tools/toolchain/scripts/stage0/ ./scripts/stage0/ +RUN ./scripts/stage0/install_stage0.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage1/ ./scripts/stage1/ +RUN ./scripts/stage1/install_stage1.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage2/ ./scripts/stage2/ +RUN ./scripts/stage2/install_stage2.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage3/ ./scripts/stage3/ +RUN ./scripts/stage3/install_stage3.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage4/ ./scripts/stage4/ +RUN ./scripts/stage4/install_stage4.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage5/ ./scripts/stage5/ +RUN ./scripts/stage5/install_stage5.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage6/ ./scripts/stage6/ +RUN ./scripts/stage6/install_stage6.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage7/ ./scripts/stage7/ +RUN ./scripts/stage7/install_stage7.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage8/ ./scripts/stage8/ +RUN ./scripts/stage8/install_stage8.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/arch_base.tmpl \ + ./tools/toolchain/scripts/generate_arch_files.sh \ + ./scripts/ +RUN ./scripts/generate_arch_files.sh && rm -rf ./build + +# Install CP2K using local.sdbg. +WORKDIR /opt/cp2k +COPY ./Makefile . +COPY ./src ./src +COPY ./exts ./exts +COPY ./tools/build_utils ./tools/build_utils +RUN /bin/bash -c " \ + mkdir -p arch && \ + ln -vs /opt/cp2k-toolchain/install/arch/local.sdbg ./arch/ && \ + echo 'Compiling cp2k...' && \ + source /opt/cp2k-toolchain/install/setup && \ + ( make -j ARCH=local VERSION=sdbg &> /dev/null || true )" +COPY ./data ./data +COPY ./tests ./tests +COPY ./tools/regtesting ./tools/regtesting + +# Run regression tests. +ARG TESTOPTS +COPY ./tools/docker/scripts/test_regtest.sh ./ +RUN /bin/bash -c " \ + TESTOPTS="${TESTOPTS}" \ + ./test_regtest.sh 'local' 'sdbg' |& tee report.log && \ + rm -rf regtesting" + +# Output the report if the image is old and was therefore pulled from the build cache. +CMD cat $(find ./report.log -mmin +10) | sed '/^Summary:/ s/$/ (cached)/' + +#EOF diff --git a/tools/docker/Dockerfile.test_generic_ssmp b/tools/docker/Dockerfile.test_generic_ssmp new file mode 100644 index 0000000000..9deeea3085 --- /dev/null +++ b/tools/docker/Dockerfile.test_generic_ssmp @@ -0,0 +1,90 @@ +# +# This file was created by generate_dockerfiles.py. +# Usage: docker build -f ./Dockerfile.test_generic_ssmp ../../ +# + +FROM ubuntu:20.04 + +# Install requirements for the toolchain. +WORKDIR /opt/cp2k-toolchain +COPY ./tools/toolchain/install_requirements*.sh ./ +RUN ./install_requirements.sh ubuntu:20.04 + +# Install the toolchain. +RUN mkdir scripts +COPY ./tools/toolchain/scripts/VERSION \ + ./tools/toolchain/scripts/parse_if.py \ + ./tools/toolchain/scripts/tool_kit.sh \ + ./tools/toolchain/scripts/common_vars.sh \ + ./tools/toolchain/scripts/signal_trap.sh \ + ./tools/toolchain/scripts/get_openblas_arch.sh \ + ./scripts/ +COPY ./tools/toolchain/install_cp2k_toolchain.sh . +RUN ./install_cp2k_toolchain.sh \ + --install-all \ + --mpi-mode=mpich \ + --generic \ + --dry-run + +# Dry-run leaves behind config files for the followup install scripts. +# This breaks up the lengthy installation into smaller docker build steps. +COPY ./tools/toolchain/scripts/stage0/ ./scripts/stage0/ +RUN ./scripts/stage0/install_stage0.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage1/ ./scripts/stage1/ +RUN ./scripts/stage1/install_stage1.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage2/ ./scripts/stage2/ +RUN ./scripts/stage2/install_stage2.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage3/ ./scripts/stage3/ +RUN ./scripts/stage3/install_stage3.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage4/ ./scripts/stage4/ +RUN ./scripts/stage4/install_stage4.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage5/ ./scripts/stage5/ +RUN ./scripts/stage5/install_stage5.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage6/ ./scripts/stage6/ +RUN ./scripts/stage6/install_stage6.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage7/ ./scripts/stage7/ +RUN ./scripts/stage7/install_stage7.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage8/ ./scripts/stage8/ +RUN ./scripts/stage8/install_stage8.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/arch_base.tmpl \ + ./tools/toolchain/scripts/generate_arch_files.sh \ + ./scripts/ +RUN ./scripts/generate_arch_files.sh && rm -rf ./build + +# Install CP2K using local.ssmp. +WORKDIR /opt/cp2k +COPY ./Makefile . +COPY ./src ./src +COPY ./exts ./exts +COPY ./tools/build_utils ./tools/build_utils +RUN /bin/bash -c " \ + mkdir -p arch && \ + ln -vs /opt/cp2k-toolchain/install/arch/local.ssmp ./arch/ && \ + echo 'Compiling cp2k...' && \ + source /opt/cp2k-toolchain/install/setup && \ + ( make -j ARCH=local VERSION=ssmp &> /dev/null || true )" +COPY ./data ./data +COPY ./tests ./tests +COPY ./tools/regtesting ./tools/regtesting + +# Run regression tests. +ARG TESTOPTS +COPY ./tools/docker/scripts/test_regtest.sh ./ +RUN /bin/bash -c " \ + TESTOPTS="${TESTOPTS}" \ + ./test_regtest.sh 'local' 'ssmp' |& tee report.log && \ + rm -rf regtesting" + +# Output the report if the image is old and was therefore pulled from the build cache. +CMD cat $(find ./report.log -mmin +10) | sed '/^Summary:/ s/$/ (cached)/' + +#EOF diff --git a/tools/docker/generate_dockerfiles.py b/tools/docker/generate_dockerfiles.py index 683e015911..4ebc657f6e 100755 --- a/tools/docker/generate_dockerfiles.py +++ b/tools/docker/generate_dockerfiles.py @@ -20,6 +20,12 @@ def main() -> None: with OutputFile(f"Dockerfile.prod_{version}", args.check) as f: f.write(toolchain_full() + production(version)) + with OutputFile(f"Dockerfile.test_generic_{version}", args.check) as f: + f.write(toolchain_full(generic=True) + regtest(version)) + + with OutputFile(f"Dockerfile.prod_generic_{version}", args.check) as f: + f.write(toolchain_full(generic=True) + production(version)) + with OutputFile(f"Dockerfile.test_openmpi-psmp", args.check) as f: f.write(toolchain_full(mpi_mode="openmpi") + regtest("psmp")) @@ -323,6 +329,8 @@ def install_cp2k( if prod: run_lines.append(f"make -j ARCH={arch} VERSION={version}") + run_lines.append(f"ln -sf ./cp2k.{version} ./exe/{arch}/cp2k") + run_lines.append(f"ln -sf ./cp2k_shell.{version} ./exe/{arch}/cp2k_shell") run_lines.append(f"rm -rf lib obj exe/{arch}/libcp2k_unittest.{version}") else: run_lines.append( @@ -345,10 +353,13 @@ COPY ./tools/regtesting ./tools/regtesting # ====================================================================================== -def toolchain_full(base_image: str = "ubuntu:20.04", mpi_mode: str = "mpich") -> str: - return f"\nFROM {base_image}\n\n" + install_toolchain( - base_image=base_image, install_all=None, mpi_mode=mpi_mode - ) +def toolchain_full( + base_image: str = "ubuntu:20.04", mpi_mode: str = "mpich", generic: bool = False +) -> str: + args = dict(install_all=None, mpi_mode=mpi_mode) + if generic: + args["generic"] = None + return f"\nFROM {base_image}\n\n" + install_toolchain(base_image=base_image, **args) # ====================================================================================== diff --git a/tools/docker/scripts/prod_entrypoint.sh b/tools/docker/scripts/prod_entrypoint.sh index 08df248e5b..a966d70ac6 100755 --- a/tools/docker/scripts/prod_entrypoint.sh +++ b/tools/docker/scripts/prod_entrypoint.sh @@ -8,14 +8,13 @@ if (($# < 2)); then fi ARCH=$1 +# shellcheck disable=SC2034 VERSION=$2 shift 2 # shellcheck disable=SC1091 source /opt/cp2k-toolchain/install/setup export PATH="/opt/cp2k/exe/${ARCH}:${PATH}" -ln -s "./cp2k.${VERSION}" "/opt/cp2k/exe/${ARCH}/cp2k" -ln -s "./cp2k_shell.${VERSION}" "/opt/cp2k/exe/${ARCH}/cp2k_shell" "$@"