diff --git a/CI/Dockerfile b/CI/Dockerfile index a94b533b9..336cf927c 100644 --- a/CI/Dockerfile +++ b/CI/Dockerfile @@ -5,20 +5,20 @@ # Global ARGS set before the first build stage are accessable by all build stages ARG UBUNTU_VERSION=22.04 -ARG HDF5_VERSION=1.14.3 +ARG HDF5_VERSION=hdf5_1_14_3 ARG MOAB_VERSION=5.5.1 # Setting GEANT4_VERSION=off will disable GEANT4 build -ARG GEANT4_VERSION=11.1.2 +ARG GEANT4_VERSION=v11.1.2 # Setting DOUBLE_DOWN_VERSION=off will disable DOUBLE_DOWN build ARG DOUBLE_DOWN_VERSION=v1.1.0 # Setting DOUBLE_DOWN_VERSION=off will disable EMBREE build ARG EMBREE_VERSION=v4.0.1 -ARG build_dir=/root/build_dir -ARG install_dir=/opt +ARG BUILD_DIR=/root/build +ARG INSTALL_DIR=/opt ARG COMPILER=gcc -ARG CI_JOBS=4 +ARG CI_JOBS=6 FROM ubuntu:${UBUNTU_VERSION} AS base @@ -33,25 +33,23 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN apt-get update --yes && \ apt-get install --yes --no-install-recommends \ git \ - wget \ ca-certificates \ - make \ autoconf \ - clang \ + make \ cmake \ g++ \ - gcc \ + clang \ gfortran \ python3 \ libpython3-dev \ libeigen3-dev && \ apt-get clean && rm -rf /var/lib/apt/lists/*; -ARG build_dir -ARG install_dir +ARG BUILD_DIR +ARG INSTALL_DIR -ENV build_dir=${build_dir} -ENV install_dir=${install_dir} +ENV BUILD_DIR=${BUILD_DIR} +ENV INSTALL_DIR=${INSTALL_DIR} FROM base as compiler-gcc @@ -66,8 +64,8 @@ ENV CXX=clang++ FROM compiler-${COMPILER} as external_deps # accessing gloabl ARGs in build stage -ARG install_dir -ARG build_dir +ARG INSTALL_DIR +ARG BUILD_DIR ARG CI_JOBS ARG CXX ARG CC @@ -75,17 +73,17 @@ ARG DOUBLE_DOWN_VERSION ARG EMBREE_VERSION ARG GEANT4_VERSION -ENV embree_install_dir=${install_dir}/embree -ENV embree_build_dir=${build_dir}/embree +ENV EMBREE_INSTALL_DIR=${INSTALL_DIR}/Embree +ENV EMBREE_BUILD_DIR=${BUILD_DIR}/Embree # Clone and install Embree RUN if [ "${DOUBLE_DOWN_VERSION}" != "off" ]; then \ - mkdir -p ${embree_build_dir}/build && \ - cd ${embree_build_dir} && \ - git clone -b ${EMBREE_VERSION} https://github.com/embree/embree && \ + mkdir -p ${EMBREE_BUILD_DIR}/build && \ + cd ${EMBREE_BUILD_DIR} && \ + git clone -b ${EMBREE_VERSION} --depth 1 https://github.com/embree/embree.git && \ cd build && \ cmake ../embree \ - -DCMAKE_INSTALL_PREFIX=${embree_install_dir} \ + -DCMAKE_INSTALL_PREFIX=${EMBREE_INSTALL_DIR} \ -DEMBREE_TASKING_SYSTEM=INTERNAL \ -DEMBREE_ISPC_SUPPORT=OFF \ -DEMBREE_TUTORIALS=OFF \ @@ -93,24 +91,21 @@ RUN if [ "${DOUBLE_DOWN_VERSION}" != "off" ]; then \ make -j${CI_JOBS} && \ make -j${CI_JOBS} install && \ cd && \ - rm -rf ${embree_build_dir}; \ + rm -rf ${EMBREE_BUILD_DIR}; \ fi -ENV geant4_basename=geant4-v${GEANT4_VERSION} -ENV geant4_tarball=${geant4_basename}.tar.gz -ENV geant4_build_dir=${build_dir}/geant4 -ENV geant4_install_dir=${install_dir}/geant4 +ENV GEANT4_BUILD_DIR=${BUILD_DIR}/geant4 +ENV GEANT4_INSTALL_DIR=${INSTALL_DIR}/geant4 RUN if [ "${GEANT4_VERSION}" != "off" ]; then \ - mkdir -p ${geant4_build_dir}/build && \ - cd ${geant4_build_dir} && \ - wget https://gitlab.cern.ch/geant4/geant4/-/archive/v${GEANT4_VERSION}/${geant4_tarball} --no-check-certificate && \ - tar -xzf ${geant4_tarball} && \ + mkdir -p ${GEANT4_BUILD_DIR}/build && \ + cd ${GEANT4_BUILD_DIR} && \ + git clone -b ${GEANT4_VERSION} --depth 1 https://gitlab.cern.ch/geant4/geant4.git && \ cd build && \ - cmake ../${geant4_basename} \ - -DCMAKE_INSTALL_RPATH=${geant4_install_dir}/lib \ - -DCMAKE_INSTALL_PREFIX=${geant4_install_dir} \ + cmake ../geant4 \ + -DCMAKE_INSTALL_RPATH=${GEANT4_INSTALL_DIR}/lib \ + -DCMAKE_INSTALL_PREFIX=${GEANT4_INSTALL_DIR} \ -DGEANT4_USE_SYSTEM_EXPAT=OFF \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_COMPILER=${CXX} \ @@ -119,44 +114,42 @@ RUN if [ "${GEANT4_VERSION}" != "off" ]; then \ make -j${CI_JOBS} && \ make install && \ cd && \ - rm -rf ${geant4_build_dir}; \ + rm -rf ${GEANT4_BUILD_DIR}; \ fi FROM external_deps AS hdf5 # accessing gloabl ARGs in build stage -ARG install_dir -ARG build_dir +ARG INSTALL_DIR +ARG BUILD_DIR ARG CI_JOBS ARG CXX ARG CC ARG HDF5_VERSION -ENV hdf5_build_dir=${build_dir}/hdf5 -ENV hdf5_install_dir=${install_dir}/hdf5 +ENV HDF5_BUILD_DIR=${BUILD_DIR}/hdf5 +ENV HDF5_INSTALL_DIR=${INSTALL_DIR}/hdf5 -RUN mkdir -p ${hdf5_build_dir}/build && \ - cd ${hdf5_build_dir} && \ - export HDF5_VERSION_major=$(echo "$HDF5_VERSION" | cut -d. -f1-2) && \ - wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-${HDF5_VERSION_major}/hdf5-${HDF5_VERSION}/src/hdf5-${HDF5_VERSION}.tar.gz && \ - tar -xzf hdf5-${HDF5_VERSION}.tar.gz && \ +RUN mkdir -p ${HDF5_BUILD_DIR}/build && \ + cd ${HDF5_BUILD_DIR} && \ + git clone -b ${HDF5_VERSION} --depth 1 https://github.com/HDFGroup/hdf5.git && \ cd build && \ - ../hdf5-${HDF5_VERSION}/configure --enable-shared \ - --prefix=${hdf5_install_dir} \ + ../hdf5/configure --enable-shared \ + --prefix=${HDF5_INSTALL_DIR} \ CXX=${CXX} \ CC=${CC} && \ make -j${CI_JOBS} && \ make install && \ cd && \ - rm -rf ${hdf5_build_dir} + rm -rf ${HDF5_BUILD_DIR} FROM hdf5 AS moab # accessing gloabl ARGs in build stage -ARG install_dir -ARG build_dir +ARG INSTALL_DIR +ARG BUILD_DIR ARG CI_JOBS ARG CXX ARG CC @@ -165,18 +158,19 @@ ARG DOUBLE_DOWN_VERSION # Set MOAB env variable -ENV moab_build_dir=${build_dir}/moab -ENV moab_install_dir=${install_dir}/moab +ENV MOAB_BUILD_DIR=${BUILD_DIR}/moab +ENV MOAB_INSTALL_DIR=${INSTALL_DIR}/moab -RUN mkdir -p ${moab_build_dir}/build && \ - cd ${moab_build_dir} && \ - git clone -b ${MOAB_VERSION} --depth 1 https://bitbucket.org/fathomteam/moab && \ +RUN mkdir -p ${MOAB_BUILD_DIR}/build && \ + cd ${MOAB_BUILD_DIR} && \ + git clone -b ${MOAB_VERSION} --depth 1 https://bitbucket.org/fathomteam/moab.git && \ cd build && \ cmake ../moab \ - -DCMAKE_INSTALL_RPATH=${hdf5_install_dir}/lib:${moab_install_dir}/lib \ + -DCMAKE_INSTALL_RPATH=${HDF5_INSTALL_DIR}/lib:${MOAB_INSTALL_DIR}/lib \ -DCMAKE_BUILD_TYPE=Release \ - -DENABLE_HDF5=ON -DHDF5_ROOT=${hdf5_install_dir} \ - -DCMAKE_INSTALL_PREFIX=${moab_install_dir} \ + -DENABLE_HDF5=ON \ + -DHDF5_ROOT=${HDF5_INSTALL_DIR} \ + -DCMAKE_INSTALL_PREFIX=${MOAB_INSTALL_DIR} \ -DCMAKE_CXX_COMPILER=${CXX} \ -DCMAKE_C_COMPILER=${CC} \ -DENABLE_BLASLAPACK=OFF \ @@ -186,55 +180,54 @@ RUN mkdir -p ${moab_build_dir}/build && \ make -j${CI_JOBS} && \ make install && \ cd && \ - rm -rf ${moab_build_dir} + rm -rf ${MOAB_BUILD_DIR} -ENV double_down_build_dir=${build_dir}/double-down -ENV double_down_install_dir=${install_dir}/double-down +ENV DOUBLE_DOWN_BUILD_DIR=${BUILD_DIR}/double-down +ENV DOUBLE_DOWN_INSTALL_DIR=${INSTALL_DIR}/double-down # Clone and install Double-Down # Performed after moab and embree install as double-down requires moab and embree RUN if [ "${DOUBLE_DOWN_VERSION}" != "off" ]; then \ - mkdir -p ${double_down_build_dir}/build && \ - cd ${double_down_build_dir} && \ + mkdir -p ${DOUBLE_DOWN_BUILD_DIR}/build && \ + cd ${DOUBLE_DOWN_BUILD_DIR} && \ git clone -b ${DOUBLE_DOWN_VERSION} --depth 1 https://github.com/pshriwise/double-down.git && \ cd build && \ cmake ../double-down \ - -DMOAB_DIR=${moab_install_dir} \ - -DCMAKE_INSTALL_PREFIX=${double_down_install_dir} \ - -DEMBREE_DIR=${embree_install_dir} && \ + -DMOAB_DIR=${MOAB_INSTALL_DIR} \ + -DCMAKE_INSTALL_PREFIX=${DOUBLE_DOWN_INSTALL_DIR} \ + -DEMBREE_DIR=${EMBREE_INSTALL_DIR} && \ make -j${CI_JOBS} && \ make -j${CI_JOBS} install && \ cd && \ - rm -rf ${double_down_build_dir}; \ + rm -rf ${DOUBLE_DOWN_BUILD_DIR}; \ fi FROM moab as dagmc # accessing gloabl ARGs in build stage -ARG install_dir -ARG build_dir +ARG INSTALL_DIR +ARG BUILD_DIR ARG CXX ARG CC ARG GEANT4_VERSION ARG DOUBLE_DOWN_VERSION -ENV dagmc_build_dir=${build_dir}/dagmc -ENV dagmc_install_dir=${install_dir}/dagmc +ENV DAGMC_BUILD_DIR=${BUILD_DIR}/dagmc +ENV DAGMC_INSTALL_DIR=${INSTALL_DIR}/dagmc # copies the enitre git repo into the dockerfile to ensure the submodules can also be found -RUN mkdir -p ${dagmc_build_dir}/build -COPY . ${dagmc_build_dir} -RUN cd ${dagmc_build_dir} && git submodule update --init +COPY . ${DAGMC_BUILD_DIR} -RUN mkdir -p ${dagmc_build_dir}/build && \ - cd ${dagmc_build_dir} && \ +RUN mkdir -p ${DAGMC_BUILD_DIR}/build && \ + cd ${DAGMC_BUILD_DIR} && \ + git submodule update --init && \ cd build && \ cmake ../ \ - -DMOAB_DIR=${moab_install_dir} \ + -DMOAB_DIR=${MOAB_INSTALL_DIR} \ -DBUILD_GEANT4=$([ "${GEANT4_VERSION}" != "off" ] && echo "ON" || echo "OFF") \ - -DGEANT4_DIR=${geant4_install_dir} \ + -DGEANT4_DIR=${GEANT4_INSTALL_DIR} \ -DBUILD_CI_TESTS=ON \ # reg tests disabled see issue https://github.com/svalinn/DAGMC/issues/858 -DBUILD_MW_REG_TESTS=OFF \ @@ -243,28 +236,28 @@ RUN mkdir -p ${dagmc_build_dir}/build && \ -DCMAKE_C_COMPILER=${CC} \ -DCMAKE_CXX_COMPILER=${CXX} \ -DCMAKE_Fortran_COMPILER=gfortran \ - -DCMAKE_INSTALL_PREFIX=${dagmc_install_dir} \ + -DCMAKE_INSTALL_PREFIX=${DAGMC_INSTALL_DIR} \ -DDOUBLE_DOWN=$([ "${DOUBLE_DOWN_VERSION}" != "off" ] && echo "ON" || echo "OFF") \ - -Ddd_ROOT=${double_down_install_dir} && \ + -Ddd_ROOT=${DOUBLE_DOWN_INSTALL_DIR} && \ make -j${CI_JOBS} && \ make install FROM dagmc as dagmc_test -ENV dagmc_build_dir=${build_dir}/dagmc -ENV dagmc_install_dir=${install_dir}/dagmc +ENV DAGMC_BUILD_DIR=${BUILD_DIR}/dagmc +ENV DAGMC_INSTALL_DIR=${INSTALL_DIR}/dagmc # Test DAGMC executables -RUN cd ${dagmc_build_dir}/build && \ - PATH=${dagmc_install_dir}/bin:$PATH CTEST_OUTPUT_ON_FAILURE=1 make test +RUN cd ${DAGMC_BUILD_DIR}/build && \ + PATH=${DAGMC_INSTALL_DIR}/bin:$PATH CTEST_OUTPUT_ON_FAILURE=1 make test # clean out config test directory for next build -RUN cd ${dagmc_build_dir} && \ +RUN cd ${DAGMC_BUILD_DIR} && \ git clean -dxf . # Test DAGMC CMake configuration file -RUN cd ${dagmc_build_dir}/cmake/test_config && \ - cmake . -DDAGMC_ROOT=${dagmc_install_dir} && \ +RUN cd ${DAGMC_BUILD_DIR}/cmake/test_config && \ + cmake . -DDAGMC_ROOT=${DAGMC_INSTALL_DIR} && \ CTEST_OUTPUT_ON_FAILURE=1 make all test