Skip to content

FMS cannot use mpi_f08 on macOS sequoia (ARM64) if MPI is built with clang #1870

@marshallward

Description

@marshallward

Describe the bug

FMS currently requires the MPI Fortran 2008 module interface, mpi_f08. This prevents FMS from building with MPI installations that provide the older mpi module but do not provide mpi_f08.

This occurs in GitHub Actions macOS arm64 runners using the Homebrew MPICH 5.0.1 bottle. The installed MPICH provides:

mpi.mod
mpi_base.mod
mpi_constants.mod
mpi_sizeofs.mod

but does not install

mpi_f08.mod

Test programs with use mpi build correctly but use mpi_f08 report a missing module.

The MPICH library was built with Fortran support, and mpi_f08 was not explicitly disabled in the reported configure options, as shown below.

MPICH Version:      5.0.1
MPICH Release date: Fri Apr 10 09:45:31 AM CDT 2026
MPICH ABI:          18:1:6
MPICH Device:       ch4:ofi
MPICH configure:    --disable-dependency-tracking --disable-silent-rules --enable-fast=all,O3 --enable-g=dbg --enable-romio --enable-shared --with-hwloc=/opt/homebrew/opt/hwloc --with-pm=hydra --prefix=/opt/homebrew/Cellar/mpich/5.0.1 --mandir=/opt/homebrew/Cellar/mpich/5.0.1/share/man F77=gfortran FC=gfortran
MPICH CC:           clang   -fno-common   -DNDEBUG -DNVALGRIND  -g -O3
MPICH CXX:          clang++   -DNDEBUG -DNVALGRIND -g -O3
MPICH F77:          gfortran   -g -O3
MPICH FC:           gfortran   -g -O3
MPICH features:     threadcomm

As discussed in this linked comment, mpi_f08 support depends on several compiler and interoperability requirements, including:

  • ISO_Fortran_binding.h availability and interoperability
  • type(*), dimension(..) support
  • correct asynchronous semantics

On the affected macOS GitHub Actions runners, attempting to compile ISO_Fortran_binding.h from the Homebrew gfortran installation with clang produces the following error:

+ clang -c cfi.c -I/opt/homebrew/Cellar/gcc/15.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin24/15/include
In file included from cfi.c:1:
In file included from /opt/homebrew/Cellar/gcc/15.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin24/15/include/ISO_Fortran_binding.h:33:
/opt/homebrew/Cellar/gcc/15.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin24/15/include/stddef.h:448:68: error: __float128 is not supported on this target
  448 |   __float128 __max_align_f128 __attribute__((__aligned__(__alignof(__float128))));
      |                                                                    ^
/opt/homebrew/Cellar/gcc/15.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin24/15/include/stddef.h:448:3: **error: __float128 is not supported on this target**
  448 |   __float128 __max_align_f128 __attribute__((__aligned__(__alignof(__float128))));
      |   ^
2 errors generated.

This may explain why the installed MPICH package lacks mpi_f08, although I cannot confirm the exact reason that the Homebrew bottle was built without it.

The practical here is that mpi_f08 is unavailable in what appears to be a fairly standard macOS/Homebrew arm64 MPI environment, even though the older mpi module is available and functional.

To Reproduce
Set up a macOS CI on GitHub and set FC to gfortran. Examples:

Expected behavior

System Environment
Describe the system environment, include:

  • OS: macOS 15.7.4 (24G517)
  • Compiler(s): gcc--15.2.0_1.arm64_sequoia
  • MPICH 5.0.1 (bfb4e7bfbcd5b85c2e08fb56e4d73f98e7bf2412781f40c91b8212d9724581ef)
  • netCDF Version: N/A
  • Configure options: N/A

Additional context

Despite the name mpi_f08, some of the interoperability features required for robust support originated in the 2012 tech spec (29113) and were only later incorporated into Fortran 2018. So mpi_f08 support may not yet be available across all MPI/compiler toolchains.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions