Add docs explaining how to build Ceres with OpenMP on OS X. Change-Id: If45c12876dc58a042bbdf017de77003a161dc16c
diff --git a/CMakeLists.txt b/CMakeLists.txt index 087f227..be553d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -421,7 +421,8 @@ endif (UNIX) else (OPENMP_FOUND) message("-- Failed to find OpenMP, disabling. This is expected on " - "Clang < 3.8, and at least Xcode <= 7.") + "Clang < 3.8, and at least Xcode <= 8. See Ceres documentation for " + "instructions to build with LLVM from Homebrew to enable OpenMP on OS X.") update_cache_variable(OPENMP OFF) list(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS) endif (OPENMP_FOUND)
diff --git a/docs/source/installation.rst b/docs/source/installation.rst index 1479aca..3d34ee7 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst
@@ -301,6 +301,46 @@ # documentation for the EXPORT_BUILD_DIR option for more information. make install +Building with OpenMP on OS X +---------------------------- + +Up to at least Xcode 8, OpenMP support was disabled in Apple's version of +Clang. However, you can install the latest version of the LLVM toolchain +from Homebrew which does support OpenMP, and thus build Ceres with OpenMP +support on OS X. To do this, you must install llvm via Homebrew: + +.. code-block:: bash + + # Install latest version of LLVM toolchain. + brew install llvm + +As the LLVM formula in Homebrew is keg-only, it will not be installed to +``/usr/local`` to avoid conflicts with the standard Apple LLVM toolchain. +To build Ceres with the Homebrew LLVM toolchain you should do the +following: + +.. code-block:: bash + + tar zxf ceres-solver-1.13.0.tar.gz + mkdir ceres-bin + cd ceres-bin + # Configure the local shell only (not persistent) to use the Homebrew LLVM + # toolchain in favour of the default Apple version. This is taken + # verbatim from the instructions output by Homebrew when installing the + # llvm formula. + export LDFLAGS="-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib" + export CPPFLAGS="-I/usr/local/opt/llvm/include" + export PATH="/usr/local/opt/llvm/bin:$PATH" + # Force CMake to use the Homebrew version of Clang. OpenMP will be + # automatically enabled if it is detected that the compiler supports it. + cmake -DCMAKE_C_COMPILER=/usr/local/opt/llvm/bin/clang -DCMAKE_CXX_COMPILER=/usr/local/opt/llvm/bin/clang++ ../ceres-solver-1.13.0 + make -j3 + make test + # Optionally install Ceres. It can also be exported using CMake which + # allows Ceres to be used without requiring installation. See the + # documentation for the EXPORT_BUILD_DIR option for more information. + make install + Like the Linux build, you should now be able to run ``bin/simple_bundle_adjuster``.