diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6883c49..a84a78f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,41 +4,43 @@ on: [push, pull_request] env: CI: "ON" BUILD_DIR: _build - CMAKE_OPTIONS: >- - -DCMAKE_BUILD_TYPE=Debug - -DFYPP_FLAGS='-DTRAVIS' + INSTALL_DIR: _install jobs: + gcc-build: + runs-on: ${{ matrix.os }} + + defaults: + run: + shell: bash -l {0} + strategy: fail-fast: false matrix: os: [ubuntu-latest] - mpi: [nompi, openmpi] + mpi: [nompi, mpich] socket: [nosocket, socket] config: [Debug] - version: [11] steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: '3.x' + - name: Set up miniforge + uses: conda-incubator/setup-miniconda@v3 + with: + miniforge-version: latest + auto-activate-base: true + activate-environment: "" + - name: Install GCC (Linux) - if: ${{ contains(matrix.os, 'ubuntu') }} - run: | - sudo add-apt-repository ppa:ubuntu-toolchain-r/test - sudo apt-get update - sudo apt-get install -y gcc-${{ matrix.version}} gfortran-${{ matrix.version }} g++-${{ matrix.version }} - sudo update-alternatives \ - --install /usr/bin/gcc gcc /usr/bin/gcc-${{ matrix.version }} 100 \ - --slave /usr/bin/gfortran gfortran /usr/bin/gfortran-${{ matrix.version }} \ - --slave /usr/bin/g++ g++ /usr/bin/g++-${{ matrix.version }} \ - --slave /usr/bin/gcov gcov /usr/bin/gcov-${{ matrix.version }} + run: mamba install c-compiler cxx-compiler fortran-compiler - name: Enable MPI build if: contains(matrix.mpi, 'openmpi') || contains(matrix.mpi, 'mpich') @@ -56,73 +58,72 @@ jobs: if: contains(matrix.socket, 'nosocket') run: echo "WITH_SOCKETS=false" >> $GITHUB_ENV - - name: Set Compiler (Linux) - if: contains(matrix.os, 'ubuntu') + - name: Set Compiler run: | - echo "FC=gfortran" >> $GITHUB_ENV - echo "CC=gcc" >> $GITHUB_ENV + echo "FC=${CONDA_PREFIX}/bin/gfortran" >> $GITHUB_ENV + echo "CC=${CONDA_PREFIX}/bin/gcc" >> $GITHUB_ENV - name: Install HDF5 - if: contains(matrix.os, 'ubuntu') - run: | - sudo apt-get update - sudo apt-get install hdf5-tools libhdf5-dev libhdf5-103 + run: mamba install hdf5 - - name: Install OpenMPI (Linux) - if: contains(matrix.os, 'ubuntu') && contains(matrix.mpi, 'openmpi') + - name: Set HDF5 search paths run: | - sudo apt-get update - sudo apt-get install libopenmpi-dev - echo "CMAKE_OPTIONS=${CMAKE_OPTIONS}" >> $GITHUB_ENV + echo "CMAKE_PREFIX_PATH=${CONDA_PREFIX}/" >> $GITHUB_ENV + + - name: Install OpenMPI + if: contains(matrix.mpi, 'openmpi') + run: mamba install openmpi openmpi-mpifort - - name: Install cmake - run: pip3 install cmake ninja fypp numpy h5py + - name: Install MPICH + if: contains(matrix.mpi, 'mpich') + run: mamba install mpich mpich-mpifort + + - name: Install BLAS + run: mamba install openblas libopenblas + + - name: Install requirements (conda) + run: mamba install cmake fypp numpy h5py - name: Configure build - run: >- - cmake -B _build -G Ninja - -DCMAKE_INSTALL_PREFIX=${PWD}/_install - ${CMAKE_OPTIONS} - -DWITH_MPI=${WITH_MPI} - -DWITH_SOCKETS=${WITH_SOCKETS} + run: | + cmake -B ${BUILD_DIR} -DWITH_MPI=${WITH_MPI} -DWITH_SOCKETS=${WITH_SOCKETS} \ + -DCMAKE_INSTALL_PREFIX=${PWD}/${BUILD_DIR}/${INSTALL_DIR} \ + -DCMAKE_BUILD_TYPE=${{ matrix.config }} . - name: Build project - run: cmake --build ${BUILD_DIR} + run: cmake --build ${BUILD_DIR} -j2 - name: Run regression tests run: | pushd ${BUILD_DIR} - ctest -j 2 --output-on-failure + ctest -j2 --output-on-failure popd - name: Install project - run: | - cmake --install ${BUILD_DIR} + run: cmake --install ${BUILD_DIR} intel-build: + runs-on: ${{ matrix.os }} + strategy: fail-fast: false matrix: os: [ubuntu-latest] mpi: [nompi] socket: [nosocket, socket] - fc: [ifx] - cc: [icx] + config: [RelWithDebInfo] + env: - FC: ${{ matrix.fc }} - CC: ${{ matrix.cc }} - WITH_MPI: false - CMAKE_OPTIONS: >- - -DCMAKE_BUILD_TYPE=RelWithDebInfo - -DFYPP_FLAGS='-DTRAVIS' + FC: ifx + CC: icx steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.x @@ -138,27 +139,24 @@ jobs: run: | source /opt/intel/oneapi/setvars.sh printenv >> ${GITHUB_ENV} - echo "FC=ifx" >> ${GITHUB_ENV} - echo "CC=icx" >> ${GITHUB_ENV} + echo "FC=${FC}" >> ${GITHUB_ENV} + echo "CC=${CC}" >> ${GITHUB_ENV} + echo "CXX=${CC}" >> ${GITHUB_ENV} - name: Install HDF5 - if: contains(matrix.os, 'ubuntu') run: | wget https://support.hdfgroup.org/releases/hdf5/v1_14/v1_14_4/downloads/hdf5-1.14.4-3.tar.gz tar xfz hdf5-1.14.4-3.tar.gz cd hdf5-1.14.4-3/ - CC=icx CXX=icx FC=ifx F9X=ifx ./configure --prefix=${PWD}/hdf5 --enable-fortran --enable-shared - make -j -l2 - make install - export HDF5_ROOT=${PWD}/hdf5 - cd ../../ - printenv >> $GITHUB_ENV + cmake -DCMAKE_INSTALL_PREFIX=${PWD}/${BUILD_DIR}/${INSTALL_DIR} \ + -DHDF5_BUILD_FORTRAN=1 -DBUILD_SHARED_LIBS=1 -B ${BUILD_DIR} + cmake --build ${BUILD_DIR} -j2 + cmake --install ${BUILD_DIR} + echo "HDF5_ROOT=${PWD}/${BUILD_DIR}/${INSTALL_DIR}" >> ${GITHUB_ENV} - name: Disable MPI build if: contains(matrix.mpi, 'nompi') - run: | - echo "WITH_MPI=false" >> $GITHUB_ENV - echo "FC=ifx" >> $GITHUB_ENV + run: echo "WITH_MPI=false" >> $GITHUB_ENV - name: Enable socket build if: contains(matrix.socket, 'socket') @@ -168,21 +166,19 @@ jobs: if: contains(matrix.socket, 'nosocket') run: echo "WITH_SOCKETS=false" >> $GITHUB_ENV - - name: Install cmake + - name: Install requirements (pip) run: | pip3 install --upgrade pip - pip3 install cmake ninja fypp numpy h5py + pip3 install cmake fypp numpy h5py - name: Configure build - run: >- - cmake -B _build -G Ninja - -DCMAKE_INSTALL_PREFIX=${PWD}/_install - ${CMAKE_OPTIONS} - -DWITH_MPI=${WITH_MPI} - -DWITH_SOCKETS=${WITH_SOCKETS} + run: | + cmake -B ${BUILD_DIR} -DWITH_MPI=${WITH_MPI} -DWITH_SOCKETS=${WITH_SOCKETS} \ + -DCMAKE_INSTALL_PREFIX=${PWD}/${BUILD_DIR}/${INSTALL_DIR} \ + -DCMAKE_BUILD_TYPE=${{ matrix.config }} . - name: Build project - run: cmake --build ${BUILD_DIR} + run: cmake --build ${BUILD_DIR} -j2 - name: Run regression tests run: | @@ -191,5 +187,4 @@ jobs: popd - name: Install project - run: | - cmake --install ${BUILD_DIR} + run: cmake --install ${BUILD_DIR}