Use find module to link against OpenMP
Depending on the compiler in use, linking against OpenMP may require
passing specific compiler flags instead of linking against a library.
Use the CMake OpenMP find module to abstract OpenMP activation.
Change-Id: Ib43f576ac12e2c5e9598e9586df3dfa018e9c08b
diff --git a/cmake/CeresConfig.cmake.in b/cmake/CeresConfig.cmake.in
index 028eabb..06f0fdd 100644
--- a/cmake/CeresConfig.cmake.in
+++ b/cmake/CeresConfig.cmake.in
@@ -180,6 +180,7 @@
# Optional dependencies
@SuiteSparse_DEPENDENCY@
+@OpenMP_DEPENDENCY@
# As imported CMake targets are not re-exported when a dependent target is
# exported, we must invoke find_package(XXX) here to reload the definition
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index ace75db..d6babfb 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -33,11 +33,14 @@
if (CERES_THREADING_MODEL STREQUAL "CXX_THREADS")
set(CERES_PARALLEL_FOR_SRC parallel_for_cxx.cc thread_pool.cc)
elseif (CERES_THREADING_MODEL STREQUAL "OPENMP")
+ # OpenMP requires linking to the corresponding library.
+ find_package(OpenMP REQUIRED COMPONENTS CXX)
+
set(CERES_PARALLEL_FOR_SRC parallel_for_openmp.cc)
- if (CMAKE_COMPILER_IS_GNUCXX)
- # OpenMP in GCC requires the GNU OpenMP library.
- list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES gomp)
- endif()
+ list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES OpenMP::OpenMP_CXX)
+
+ # Make dependency visible to the parent CMakeLists.txt
+ set(OpenMP_DEPENDENCY "find_dependency (OpenMP ${OpenMP_CXX_VERSION} COMPONENTS CXX)" PARENT_SCOPE)
elseif (CERES_THREADING_MODEL STREQUAL "NO_THREADS")
set(CERES_PARALLEL_FOR_SRC parallel_for_nothreads.cc)
endif()