Compiling OpenMP libraries on macOS

In QuTiP we have some optional OpenMP components, which can be used if the C extensions are built with OpenMP support at compile time. Typically this should be achievable just by adding the -fopenmp flag at compile and link time, but unfortunately the llvm clang distribution that Apple ship with macOS is not built with OpenMP support.

We can solve this by installing a fully-functional form of gcc from Homebrew (or any other method). My current gcc is version 9.3, which is installed in prefix /usr/local/opt/gcc. This now allows the -fopenmp flag and can compile simple OpenMP-enabled executables, but dynamically linked libraries will fail at runtime, failing to find various symbols such as _GOMP_parallel. This is because gcc will call Apple’s linker, which obviously will not know about the additional libraries. We point ld to include the correct runtime directories with the -rpath linker directive and link the gomp library, setting for example

$ LDFLAGS="-lgomp -Wl,-rpath,${GCCPREFIX}/lib/gcc/9"

where ${GCCPREFIX} is as defined above, and the version at the end will change depending on your gcc version.