For those impatient, skip to how to enable OpenMP in packages.
Apple has explicitly disabled OpenMP support in compilers that they ship in Xcode:
$ clang -c omp.c -fopenmp clang: error: unsupported option '-fopenmp'even though clang had OpenMP support for quite a long time now (great thanks to the folks at Intel providing their library as open source!). In fact, the clang compiler in Xcode can generate all the necessary code for OpenMP. It can be tricked into performing its designed function by using -Xclang -fopenmp flags.
The unfortunate part about this is that Apple is not shipping the necesssary libomp.dylib run-time library needed for OpenMP support. To make things worse, the version of the library you need depends on the clang version used, which Apple obfuscates so that it's non-trivial to reverse-engineer it. Fortunately, some clever folks were able to find the traces in Apple's released source so we can build the binaries that correspond to the clang version used. It is sometimes possible to use a more recent version of the runtime than the version of Apple clang.
curl -O https://mac.r-project.org/openmp/openmp-9.0.1-darwin17-Release.tar.gz
sudo tar fvx openmp-9.0.1-darwin17-Release.tar.gz -C /
The contained set of files is the same in all tar balls:
usr/local/lib/libomp.dylib
usr/local/include/ompt.h
usr/local/include/omp.h
usr/local/include/omp-tools.h
so you can simply remove those to uninstall. Note that any package
you compile against libomp.dylib will need that run-time
so you have to ship it with your package or have users install it.
| Build | Download | SHA1 checksum |
|---|---|---|
| LLVM 10.0.0 Xcode 12+ |
openmp-10.0.0-darwin17-Release.tar.gz (Release) openmp-10.0.0-darwin17-Debug.tar.gz (Debug) |
9bf16a64ab747528c5de7005a1ea1a9e318b3cf0 d4508d3f0c2952c3f984393b088e0b4beab33b58 |
| LLVM 9.0.1 Xcode 11.4 and up (Apple clang 1103.x) |
openmp-9.0.1-darwin17-Release.tar.gz (Release) openmp-9.0.1-darwin17-Debug.tar.gz (Debug) |
e5bd8501a3f957b4babe27b0a266d4fa15dbc23f c4c8491631504fb060f7c25ec14324d02d617d5b |
| LLVM 8.0.1 Xcode 11.0-11.3.1 (Apple clang 1100.x) |
openmp-8.0.1-darwin17-Release.tar.gz (Release) openmp-8.0.1-darwin17-Debug.tar.gz (Debug) |
e4612bfcb1bf520bf22844f7db764cadb7577c28 d6c83918b28405d43950d4b864ca8d1687eed4d1 |
| LLVM 7.1.0 Xcode 10.2-10.3 (Apple clang 1001.x) |
openmp-7.1.0-darwin17-Release.tar.gz (Release) openmp-7.1.0-darwin17-Debug.tar.gz (Debug) |
6891ff6f83f2ed83eeed42160de819b50cf643cd 34456adde62b9a1047f906e1d7f54990a1c15a34 |
PKG_CPPFLAGS='-Xclang -fopenmp' PKG_LIBS=-lomp R CMD INSTALL myPackage
If that doesn't work, please consult the package's documentation, and
liaise with its maintainer.
It is also possible to add those flags globally by
adding the following to ~/.R/Makevars:
CPPFLAGS += -Xclang -fopenmp
LDFLAGS += -lomp
but be very careful when doing this, always check
your ~/.R/Makevars whenever you upgrade R, macOS or Xcode.
Last modified on 2020/05/01 by Simon Urbanek