]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/commitdiff
Fix OpenMP linking
authorMichal Sojka <michal.sojka@cvut.cz>
Tue, 25 Sep 2018 06:01:34 +0000 (08:01 +0200)
committerMichal Sojka <michal.sojka@cvut.cz>
Tue, 25 Sep 2018 11:18:29 +0000 (13:18 +0200)
- Move OpenMP compilation handling to kcf library
- After we added a call to omp_omp_set_num_threads(), we must properly
  link the kcf_vot with OpenMP libraries. CMake (especially older
  versions) seems to fail doing this properly automatically.

CMakeLists.txt
src/CMakeLists.txt

index c5f0c7e0337e04762ad89a190d37d9a1eee845a4..28062bd5b359f926eae1b523508de166473baa94 100644 (file)
@@ -15,18 +15,8 @@ endif()
 
 FIND_PACKAGE( OpenCV REQUIRED )
 link_directories ( ${OpenCV_LIB_DIR} )
-MESSAGE(STATUS "OpenCV_LIB_DIR: ${OpenCV_LIB_DIR} ")
-
-IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
-  IF(NOT OPENMP)
-    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -Wno-unknown-pragmas")
-  ELSE()
-    MESSAGE(STATUS "OpenMP")
-    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
-  ENDIF() #ASYNC
-ENDIF ()
-
 include_directories ( ${OpenCV_INCLUDE_DIRS} )
+MESSAGE(STATUS "OpenCV_LIB_DIR: ${OpenCV_LIB_DIR} ")
 MESSAGE(STATUS "OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}")
 
 INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR}/)
index 886027b9bb5a7aa1cd6f287d5b4481a6d9e19533..eb576a7677e25f43d92b95f0ac322409aadba03d 100644 (file)
@@ -23,6 +23,10 @@ IF(BIG_BATCH)
   MESSAGE(STATUS "Big_batch mode")
 ENDIF()
 
+IF (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") AND NOT OPENMP)
+  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas")
+ENDIF()
+
 SET(use_cuda OFF)
 
 IF(FFT STREQUAL "OpenCV")
@@ -57,10 +61,11 @@ ENDIF()
 
 IF(ASYNC)
   add_definitions(-DASYNC)
+  find_package(Threads REQUIRED)
   MESSAGE(STATUS "ASYNC")
 ELSEIF(OPENMP)
-    add_definitions(-DOPENMP)
-    MESSAGE(STATUS "OPENMP")
+  add_definitions(-DOPENMP)
+  FIND_PACKAGE(OpenMP REQUIRED CXX)
 ENDIF() #ASYNC
 
 FIND_PACKAGE( OpenCV REQUIRED )
@@ -118,3 +123,20 @@ ENDIF()
 IF(PROFILING)
   target_link_libraries(kcf pfm)
 ENDIF()
+
+IF(OPENMP)
+  target_compile_options(kcf PUBLIC ${OpenMP_CXX_FLAGS})
+  target_link_libraries(kcf ${OpenMP_CXX_LIB_NAMES})
+  target_link_libraries(kcf ${OpenMP_omp_LIBRARY})
+  if (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") AND NOT OpenMP_CXX_LIB_NAMES)
+    # Older cmake does not set OpenMP_CXX_LIB_NAMES so hardcode it here
+    target_link_libraries(kcf gomp)
+  endif()
+ENDIF()
+
+if(THREADS_HAVE_PTHREAD_ARG)
+  target_compile_options(kcf PUBLIC "-pthread")
+endif()
+if(CMAKE_THREAD_LIBS_INIT)
+  target_link_libraries(kcf "${CMAKE_THREAD_LIBS_INIT}")
+endif()