]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blobdiff - src/CMakeLists.txt
cmake: Compile CUDA version without intermediate kcfcuda library
[hercules2020/kcf.git] / src / CMakeLists.txt
index 257d651d6c5df6ba1345df59914babb671db94f4..0f734a08052aa6314631a8e960c60d7e8229aa0a 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")
@@ -36,7 +40,7 @@ ELSEIF(FFT STREQUAL "cuFFTW")
   add_definitions(-DFFTW -DCUFFTW)
   set(use_cuda ON)
 ELSEIF(FFT STREQUAL "cuFFT")
-    list(APPEND KCF_LIB_SRC fft_cufft.cpp complexmat.cuh cuda_functions.cuh)
+    list(APPEND KCF_LIB_SRC fft_cufft.cpp complexmat.cuh cuda_functions.cuh complexmat.cu cuda_functions.cu)
     add_definitions(-DCUFFT)
     set(use_cuda ON)
     iF(CUDA_DEBUG)
@@ -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 )
@@ -80,18 +85,19 @@ IF(use_cuda)
   CUDA_SELECT_NVCC_ARCH_FLAGS(ARCH_FLAGS ${CUDA_ARCH_LIST})
   list( APPEND CUDA_NVCC_FLAGS -O3 -std=c++11 ${ARCH_FLAGS} --default-stream per-thread) # --gpu-architecture sm_62 )
   find_cuda_helper_libs(cufftw)
-  IF(FFT STREQUAL "cuFFT")
-    cuda_add_library(kcfcuda complexmat.cu cuda_functions.cu)
-  ENDIF()
-
 ENDIF()
 
 add_subdirectory(piotr_fhog)
 add_subdirectory(cn)
 
-add_library(kcf STATIC ${KCF_LIB_SRC})
+if(FFT STREQUAL "cuFFT")
+  cuda_add_library(kcf STATIC ${KCF_LIB_SRC})
+else()
+  add_library(kcf STATIC ${KCF_LIB_SRC})
+endif()
+
 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-  set_property(TARGET kcf APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-gnu-zero-variadic-macro-arguments ")
+  target_compile_options(kcf PRIVATE -Wno-gnu-zero-variadic-macro-arguments)
 endif()
 
 
@@ -102,7 +108,7 @@ IF(FFT STREQUAL "fftw")
   target_link_libraries(kcf ${FFTW_LDFLAGS})
   IF(OPENMP)
     target_link_libraries(kcf fftw3_omp)
-  ELSEIF(NOT ASYNC)
+  ELSE()
     target_link_libraries(kcf fftw3_threads)
   ENDIF()
 ENDIF() #FFTW
@@ -112,9 +118,26 @@ IF(FFT STREQUAL "cuFFTW")
 ENDIF() #cuFFTW
 
 IF(FFT STREQUAL "cuFFT")
-    target_link_libraries(kcf kcfcuda ${CUDA_cufft_LIBRARY} ${CUDA_cublas_LIBRARY} ${CUDA_LIBRARIES})
+    target_link_libraries(kcf ${CUDA_cufft_LIBRARY} ${CUDA_cublas_LIBRARY} ${CUDA_LIBRARIES})
 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()