macOS + GCC + MPICH + OpenBLAS

macOS + GCC + MPICH + OpenBLAS#

Example build script for macOS using GCC, MPICH, and OpenBLAS. Optionally, the code can be built with LibRI support and/or Fortran binding.

#!/bin/bash

# This script uses GCC, MPICH, OpenBLAS and ScaLAPACK to build LibRPA
# on macOS for develop and test use. LibRI and Fortran binding can be switched on or off.
# Tested for Sequoia, Sonoma and Ventura.

# GCC compilers (g++, gfortran), MPICH and OpenBLAS are installed using homebrew.
# ScaLAPACK needs to be installed manually, because the homebrew ScaLAPACK is
# built on OpenMPI.

BUILDDIR="${BUILDDIR:=build_macos_gcc_mpich}"

# Switch for LibRI
export USE_LIBRI="${USE_LIBRI:=ON}"
# Switch for Fortran binding
export ENABLE_FORTRAN_BIND="${ENABLE_FORTRAN_BIND:=OFF}"

# Optionally, one can specify the path of their own LibRI and LibComm libraries.
# If not set or set to empty string, those bundled under thirdparty/ will be used.
export LIBRI_INCLUDE="${LIBRI_INCLUDE:=}"
export LIBCOMM_INCLUDE="${LIBCOMM_INCLUDE:=}"

# The following two variables need customize
export OPENBLAS_DIR="/opt/homebrew/Cellar/openblas/0.3.28/lib"
export SCALAPACK_DIR="/opt/packages/scalapack/2.2.0/gcc-14.2.0-mpich-4.2.2-openblas"

# Compilers setup
export CXX=mpicxx
export MPICH_CXX=g++-14
export CC=gcc-14

if [[ $ENABLE_FORTRAN_BIND == "ON" ]]; then
  export FC=mpifort
  export MPICH_FC=gfortran-14
else
  export FC=gfortran-14
fi

if [[ $USE_LIBRI == "ON" ]]; then
  BUILDDIR="${BUILDDIR}_libri"
fi

# Note: -Wl,-ld_classic may not be necessary for Sequoia.
export FCFLAGS="-Wl,-ld_classic"
export CXXFLAGS="-cxx=g++-14 -g -rdynamic -Wl,-lgfortran -Wl,-ld_classic"

cmake -B "$BUILDDIR" \
  -DLIBRPA_USE_LIBRI=$USE_LIBRI \
  -DLIBRPA_ENABLE_TEST=ON \
  -DLIBRPA_ENABLE_FORTRAN_BIND=$ENABLE_FORTRAN_BIND \
  -DLIBRI_INCLUDE_DIR="$LIBRI_INCLUDE" \
  -DLIBCOMM_INCLUDE_DIR="$LIBCOMM_INCLUDE" \
  -DBLAS_LIBRARIES="-L${OPENBLAS_DIR} -lblas" \
  -DLAPACK_LIBRARIES="-L${OPENBLAS_DIR} -llapack" \
  -DSCALAPACK_DIR="$SCALAPACK_DIR" \
  -DCMAKE_CXX_FLAGS="$CXXFLAGS" \
  -DCMAKE_Fortran_FLAGS="$FCFLAGS"

cmake --build "$BUILDDIR" -j 4