From 7fd3a8b553bc4391bc59b76803a9f1a0cbebcc20 Mon Sep 17 00:00:00 2001 From: Hyunsu Philip Cho Date: Tue, 25 Oct 2022 01:40:35 -0700 Subject: [PATCH 1/6] Add necessary flags to R package --- R-package/configure | 2 +- R-package/configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/R-package/configure b/R-package/configure index 154ed08fa047..064e00f9fd90 100755 --- a/R-package/configure +++ b/R-package/configure @@ -2710,7 +2710,7 @@ fi if test `uname -s` = "Darwin" then OPENMP_CXXFLAGS='-Xclang -fopenmp' - OPENMP_LIB='-lomp' + OPENMP_LIB='-I/opt/homebrew/opt/libomp/include -lomp -L/opt/homebrew/opt/libomp/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..fd74e1c7ad35 100644 --- a/R-package/configure.ac +++ b/R-package/configure.ac @@ -29,7 +29,7 @@ fi if test `uname -s` = "Darwin" then OPENMP_CXXFLAGS='-Xclang -fopenmp' - OPENMP_LIB='-lomp' + OPENMP_LIB='-I/opt/homebrew/opt/libomp/include -lomp -L/opt/homebrew/opt/libomp/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); ]])]) From ee9de94ad332e2ae338ca693a80acff631cf162f Mon Sep 17 00:00:00 2001 From: Hyunsu Philip Cho Date: Tue, 25 Oct 2022 01:45:47 -0700 Subject: [PATCH 2/6] Add extra flags to CMake --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 64aeae29c737..a6b9eb48c7fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -171,6 +171,10 @@ 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) + set(OpenMP_CXX_FLAGS + "-Xpreprocessor -fopenmp -I/opt/homebrew/opt/libomp/include") + set(OpenMP_CXX_LIB_NAMES omp) + set(OpenMP_omp_LIBRARY /opt/homebrew/opt/libomp/lib/libomp.dylib) endif (APPLE) find_package(OpenMP REQUIRED) endif (USE_OPENMP) From 22a7a5b5fe67e08fa08347f4ad7bb7fc05a57bd0 Mon Sep 17 00:00:00 2001 From: Hyunsu Philip Cho Date: Tue, 25 Oct 2022 01:55:27 -0700 Subject: [PATCH 3/6] Use extra paths only as fallback --- CMakeLists.txt | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a6b9eb48c7fd..6a0b082cf862 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -171,12 +171,21 @@ 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) - set(OpenMP_CXX_FLAGS - "-Xpreprocessor -fopenmp -I/opt/homebrew/opt/libomp/include") - set(OpenMP_CXX_LIB_NAMES omp) - set(OpenMP_omp_LIBRARY /opt/homebrew/opt/libomp/lib/libomp.dylib) - 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 + set(OpenMP_C_FLAGS + "-Xpreprocessor -fopenmp -I/opt/homebrew/opt/libomp/include") + set(OpenMP_CXX_FLAGS + "-Xpreprocessor -fopenmp -I/opt/homebrew/opt/libomp/include") + set(OpenMP_C_LIB_NAMES omp) + set(OpenMP_CXX_LIB_NAMES omp) + set(OpenMP_omp_LIBRARY /opt/homebrew/opt/libomp/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") From 1447cb30d7f7bdce1e950e62161330da6113d2df Mon Sep 17 00:00:00 2001 From: Hyunsu Cho Date: Tue, 25 Oct 2022 02:15:40 -0700 Subject: [PATCH 4/6] Fetch correct libomp path from Homebrew --- CMakeLists.txt | 9 ++++++--- R-package/configure | 5 +++-- R-package/configure.ac | 5 +++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a0b082cf862..d2746176f185 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -174,13 +174,16 @@ if (USE_OPENMP) 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/opt/homebrew/opt/libomp/include") + "-Xpreprocessor -fopenmp -I${HOMEBREW_LIBOMP_PREFIX}/include") set(OpenMP_CXX_FLAGS - "-Xpreprocessor -fopenmp -I/opt/homebrew/opt/libomp/include") + "-Xpreprocessor -fopenmp -I${HOMEBREW_LIBOMP_PREFIX}/include") set(OpenMP_C_LIB_NAMES omp) set(OpenMP_CXX_LIB_NAMES omp) - set(OpenMP_omp_LIBRARY /opt/homebrew/opt/libomp/lib/libomp.dylib) + set(OpenMP_omp_LIBRARY ${HOMEBREW_LIBOMP_PREFIX}/lib/libomp.dylib) find_package(OpenMP REQUIRED) endif () else () diff --git a/R-package/configure b/R-package/configure index 064e00f9fd90..64700b35568e 100755 --- a/R-package/configure +++ b/R-package/configure @@ -2709,8 +2709,9 @@ fi if test `uname -s` = "Darwin" then - OPENMP_CXXFLAGS='-Xclang -fopenmp' - OPENMP_LIB='-I/opt/homebrew/opt/libomp/include -lomp -L/opt/homebrew/opt/libomp/lib' + HOMEBREW_LIBOMP_PREFIX=`brew --prefix libomp` + 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 fd74e1c7ad35..c73fecd3426e 100644 --- a/R-package/configure.ac +++ b/R-package/configure.ac @@ -28,8 +28,9 @@ fi if test `uname -s` = "Darwin" then - OPENMP_CXXFLAGS='-Xclang -fopenmp' - OPENMP_LIB='-I/opt/homebrew/opt/libomp/include -lomp -L/opt/homebrew/opt/libomp/lib' + HOMEBREW_LIBOMP_PREFIX=`brew --prefix libomp` + 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); ]])]) From 60453919e3a95029bfad0658be8d934d986ddc3c Mon Sep 17 00:00:00 2001 From: Hyunsu Philip Cho Date: Tue, 25 Oct 2022 02:49:29 -0700 Subject: [PATCH 5/6] Gracefully fail when Homebrew is not installed --- R-package/configure | 7 ++++++- R-package/configure.ac | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/R-package/configure b/R-package/configure index 64700b35568e..5ec4052051fd 100755 --- a/R-package/configure +++ b/R-package/configure @@ -2709,7 +2709,12 @@ fi if test `uname -s` = "Darwin" then - HOMEBREW_LIBOMP_PREFIX=`brew --prefix libomp` + if command -v brew &> /dev/null + 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 diff --git a/R-package/configure.ac b/R-package/configure.ac index c73fecd3426e..c2c698de34c4 100644 --- a/R-package/configure.ac +++ b/R-package/configure.ac @@ -28,7 +28,12 @@ fi if test `uname -s` = "Darwin" then - HOMEBREW_LIBOMP_PREFIX=`brew --prefix libomp` + if command -v brew &> /dev/null + 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 From a78726798ab123113f1bde4b89ac91bcefc1528f Mon Sep 17 00:00:00 2001 From: Hyunsu Cho Date: Tue, 25 Oct 2022 02:51:41 -0700 Subject: [PATCH 6/6] Fix typo --- R-package/configure | 1 + R-package/configure.ac | 1 + 2 files changed, 2 insertions(+) diff --git a/R-package/configure b/R-package/configure index 5ec4052051fd..5092cbdf62b9 100755 --- a/R-package/configure +++ b/R-package/configure @@ -2710,6 +2710,7 @@ fi if test `uname -s` = "Darwin" then if command -v brew &> /dev/null + then HOMEBREW_LIBOMP_PREFIX=`brew --prefix libomp` else # Homebrew not found diff --git a/R-package/configure.ac b/R-package/configure.ac index c2c698de34c4..fc36207b3d98 100644 --- a/R-package/configure.ac +++ b/R-package/configure.ac @@ -29,6 +29,7 @@ fi if test `uname -s` = "Darwin" then if command -v brew &> /dev/null + then HOMEBREW_LIBOMP_PREFIX=`brew --prefix libomp` else # Homebrew not found