From b96849918d802f750657b3dc3d17324e070993a2 Mon Sep 17 00:00:00 2001 From: Tsukasa OMOTO Date: Sat, 26 Jan 2019 13:40:59 +0900 Subject: [PATCH] Fix build on macOS Mojave (#1923) * Fix build on macOS Mojave Fixed #1898 - https://iscinumpy.gitlab.io/post/omp-on-high-sierra/ - https://cliutils.gitlab.io/modern-cmake/chapters/packages/OpenMP.html - https://github.com/Homebrew/homebrew-core/pull/20589 * update setup.py * update docs * fix setup.py * update docs * update docs * update setup.py * update docs --- CMakeLists.txt | 4 ++-- docs/Installation-Guide.rst | 25 +++++++++++++++++++++++++ python-package/setup.py | 14 ++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 057302ba9..6941cbb7e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -211,8 +211,8 @@ endif(USE_MPI) if(USE_OPENMP) if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") - TARGET_LINK_LIBRARIES(lightgbm ${OpenMP_libomp_LIBRARY}) - TARGET_LINK_LIBRARIES(_lightgbm ${OpenMP_libomp_LIBRARY}) + TARGET_LINK_LIBRARIES(lightgbm OpenMP::OpenMP_CXX) + TARGET_LINK_LIBRARIES(_lightgbm OpenMP::OpenMP_CXX) endif() endif(USE_OPENMP) diff --git a/docs/Installation-Guide.rst b/docs/Installation-Guide.rst index 0ec0493b4..5fc3801d7 100644 --- a/docs/Installation-Guide.rst +++ b/docs/Installation-Guide.rst @@ -146,7 +146,19 @@ Only **Apple Clang** version 8.1 or higher is supported. git clone --recursive https://github.com/Microsoft/LightGBM ; cd LightGBM mkdir build ; cd build + + # For Mojave (10.14) + cmake \ + -DOpenMP_C_FLAGS="-Xpreprocessor -fopenmp -I$(brew --prefix libomp)/include" \ + -DOpenMP_C_LIB_NAMES="omp" \ + -DOpenMP_CXX_FLAGS="-Xpreprocessor -fopenmp -I$(brew --prefix libomp)/include" \ + -DOpenMP_CXX_LIB_NAMES="omp" \ + -DOpenMP_omp_LIBRARY=$(brew --prefix libomp)/lib/libomp.dylib \ + .. + + # For High Sierra or earlier (<= 10.13) cmake .. + make -j4 gcc @@ -436,7 +448,20 @@ Only **Apple Clang** version 8.1 or higher is supported. git clone --recursive https://github.com/Microsoft/LightGBM ; cd LightGBM mkdir build ; cd build + + # For Mojave (10.14) + cmake \ + -DUSE_MPI=ON \ + -DOpenMP_C_FLAGS="-Xpreprocessor -fopenmp -I$(brew --prefix libomp)/include" \ + -DOpenMP_C_LIB_NAMES="omp" \ + -DOpenMP_CXX_FLAGS="-Xpreprocessor -fopenmp -I$(brew --prefix libomp)/include" \ + -DOpenMP_CXX_LIB_NAMES="omp" \ + -DOpenMP_omp_LIBRARY=$(brew --prefix libomp)/lib/libomp.dylib \ + .. + + # For High Sierra or earlier (<= 10.13) cmake -DUSE_MPI=ON .. + make -j4 gcc diff --git a/python-package/setup.py b/python-package/setup.py index 671d9e871..fa186bfc1 100644 --- a/python-package/setup.py +++ b/python-package/setup.py @@ -118,8 +118,22 @@ def compile_cpp(use_mingw=False, use_gpu=False, use_mpi=False, nomp=False, cmake_cmd.append("-DUSE_MPI=ON") if nomp: cmake_cmd.append("-DUSE_OPENMP=OFF") + if system() == 'Darwin' and not nomp: + cc = os.environ.get('CC') + cxx = os.environ.get('CXX') + if not (cc and cc.startswith('gcc') and cxx and cxx.startswith('g++')): + # Apple Clang + # https://github.com/Homebrew/homebrew-core/pull/20589 + cmake_cmd.extend([ + '-DOpenMP_C_FLAGS=-Xpreprocessor -fopenmp -I/usr/local/opt/libomp/include', + '-DOpenMP_C_LIB_NAMES=omp', + '-DOpenMP_CXX_FLAGS=-Xpreprocessor -fopenmp -I/usr/local/opt/libomp/include', + '-DOpenMP_CXX_LIB_NAMES=omp', + '-DOpenMP_omp_LIBRARY=/usr/local/opt/libomp/lib/libomp.dylib' + ]) if use_hdfs: cmake_cmd.append("-DUSE_HDFS=ON") + if system() in ('Windows', 'Microsoft'): if use_mingw: if use_mpi: