1 cmake_minimum_required(VERSION 2.8)
3 set(KCF_LIB_SRC kcf.cpp kcf.h fft.cpp threadctx.hpp pragmas.h dynmem.hpp)
5 find_package(PkgConfig)
7 SET(FFT "OpenCV" CACHE STRING "Select FFT implementation")
8 SET_PROPERTY(CACHE FFT PROPERTY STRINGS OpenCV fftw cuFFTW cuFFT)
9 MESSAGE(STATUS "FFT implementation: ${FFT}")
11 option(OPENMP "Use OpenMP library. Works with FFTW and OpenCV implementation." OFF)
12 option(ASYNC "Works only if OPENCV_CUFFT is not ON. Will enable C++ async directive." OFF)
13 option(CUDA_DEBUG "Enables error cheking for cuda and cufft. " OFF)
14 option(BIG_BATCH "Enable transforming all features from all scales together." OFF)
15 option(TEMPLATE_COMPLEXMAT "Use ComplexMat as abstract class." ON)
18 add_definitions(-DPROFILING )
19 MESSAGE(STATUS "Profiling mode")
23 add_definitions(-DBIG_BATCH )
24 MESSAGE(STATUS "Big_batch mode")
27 IF(TEMPLATE_COMPLEXMAT)
28 add_definitions(-DTEMPLATE_COMPLEXMAT )
29 MESSAGE(STATUS "ComplexMat abstract class version.")
34 IF(FFT STREQUAL "OpenCV")
35 list(APPEND KCF_LIB_SRC fft_opencv.cpp complexmat.hpp)
36 ELSEIF(FFT STREQUAL "fftw")
37 list(APPEND KCF_LIB_SRC fft_fftw.cpp complexmat.hpp)
38 add_definitions(-DFFTW)
39 pkg_check_modules(FFTW REQUIRED fftw3f)
40 ELSEIF(FFT STREQUAL "cuFFTW")
41 list(APPEND KCF_LIB_SRC fft_fftw.cpp complexmat.hpp)
42 add_definitions(-DFFTW -DCUFFTW)
44 ELSEIF(FFT STREQUAL "cuFFT")
45 list(APPEND KCF_LIB_SRC fft_cufft.cpp complexmat.cuh cuda_functions.cuh)
46 add_definitions(-DCUFFT)
49 add_definitions(-DCUDA_DEBUG)
50 MESSAGE(STATUS "CUDA debug mode")
53 MESSAGE(FATAL_ERROR "Invalid FFT implementation selected")
56 IF((FFT STREQUAL "OpenCV") AND BIG_BATCH)
57 message(SEND_ERROR "OpenCV version does not support big batch mode.")
60 IF((FFT STREQUAL "cuFFT") AND (ASYNC))
61 message(SEND_ERROR "cuFFT version does not support ASYNC and OpenMP only if used with big batch mode.")
65 add_definitions(-DASYNC)
66 MESSAGE(STATUS "ASYNC")
68 add_definitions(-DOPENMP)
69 MESSAGE(STATUS "OPENMP")
72 FIND_PACKAGE( OpenCV REQUIRED )
75 find_package(CUDA REQUIRED)
77 if (NOT ${OpenCV_USE_CUFFT})
78 message(SEND_ERROR "OpenCV was not built with cuFFT")
81 include_directories ( ${CUDA_INCLUDE_DIRS} )
82 set(CUDA_SEPARABLE_COMPILATION ON)
83 set(CUDA_PROPAGATE_HOST_FLAGS OFF)
84 set(CUDA_HOST_COMPILER /usr/bin/g++)
85 list( APPEND CUDA_NVCC_FLAGS -O3 --gpu-architecture sm_62 -std=c++11)
86 find_cuda_helper_libs(cufftw)
87 IF(FFT STREQUAL "cuFFT")
88 add_subdirectory(cuda)
89 cuda_add_library(complexmat complexmat.cu)
90 cuda_add_library(cuda_func cuda_functions.cu)
95 add_subdirectory(piotr_fhog)
98 add_library(kcf STATIC ${KCF_LIB_SRC})
99 IF(NOT TEMPLATE_COMPLEXMAT)
100 add_library(complexmat complexmat.cpp)
101 target_link_libraries(kcf fhog cndata complexmat ${OpenCV_LIBS})
103 target_link_libraries(kcf fhog cndata ${OpenCV_LIBS})
105 set_target_properties(kcf PROPERTIES VERSION 1.0.0 SOVERSION 1)
107 IF(FFT STREQUAL "fftw")
108 target_link_libraries(kcf ${FFTW_LDFLAGS})
110 target_link_libraries(kcf fftw3_omp)
112 target_link_libraries(kcf fftw3_threads)
116 IF(FFT STREQUAL "cuFFTW")
117 target_link_libraries(kcf ${CUDA_cufft_LIBRARY} ${CUDA_cufftw_LIBRARY})
120 IF(FFT STREQUAL "cuFFT")
121 target_link_libraries(kcf ${CUDA_cufft_LIBRARY} ${CUDA_LIBRARIES} complexmat cuda_func)
125 target_link_libraries(kcf pfm)