diff --git a/CMakeLists.txt b/CMakeLists.txt index 64aeae29c737..d2746176f185 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -171,8 +171,24 @@ if (USE_OPENMP) # Require CMake 3.16+ on Mac OSX, as previous versions of CMake had trouble locating # OpenMP on Mac. See https://github.com/dmlc/xgboost/pull/5146#issuecomment-568312706 cmake_minimum_required(VERSION 3.16) - endif (APPLE) - find_package(OpenMP REQUIRED) + find_package(OpenMP) + if (NOT OpenMP_FOUND) + # Try again with extra path info; required for libomp 15+ from Homebrew + execute_process(COMMAND brew --prefix libomp + OUTPUT_VARIABLE HOMEBREW_LIBOMP_PREFIX + OUTPUT_STRIP_TRAILING_WHITESPACE) + set(OpenMP_C_FLAGS + "-Xpreprocessor -fopenmp -I${HOMEBREW_LIBOMP_PREFIX}/include") + set(OpenMP_CXX_FLAGS + "-Xpreprocessor -fopenmp -I${HOMEBREW_LIBOMP_PREFIX}/include") + set(OpenMP_C_LIB_NAMES omp) + set(OpenMP_CXX_LIB_NAMES omp) + set(OpenMP_omp_LIBRARY ${HOMEBREW_LIBOMP_PREFIX}/lib/libomp.dylib) + find_package(OpenMP REQUIRED) + endif () + else () + find_package(OpenMP REQUIRED) + endif () endif (USE_OPENMP) #Add for IBM i if (${CMAKE_SYSTEM_NAME} MATCHES "OS400") diff --git a/R-package/configure b/R-package/configure index 154ed08fa047..5092cbdf62b9 100755 --- a/R-package/configure +++ b/R-package/configure @@ -2709,8 +2709,15 @@ fi if test `uname -s` = "Darwin" then - OPENMP_CXXFLAGS='-Xclang -fopenmp' - OPENMP_LIB='-lomp' + if command -v brew &> /dev/null + then + HOMEBREW_LIBOMP_PREFIX=`brew --prefix libomp` + else + # Homebrew not found + HOMEBREW_LIBOMP_PREFIX='' + fi + OPENMP_CXXFLAGS="-Xpreprocessor -fopenmp -I${HOMEBREW_LIBOMP_PREFIX}/include" + OPENMP_LIB="-lomp -L${HOMEBREW_LIBOMP_PREFIX}/lib" ac_pkg_openmp=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether OpenMP will work in a package" >&5 $as_echo_n "checking whether OpenMP will work in a package... " >&6; } diff --git a/R-package/configure.ac b/R-package/configure.ac index 8be57fee79f3..fc36207b3d98 100644 --- a/R-package/configure.ac +++ b/R-package/configure.ac @@ -28,8 +28,15 @@ fi if test `uname -s` = "Darwin" then - OPENMP_CXXFLAGS='-Xclang -fopenmp' - OPENMP_LIB='-lomp' + if command -v brew &> /dev/null + then + HOMEBREW_LIBOMP_PREFIX=`brew --prefix libomp` + else + # Homebrew not found + HOMEBREW_LIBOMP_PREFIX='' + fi + OPENMP_CXXFLAGS="-Xpreprocessor -fopenmp -I${HOMEBREW_LIBOMP_PREFIX}/include" + OPENMP_LIB="-lomp -L${HOMEBREW_LIBOMP_PREFIX}/lib" ac_pkg_openmp=no AC_MSG_CHECKING([whether OpenMP will work in a package]) AC_LANG_CONFTEST([AC_LANG_PROGRAM([[#include ]], [[ return (omp_get_max_threads() <= 1); ]])])