Skip to content

GCC 15 Workaround (#20) #66

GCC 15 Workaround (#20)

GCC 15 Workaround (#20) #66

Workflow file for this run

name: CI
on:
push:
paths-ignore:
- "docs/**"
- "*.md"
- "*.rst"
- ".*"
pull_request:
paths-ignore:
- "docs/**"
- "*.md"
- "*.rst"
- ".*"
workflow_dispatch:
env:
M_BUILD_DIR: _build_meson
C_BUILD_DIR: _build_cmake
jobs:
gcc-build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-15-intel]
include:
- os: ubuntu-latest
gcc_v: 10
- os: macos-15-intel
gcc_v: 13
env:
FC: gfortran
GCC_V: ${{ matrix.gcc_v }}
PYTHON_V: 3.8
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Python version ${{ env.PYTHON_V }}
uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_V }}
- name: Install GCC (OSX)
if: contains(matrix.os, 'macos')
run: |
brew install gcc@${{ env.GCC_V }}
echo "$(brew --prefix gcc@${{ env.GCC_V }})/bin" >> $GITHUB_PATH
echo "FC=$(brew --prefix gcc@${{ env.GCC_V }})/bin/gfortran-${{ env.GCC_V }}" >> $GITHUB_ENV
echo "CC=$(brew --prefix gcc@${{ env.GCC_V }})/bin/gcc-${{ env.GCC_V }}" >> $GITHUB_ENV
echo "CXX=$(brew --prefix gcc@${{ env.GCC_V }})/bin/g++-${{ env.GCC_V }}" >> $GITHUB_ENV
- name: Install GCC (Linux)
if: contains(matrix.os, 'ubuntu')
run: |
if [[ -x "/usr/bin/gcc-${GCC_V}" && -x "/usr/bin/gfortran-${GCC_V}" ]]; then
echo "Using GCC ${GCC_V} via update-alternatives"
sudo update-alternatives \
--install /usr/bin/gcc gcc /usr/bin/gcc-${GCC_V} 100 \
--slave /usr/bin/gfortran gfortran /usr/bin/gfortran-${GCC_V} \
--slave /usr/bin/gcov gcov /usr/bin/gcov-${GCC_V}
else
echo "GCC ${GCC_V} not found; using default system compilers"
gcc --version
gfortran --version
fi
- name: Install meson/cmake
run: pip3 install meson==1.4.1 ninja cmake
- name: Configure meson build
run: |
export FC="${FC:-gfortran}"
export CC="${CC:-gcc}"
export CXX="${CXX:-g++}"
meson setup ${{ env.M_BUILD_DIR }}
- name: Build library (meson)
run: meson compile -C ${{ env.M_BUILD_DIR }}
- name: Run unit tests (meson)
run: meson test -C ${{ env.M_BUILD_DIR }} --print-errorlogs --no-rebuild
- name: Configure CMake build
run: cmake -B ${{ env.C_BUILD_DIR }} -G Ninja
- name: Build library (CMake)
run: cmake --build ${{ env.C_BUILD_DIR }}
- name: Run unit tests (CTest)
run: ctest
working-directory: ${{ env.C_BUILD_DIR }}
# Test native MinGW Windows build
mingw-build:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
include: [
{ msystem: MINGW64, arch: x86_64 },
# { msystem: MINGW32, arch: i686 }
]
defaults:
run:
shell: msys2 {0}
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup MSYS2 toolchain
uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.msystem }}
update: true
install: >-
git
mingw-w64-${{ matrix.arch }}-gcc-fortran
mingw-w64-${{ matrix.arch }}-cmake
mingw-w64-${{ matrix.arch }}-python
mingw-w64-${{ matrix.arch }}-python-pip
mingw-w64-${{ matrix.arch }}-ninja
- name: Install meson/cmake
run: pip3 install meson==0.56.2
- name: Configure meson build
run: meson setup ${{ env.M_BUILD_DIR }}
env:
FC: gfortran
LDFLAGS: -Wl,--allow-multiple-definition
- name: Build project (meson)
run: meson compile -C ${{ env.M_BUILD_DIR }}
- name: Run unit tests (meson)
run: meson test -C ${{ env.M_BUILD_DIR }} --print-errorlogs --no-rebuild
env:
OMP_NUM_THREADS: 2,1
- name: Configure cmake build
run: cmake -B ${{ env.C_BUILD_DIR }} -G Ninja
- name: Build project (CMake)
run: cmake --build ${{ env.C_BUILD_DIR }}
- name: Run unit tests (CTest)
run: ctest
working-directory: ${{ env.C_BUILD_DIR }}
env:
OMP_NUM_THREADS: 2,1
intel-build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
env:
FC: ifx
OMP_NUM_THREADS: 2,1
steps:
- name: Checkout code
uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Add Intel repository
run: |
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB
rm GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB
echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
sudo apt-get update
- name: Install Intel oneAPI compiler
run: |
sudo apt-get install -y intel-oneapi-compiler-fortran
- name: Install meson/cmake
run: pip3 install meson==1.4.1 ninja cmake
- name: Configure meson build
run: . /opt/intel/oneapi/setvars.sh && meson setup ${{ env.M_BUILD_DIR }}
- name: Build library (meson)
run: . /opt/intel/oneapi/setvars.sh && meson compile -C ${{ env.M_BUILD_DIR }}
- name: Run unit tests (meson)
run: . /opt/intel/oneapi/setvars.sh && meson test -C ${{ env.M_BUILD_DIR }} --print-errorlogs --no-rebuild
- name: Configure cmake build
run: . /opt/intel/oneapi/setvars.sh && cmake -B ${{ env.C_BUILD_DIR }} -G Ninja
- name: Build library (CMake)
run: . /opt/intel/oneapi/setvars.sh && cmake --build ${{ env.C_BUILD_DIR }}
- name: Run unit tests (CTest)
run: . /opt/intel/oneapi/setvars.sh && ctest
working-directory: ${{ env.C_BUILD_DIR }}