Installing from Source (macOS)

Note

These installation instructions are still in beta-testing. Please report failures on the discussion forums.

A beta-release of an installation script (that automates the process of installing Galacticus from source) for MacOS is available in the installationScripts repo. You can find instructions for using this script here.

Note

GCC 16 is the minimum supported compiler version. These instructions install GCC and the build dependencies through Homebrew, so the compilers are named gcc-16, g++-16, and gfortran-16 throughout. If you install GCC through a different package manager, substitute the corresponding executable names.

Install Xcode Command Line Tools

If you don’t already have the Xcode command line tools installed, install them now:

if [[ ! $(xcode-select -p) ]]; then
    xcode-select --install
fi
export PATH=$PATH:$(brew --prefix)/bin:/usr/local/bin

Install Homebrew

If you don’t already have Homebrew installed, install it now:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Also record your macOS major version. It is used for a linker workaround in the HDF5 and Galacticus build steps below:

os_ver=$(sw_vers -productVersion)
IFS='.' read -r -a ver <<< "$os_ver"

Install GCC

GCC 16 (the minimum supported version) is required to build Galacticus. Install the GCC compilers through Homebrew:

brew install gcc

Homebrew names the executables with their major version — gcc-16, g++-16, and gfortran-16 — and these names are used throughout the remaining steps.

Note

brew install gcc installs the current GCC release. If Homebrew installs a major version newer than 16, adjust the -16 suffixes in the commands below to match (and ensure the version is at least 16).

Install Guile

brew install guile

Install GSL

brew install gsl

Install libmatheval

curl -L https://github.com/galacticusorg/libmatheval/releases/download/latest/libmatheval-1.1.13.tar.gz --output libmatheval-1.1.13.tar.gz
tar xvfz libmatheval-1.1.13.tar.gz
cd libmatheval-1.1.13
sed -E -i~ s/"#undef HAVE_SCM_T_BITS"/"#define HAVE_SCM_T_BITS 1"/ config.h.in
CC=gcc-16 ./configure --prefix=/usr/local
make -j
sudo make install
cd ..
rm -rf libmatheval-1.1.13.tar.gz libmatheval-1.1.13

Install QHull

curl -L http://www.qhull.org/download/qhull-2020-src-8.0.2.tgz --output qhull-2020-src-8.0.2.tgz
tar xvfz qhull-2020-src-8.0.2.tgz
cd qhull-2020.2
make -j CC=gcc-16 CXX=g++-16
sudo make install
cd ..
rm -rf qhull-2020-src-8.0.2.tgz qhull-2020.2

Install HDF5

curl -L https://support.hdfgroup.org/releases/hdf5/v1_14/v1_14_5/downloads/hdf5-1.14.5.tar.gz --output hdf5-1.14.5.tar.gz
tar -vxzf hdf5-1.14.5.tar.gz
cd hdf5-1.14.5
if [[ "${ver}" -eq 13 ]]; then
   # For MacOS 13 force use of the classic linker as the new linker does not support the '-commons' option - see https://trac.macports.org/ticket/68194#comment:15
   CC=gcc-16 CXX=g++-16 FC=gfortran-16 LDFLAGS=-Wl,-ld_classic ./configure --prefix=/usr/local --enable-fortran --enable-build-mode=production
else
   CC=gcc-16 CXX=g++-16 FC=gfortran-16                         ./configure --prefix=/usr/local --enable-fortran --enable-build-mode=production
fi
make -j3
sudo make install
cd ..
rm -rf hdf5-1.14.5 hdf5-1.14.5.tar.gz

Install FoX

curl -L https://github.com/galacticusorg/fox/archive/refs/tags/v4.1.3.tar.gz --output FoX-4.1.3.tar.gz
tar xvfz FoX-4.1.3.tar.gz
cd fox-4.1.3
FC=gfortran-16 ./configure --prefix=/usr/local
make -j
sudo make install
cd ..
rm -rf fox-4.1.3 FoX-4.1.3.tar.gz

Install FFTW3

curl -L ftp://ftp.fftw.org/pub/fftw/fftw-3.3.4.tar.gz --output fftw-3.3.4.tar.gz
tar xvfz fftw-3.3.4.tar.gz
cd fftw-3.3.4
F77=gfortran-16 CC=gcc-16 ./configure --prefix=/usr/local
make -j
sudo make install
cd ..
rm -rf fftw-3.3.4 fftw-3.3.4.tar.gz

Install ANN

curl -L http://www.cs.umd.edu/~mount/ANN/Files/1.1.2/ann_1.1.2.tar.gz --output ann_1.1.2.tar.gz
tar xvfz ann_1.1.2.tar.gz
cd ann_1.1.2
sed -E -i~ s/"C\+\+ = g\+\+"/"C\+\+ = g\+\+\-16"/ Make-config
make macosx-g++
sudo cp bin/* /usr/local/bin/.
sudo cp lib/* /usr/local/lib/.
sudo cp -R include/* /usr/local/include/.

Install Python dependencies

Galacticus uses Python during compilation to preprocess the source code, and ships various Python scripts under scripts/ for analysis and pipeline tasks. Python ≥ 3.9 is required.

The Python package galacticus (declared in the top-level pyproject.toml) installs the modules under python/ onto the Python import path together with their third-party dependencies — numpy, scipy, h5py, lxml, matplotlib, requests, PyYAML, GitPython, PyPDF2, termcolor — via a single editable install run from the cloned repository’s root:

pip3 install -e .

This is sufficient for compiling Galacticus and running its supporting scripts. Two optional extras are also available:

  • pip3 install -e '.[emulation]' — adds dependencies needed by the emulator pipelines under scripts/emulation/.

  • pip3 install -e '.[test]' — adds pytest for running the Python unit-test suite.

Install Galacticus

git clone https://github.com/galacticusorg/galacticus.git
cd galacticus
export GALACTICUS_EXEC_PATH=`pwd`
export FCCOMPILER=gfortran-16
export CCOMPILER=gcc-16
export CPPCOMPILER=g++-16
export LIBRARY_PATH=/Library/Developer/CommandLineTools/SDKs/MacOSX15.4.sdk/usr/lib
export GALACTICUS_FCFLAGS="-fintrinsic-modules-path /usr/local/include -fintrinsic-modules-path /usr/local/finclude -L/usr/local/lib -L$(brew --prefix)/lib -I/Library/Developer/CommandLineTools/SDKs/MacOSX15.4.sdk/usr/include"
if [[ "${ver}" -eq 13 ]]; then
    export GALACTICUS_FCFLAGS="$GALACTICUS_FCFLAGS -Wl,-ld_classic"
fi
export GALACTICUS_CFLAGS="-I/usr/local/include -I$(brew --prefix)/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX15.4.sdk/usr/include"
export GALACTICUS_CPPFLAGS="-I/usr/local/include -I$(brew --prefix)/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX15.4.sdk/usr/include"
make -j Galacticus.exe

Note

The macOS SDK version in these paths (MacOSX15.4.sdk) must be changed to match the SDK actually installed on your system. You can list the available SDKs under /Library/Developer/CommandLineTools/SDKs/.

Finally

Follow the instructions to download run-time datasets used by Galacticus. You may want to set the above environment variable exports in your ~/.zshenv so they are set automatically.