From: Michal Sojka Date: Tue, 25 Sep 2018 06:01:34 +0000 (+0200) Subject: Fix OpenMP linking X-Git-Url: http://rtime.felk.cvut.cz/gitweb/hercules2020/kcf.git/commitdiff_plain/d5dee7334097405a90084e2d91e183fcebaf0623 Fix OpenMP linking - 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. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index c5f0c7e..28062bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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}/) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 886027b..eb576a7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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()