Repository navigation
Merge pull request #55 from BerkeleyLab/fixes-n-chores #217
This file contains hidden or 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: Build | |
| on: | |
| push: | |
| paths-ignore: &paths_ignore | |
| - 'doc/**' | |
| - '**.txt' | |
| - '**.md' | |
| pull_request: | |
| paths-ignore: *paths_ignore | |
| concurrency: | |
| # De-duplicate concurrent workflow runs on the same branch/ref | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }} | |
| cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} | |
| defaults: | |
| run: | |
| shell: bash --noprofile --norc -e -x -o pipefail {0} | |
| jobs: | |
| setup: # This job currently just exists to reduce cancelled job spam in PRs | |
| name: Ignore me | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Resolve job concurrency | |
| run: sleep 5 | |
| build: | |
| name: ${{ matrix.compiler }}-${{ matrix.version }} (${{ matrix.os }}) | |
| needs: setup | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ macos-14, macos-15, macos-15-intel, macos-26, macos-26-intel, ubuntu-24.04, ubuntu-26.04-arm ] | |
| compiler: [ gfortran ] | |
| version: [ 13, 14, 15, 16 ] # Julienne supports GFortran 13+ | |
| extra_flags: [ -g -O3 ] | |
| exclude: | |
| - compiler: gfortran # gfortran disabled for now | |
| include: | |
| # --- LLVM flang coverage --- | |
| - os: macos-14 | |
| compiler: flang | |
| version: 22 | |
| - os: macos-15 | |
| compiler: flang | |
| version: 22 | |
| - os: macos-15-intel | |
| compiler: flang | |
| version: 22 | |
| - os: macos-26 | |
| compiler: flang | |
| version: 22 | |
| - os: macos-26-intel | |
| compiler: flang | |
| version: 22 | |
| # https://hub.docker.com/r/snowstep/llvm/tags | |
| - os: ubuntu-24.04 | |
| compiler: flang | |
| version: latest | |
| container: snowstep/llvm:ubuntu-24.04-latest | |
| - os: ubuntu-22.04 | |
| compiler: flang | |
| version: latest | |
| container: snowstep/llvm:ubuntu-22.04-latest | |
| # https://hub.docker.com/r/phhargrove/llvm-flang/tags | |
| - os: ubuntu-24.04 | |
| compiler: flang | |
| version: 23 | |
| container: phhargrove/llvm-flang:23.1.0_rc2-latest | |
| - os: ubuntu-24.04 | |
| compiler: flang | |
| version: 22 | |
| container: phhargrove/llvm-flang:22.1.0-latest | |
| - os: ubuntu-24.04 | |
| compiler: flang | |
| version: 21 | |
| network: smp | |
| container: phhargrove/llvm-flang:21.1.0-latest | |
| - os: ubuntu-24.04 | |
| compiler: flang | |
| version: 20 | |
| container: phhargrove/llvm-flang:20.1.0-latest | |
| - os: ubuntu-24.04 | |
| compiler: flang | |
| version: 19 | |
| extra_flags: -g -mmlir -allow-assumed-rank -O3 | |
| container: phhargrove/llvm-flang:19.1.1-latest | |
| # --- Intel coverage --- | |
| # Julienne requires 2025.2.0 or later | |
| # ifx disabled for now | |
| # | |
| # # https://hub.docker.com/r/intel/oneapi-toolkit/tags | |
| # - os: ubuntu-24.04 | |
| # compiler: ifx | |
| # version: latest | |
| # container: intel/oneapi-toolkit:latest | |
| # | |
| # - os: ubuntu-24.04 | |
| # compiler: ifx | |
| # version: 2026.0.0 | |
| # container: intel/oneapi-toolkit:2026.0.0-devel-ubuntu24.04 | |
| # | |
| # # https://hub.docker.com/r/intel/fortran-essentials/tags | |
| # - os: ubuntu-24.04 | |
| # compiler: ifx | |
| # version: 2025.3.0 | |
| # container: intel/fortran-essentials:2025.3.0-0-devel-ubuntu24.04 | |
| # | |
| # - os: ubuntu-24.04 | |
| # compiler: ifx | |
| # version: 2025.2.2 | |
| # container: intel/fortran-essentials:2025.2.2-0-devel-ubuntu24.04 | |
| # | |
| # - os: ubuntu-24.04 | |
| # compiler: ifx | |
| # version: 2025.2.0 | |
| # container: intel/fortran-essentials:2025.2.0-0-devel-ubuntu24.04 | |
| # --- LFortran coverage --- | |
| # Formal now requires LFortran 0.64 or later | |
| # https://hub.docker.com/r/phhargrove/lfortran/tags | |
| #- os: ubuntu-24.04 | |
| # compiler: lfortran | |
| # version: 0.63.0 | |
| # container: phhargrove/lfortran:0.64.0-1 | |
| # https://github.com/lfortran/lfortran/pkgs/container/lfortran | |
| - os: ubuntu-22.04 | |
| compiler: lfortran | |
| version: 0.64.0 | |
| container: ghcr.io/lfortran/lfortran:v0.64.0 | |
| - os: ubuntu-22.04 | |
| compiler: lfortran | |
| version: latest | |
| container: ghcr.io/lfortran/lfortran:latest | |
| container: | |
| image: ${{ matrix.container }} | |
| env: | |
| COMPILER_VERSION: ${{ matrix.version }} | |
| FC: ${{ matrix.compiler }} | |
| FFLAGS: ${{ matrix.extra_flags }} | |
| FPM_FLAGS: --profile release --verbose | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| - name: Install Ubuntu Native Dependencies | |
| if: ${{ contains(matrix.os, 'ubuntu') && matrix.container == '' && matrix.compiler == 'gfortran' }} | |
| run: | | |
| sudo apt-get update | |
| #sudo apt list -a 'gfortran-*' | |
| sudo apt install -y build-essential | |
| if [[ ${COMPILER_VERSION} -lt 15 ]] ; then | |
| sudo apt install -y gfortran-${COMPILER_VERSION} | |
| else | |
| curl -L https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh -o install-homebrew.sh | |
| chmod +x install-homebrew.sh | |
| env CI=1 ./install-homebrew.sh | |
| HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew" | |
| ${HOMEBREW_PREFIX}/bin/brew install -v gcc@${COMPILER_VERSION} binutils | |
| ls -al ${HOMEBREW_PREFIX}/bin | |
| echo "PATH=${HOMEBREW_PREFIX}/bin:${PATH}" >> "$GITHUB_ENV" | |
| : Homebrew GCC@15 needs binutils 2.44+ | |
| HOMEBREW_BINUTILS=$(ls -d ${HOMEBREW_PREFIX}/Cellar/binutils/2.*/bin ) | |
| ls -al ${HOMEBREW_BINUTILS} | |
| echo "FFLAGS=$FFLAGS -B ${HOMEBREW_BINUTILS}" >> "$GITHUB_ENV" | |
| echo "CFLAGS=$CFLAGS -B ${HOMEBREW_BINUTILS}" >> "$GITHUB_ENV" | |
| echo "CXXFLAGS=$CXXFLAGS -B ${HOMEBREW_BINUTILS}" >> "$GITHUB_ENV" | |
| fi | |
| - name: Install Ubuntu Container Dependencies | |
| if: ${{ contains(matrix.os, 'ubuntu') && matrix.container != '' && !contains(matrix.container, 'phhargrove') }} | |
| run: | | |
| apt update | |
| apt install -y build-essential pkg-config make git curl | |
| # Add container lfortran to PATH: | |
| if test "$FC" = "lfortran"; then | |
| echo "/app/bin" >> "$GITHUB_PATH" | |
| ls -alh /app/bin | |
| ls -alh /app/share/lfortran/lib/ | |
| fi | |
| - name: Install macOS Dependencies | |
| if: contains(matrix.os, 'macos') | |
| run: | | |
| # silence Homebrew tap trust warnings: | |
| (set +e ; brew untap -f aws/tap hashicorp/tap 2>&1 | perl -pe 's/#*.warning./warn: /' ; brew trust azure/bicep ) | |
| brew update | |
| # fpm binary distribution for macOS requires gfortran shared libraries from gcc@12 | |
| brew install gcc@12 | |
| if [[ ${{ matrix.compiler }} == 'gfortran' && ${COMPILER_VERSION} -gt 15 ]] ; then | |
| brew install gcc@${COMPILER_VERSION} | |
| fi | |
| - name: Install LLVM flang on macOS | |
| if: contains(matrix.os, 'macos') && matrix.compiler == 'flang' | |
| run: | | |
| brew install llvm@${COMPILER_VERSION} flang | |
| # workaround issue #228: clang cannot find homebrew flang's C header | |
| for p in /opt/homebrew /usr/local $(brew --prefix) ; do find $p/Cellar/flang -name ISO_Fortran_binding.h 2>/dev/null || true ; done | |
| echo "CFLAGS=-I$(dirname $(find $(brew --prefix)/Cellar/flang -name ISO_Fortran_binding.h | head -1)) ${CFLAGS}" >> "$GITHUB_ENV" | |
| # Prepend homebrew clang to PATH: | |
| echo "PATH=$(brew --prefix)/opt/llvm/bin:${PATH}" >> "$GITHUB_ENV" | |
| - name: Setup Compilers | |
| run: | | |
| if test "$FC" = "flang" ; then | |
| echo "FPM_FC=flang-new" >> "$GITHUB_ENV" | |
| elif [[ "$FC" =~ "ifx" ]] ; then | |
| echo "FPM_FC=ifx" >> "$GITHUB_ENV" | |
| echo "FFLAGS=-fpp -coarray -coarray-num-images=1 $FFLAGS" >> "$GITHUB_ENV" | |
| : ls -al /opt/intel/oneapi/compiler/2025.*/bin/ | |
| if type -p icpx ; then | |
| echo "FPM_CC=icx" >> "$GITHUB_ENV" | |
| echo "FPM_CXX=icpx" >> "$GITHUB_ENV" | |
| else | |
| echo "FPM_CC=gcc" >> "$GITHUB_ENV" | |
| echo "FPM_CXX=g++" >> "$GITHUB_ENV" | |
| fi | |
| elif test "$FC" = "lfortran" ; then | |
| echo "FPM_FC=lfortran" >> "$GITHUB_ENV" | |
| echo "FFLAGS=--cpp --realloc-lhs-arrays --separate-compilation $FFLAGS" >> "$GITHUB_ENV" | |
| echo "FPM_FLAGS=--profile debug --verbose" >> "$GITHUB_ENV" ; : fpm 0.13 workaround | |
| else | |
| echo "FPM_FC=gfortran-${COMPILER_VERSION}" >> "$GITHUB_ENV" | |
| echo "FFLAGS=-ffree-line-length-0 $FFLAGS" >> "$GITHUB_ENV" | |
| fi | |
| if [[ "${{ matrix.container }}" =~ "snowstep/llvm" ]] ; then | |
| echo "LD_LIBRARY_PATH=/usr/lib/llvm-22/lib:$LD_LIBRARY_PATH" >> "$GITHUB_ENV" | |
| fi | |
| - name: Setup FPM | |
| if: ${{ !(runner.os == 'Linux' && runner.arch == 'ARM64') }} | |
| uses: fortran-lang/setup-fpm@main | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| fpm-version: latest | |
| - name: Build FPM | |
| if: ${{ runner.os == 'Linux' && runner.arch == 'ARM64' }} | |
| run: | | |
| export FPM_VERSION=0.13.0 | |
| curl --retry 5 -LOsS https://github.com/fortran-lang/fpm/releases/download/v$FPM_VERSION/fpm-$FPM_VERSION.F90 | |
| mkdir fpm-temp | |
| gfortran-14 -o fpm-temp/fpm fpm-$FPM_VERSION.F90 | |
| echo "PATH=`pwd`/fpm-temp:${PATH}" >> "$GITHUB_ENV" | |
| - name: Version info | |
| run: | | |
| set +x | |
| if test -d .git && type -p git > /dev/null ; then | |
| git config --global --add safe.directory `pwd` | |
| echo == Commit Info == | |
| git log -n 1 ; echo ; echo | |
| fi | |
| echo == Platform version info == | |
| uname -a | |
| if test -r /etc/os-release ; then grep -e NAME -e VERSION /etc/os-release ; fi | |
| if test -x /usr/bin/sw_vers ; then /usr/bin/sw_vers ; fi | |
| echo | |
| echo PATH="$PATH" | |
| for tool in ${FPM_FC} ${FPM_CC} ${FPM_CXX} fpm ; do | |
| ( echo ; set -x ; w=$(which $tool) ; ls -al $w ; ls -alhL $w ; $tool --version ) | |
| done | |
| - name: Build and Test | |
| run: | | |
| echo "FPM_FLAGS=${FPM_FLAGS}" | |
| echo "FFLAGS=$FFLAGS" | |
| ls -lt | |
| fpm test ${FPM_FLAGS} --flag "$FFLAGS" |