Enable support for OpenMP in Clang if detected.

- Previously we disabled OpenMP if Clang was detected, as it did not
  support it.  However as of Clang 3.8 (and potentially Xcode 8) OpenMP
  is supported.

Change-Id: Ia39dac9fe746f1fc6310e08553f85f3c37349707
This commit is contained in:
Alex Stewart
2016-07-10 14:13:51 +01:00
parent f6df6c05dd
commit edbd48ab50
2 changed files with 22 additions and 25 deletions
+17 -23
View File
@@ -400,31 +400,25 @@ if (NOT CUSTOM_BLAS)
endif (NOT CUSTOM_BLAS)
if (OPENMP)
# Clang does not (yet) support OpenMP.
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# Find quietly, as we can continue without OpenMP if it is not found.
find_package(OpenMP QUIET)
if (OPENMP_FOUND)
message("-- Building with OpenMP.")
list(APPEND CERES_COMPILE_OPTIONS CERES_USE_OPENMP)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
if (UNIX)
# At least on Linux, we need pthreads to be enabled for mutex to
# compile. This may not work on Windows or Android.
find_package(Threads REQUIRED)
list(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_PTHREAD)
list(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_RWLOCK)
endif (UNIX)
else (OPENMP_FOUND)
message("-- Failed to find OpenMP, disabling. This is expected on "
"Clang < 3.8, and at least Xcode <= 7.")
update_cache_variable(OPENMP OFF)
message("-- Compiler is Clang, disabling OpenMP.")
list(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS)
else (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# Find quietly s/t as we can continue without OpenMP if it is not found.
find_package(OpenMP QUIET)
if (OPENMP_FOUND)
message("-- Building with OpenMP.")
list(APPEND CERES_COMPILE_OPTIONS CERES_USE_OPENMP)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
if (UNIX)
# At least on Linux, we need pthreads to be enabled for mutex to
# compile. This may not work on Windows or Android.
find_package(Threads REQUIRED)
list(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_PTHREAD)
list(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_RWLOCK)
endif (UNIX)
else (OPENMP_FOUND)
message("-- Failed to find OpenMP, disabling.")
update_cache_variable(OPENMP OFF)
list(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS)
endif (OPENMP_FOUND)
endif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
endif (OPENMP_FOUND)
else (OPENMP)
message("-- Building without OpenMP (disabling multithreading).")
list(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS)
+5 -2
View File
@@ -152,10 +152,13 @@ if (BLAS_FOUND AND LAPACK_FOUND)
endif (BLAS_FOUND AND LAPACK_FOUND)
if (OPENMP_FOUND)
if (NOT MSVC)
# OpenMP support in Clang requires a non-GNU OpenMP library.
if (CMAKE_COMPILER_IS_GNUCXX)
list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES gomp)
endif()
if (NOT MSVC)
list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${CMAKE_THREAD_LIBS_INIT})
endif (NOT MSVC)
endif()
endif (OPENMP_FOUND)
set(CERES_LIBRARY_SOURCE