Unify all three interfaces (serial, mpi & coarray) in one repository #200
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
workflow_dispatch: | |
env: | |
BUILD_DIR: _build | |
INSTALL_DIR: _install | |
FPM_EXPORT_DIR: _fpm_export | |
jobs: | |
# | |
# Test Fortuno in various system configurations | |
# | |
fortuno-test: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest] | |
compiler: [gnu, intel] | |
interface: [serial, mpi] | |
exclude: | |
- os: macos-latest | |
compiler: intel | |
include: | |
- interface: serial | |
mpi: nompi | |
- interface: mpi | |
os: ubuntu-latest | |
compiler: gnu | |
mpi: mpich | |
- interface: mpi | |
os: ubuntu-latest | |
compiler: intel | |
mpi: impi | |
- interface: mpi | |
os: macos-latest | |
mpi: openmpi | |
steps: | |
- name: Check-out code | |
uses: actions/checkout@v4 | |
- name: Setup Intel compiler | |
if: ${{ contains(matrix.compiler, 'intel') }} | |
uses: rscohn2/setup-oneapi@v0 | |
with: | |
components: | | |
ifx | |
icx | |
impi | |
- name: Setup Intel environment | |
if: ${{ contains(matrix.compiler, 'intel') }} | |
run: | | |
source /opt/intel/oneapi/setvars.sh | |
printenv >> ${GITHUB_ENV} | |
echo "FC=ifx" >> ${GITHUB_ENV} | |
echo "FPM_FC=ifx" >> ${GITHUB_ENV} | |
# Overriding default FPM_FFLAGS as default setting contains '-standard-semantics' | |
# which is incompatible with intel MPI. | |
echo "FPM_FFLAGS='-warn all -check all,nouninit -error-limit 1 -O0 -g -stand f18 -traceback'" >> ${GITHUB_ENV} | |
- name: Setup GNU compiler | |
if: ${{ contains(matrix.compiler, 'gnu') }} | |
uses: fortran-lang/setup-fortran@v1 | |
with: | |
compiler: gcc | |
version: 13 | |
- name: Setup GNU environment | |
if: ${{ contains(matrix.compiler, 'gnu') }} | |
run: | | |
echo "FC=${{ env.FC }}" >> ${GITHUB_ENV} | |
echo "FPM_FC=${{ env.FC }}" >> ${GITHUB_ENV} | |
- name: Setup MPI on Ubuntu | |
if: ${{ contains(matrix.os, 'ubuntu') && contains(matrix.interface, 'mpi') }} | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y mpich | |
- name: Setup MPI on MacOS | |
if: ${{ contains(matrix.os, 'macos') && contains(matrix.interface, 'mpi') }} | |
run: | | |
brew install openmpi | |
- name: Setup serial interface options | |
if: ${{ contains(matrix.interface, 'serial') }} | |
run: | | |
echo "CMAKE_OPTIONS=-DFORTUNO_BUILD_SERIAL_INTERFACE=ON -DFORTUNO_BUILD_MPI_INTERFACE=OFF" >> ${GITHUB_ENV} | |
echo "MESON_OPTIONS=-Dbuild_serial_interface=true -Dbuild_mpi_interface=false" >> ${GITHUB_ENV} | |
echo "MESON_FALLBACK_OPTIONS=-Dfortuno:build_serial_interface=true -Dfortuno:build_mpi_interface=false" >> ${GITHUB_ENV} | |
echo "INTERFACE=serial" >> ${GITHUB_ENV} | |
- name: Setup mpi interface options | |
if: ${{ contains(matrix.interface, 'mpi') }} | |
run: | | |
echo "CMAKE_OPTIONS=-DFORTUNO_BUILD_SERIAL_INTERFACE=OFF -DFORTUNO_BUILD_MPI_INTERFACE=ON" >> ${GITHUB_ENV} | |
echo "MESON_OPTIONS=-Dbuild_serial_interface=false -Dbuild_mpi_interface=true" >> ${GITHUB_ENV} | |
echo "MESON_FALLBACK_OPTIONS=-Dfortuno:build_serial_interface=false -Dfortuno:build_mpi_interface=true" >> ${GITHUB_ENV} | |
echo "INTERFACE=mpi" >> ${GITHUB_ENV} | |
- name: Setup build tools | |
run: | | |
pip install cmake fpm meson ninja fypp | |
- name: Build Fortuno | |
run: | | |
cmake ${CMAKE_OPTIONS} -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -B ${BUILD_DIR} -G Ninja | |
cmake --build ${BUILD_DIR} | |
cmake --install ${BUILD_DIR} | |
rm -rf ${BUILD_DIR} | |
- name: Test CMake export | |
run: | | |
CMAKE_PREFIX_PATH=${INSTALL_DIR} cmake -B ${BUILD_DIR} -G Ninja test/export/${INTERFACE} | |
cmake --build ${BUILD_DIR} | |
${BUILD_DIR}/app/testapp | |
${BUILD_DIR}/app/testapp_fypp | |
rm -rf ${BUILD_DIR} | |
- name: Test fpm export | |
run: | | |
./devel/fpm-export/fpm-export.sh ${INTERFACE} ${FPM_EXPORT_DIR} | |
cd ${FPM_EXPORT_DIR}/test/export/${INTERFACE} | |
fpm -C ${FPM_EXPORT_DIR}/test/export/${INTERFACE} run testapp | |
rm -rf ${FPM_EXPORT_DIR} | |
- name: Test Meson pkgconfig export | |
# Meson only detects OpenMPI reliably (as of version 1.3.2) | |
if: ${{ !contains(matrix.interface, 'mpi') || contains(matrix.mpi, 'openmpi') }} | |
run: | | |
export PKG_CONFIG_PATH="${PWD}/${INSTALL_DIR}/lib/pkgconfig:${PKG_CONFIG_PATH}" | |
cd test/export/${INTERFACE} | |
meson setup --wrap-mode nofallback ${BUILD_DIR} | |
ninja -C ${BUILD_DIR} | |
${BUILD_DIR}/testapp | |
rm -rf ./${BUILD_DIR} | |
- name: Test Meson subproject export | |
# Meson only detects OpenMPI reliably (as of version 1.3.2) | |
if: ${{ !contains(matrix.interface, 'mpi') || contains(matrix.mpi, 'openmpi') }} | |
run: | | |
FORTUNO_DIR=${PWD} | |
GIT_REV=$(git rev-parse HEAD) | |
cd test/export/${INTERFACE} | |
mkdir subprojects | |
echo -e "[wrap-git]\ndirectory=fortuno\n" > subprojects/fortuno.wrap | |
echo -e "url=file://${FORTUNO_DIR}\nrevision=${GIT_REV}\n" >> subprojects/fortuno.wrap | |
meson setup ${MESON_FALLBACK_OPTIONS} --wrap-mode forcefallback ${BUILD_DIR} | |
ninja -C ${BUILD_DIR} | |
${BUILD_DIR}/testapp | |
rm -rf subprojects ${BUILD_DIR} |