mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-29 08:34:37 +08:00
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:
+17
-23
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user