Unify all three interfaces (serial, mpi & coarray) in one repository #189
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 | |
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 | |
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 "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 "INTERFACE=mpi" >> ${GITHUB_ENV} | |
- name: Setup build tools | |
run: | | |
pip install cmake fpm meson ninja fypp | |
- name: Build Fortuno with CMake | |
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: Build Fortuno with Fpm | |
# run: | | |
# fpm build | |
# rm -rf build | |
- name: Build Fortuno with Meson | |
run: | | |
meson setup ${MESON_OPTIONS} -Dbuild_examples=true ${BUILD_DIR} | |
ninja -C ${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: | | |
# cd test/export | |
# fpm run testapp | |
- name: Test Meson pkgconfig export | |
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 | |
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 --wrap-mode forcefallback ${BUILD_DIR} | |
ninja -C ${BUILD_DIR} | |
${BUILD_DIR}/testapp | |
rm -rf subprojects ${BUILD_DIR} |