]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blob - src/CMakeLists.txt
Merge branch 'master' of https://github.com/Shanigen/kcf
[hercules2020/kcf.git] / src / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.8)
2
3 set(KCF_LIB_SRC kcf.cpp kcf.h fft.cpp)
4
5 find_package(PkgConfig)
6
7 SET(FFT "OpenCV" CACHE STRING "Select FFT implementation")
8 SET_PROPERTY(CACHE FFT PROPERTY STRINGS OpenCV OpenCV_cuFFT fftw cuFFTW cuFFT)
9 MESSAGE(STATUS "FFT implementation: ${FFT}")
10
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(BIG_BATCH "Enable transforming all features from all scales together." OFF)
14 option(TEMPLATE_COMPLEXMAT "Use ComplexMat as abstract class." ON)
15
16 IF(PROFILING)
17   add_definitions(-DPROFILING )
18   MESSAGE(STATUS "Profiling mode")
19 ENDIF()
20
21 IF(BIG_BATCH)
22   add_definitions(-DBIG_BATCH )
23   MESSAGE(STATUS "Big_batch mode")
24 ENDIF()
25
26 IF(TEMPLATE_COMPLEXMAT)
27   add_definitions(-DTEMPLATE_COMPLEXMAT )
28   MESSAGE(STATUS "ComplexMat abstract class version.")
29 ENDIF()
30
31 SET(use_cuda OFF)
32
33 IF(FFT STREQUAL "OpenCV")
34   list(APPEND KCF_LIB_SRC fft_opencv.cpp complexmat.hpp)
35 ELSEIF(FFT STREQUAL "OpenCV_cuFFT")
36   list(APPEND KCF_LIB_SRC fft_opencv_cuda.cpp complexmat.hpp)
37   add_definitions(-DOPENCV_CUFFT)
38   set(use_cuda ON)
39 ELSEIF(FFT STREQUAL "fftw")
40   list(APPEND KCF_LIB_SRC fft_fftw.cpp complexmat.hpp)
41   add_definitions(-DFFTW)
42   pkg_check_modules(FFTW REQUIRED fftw3f)
43 ELSEIF(FFT STREQUAL "cuFFTW")
44   list(APPEND KCF_LIB_SRC fft_fftw.cpp complexmat.hpp)
45   add_definitions(-DFFTW -DCUFFTW)
46   set(use_cuda ON)
47 ELSEIF(FFT STREQUAL "cuFFT")
48     list(APPEND KCF_LIB_SRC fft_cufft.cpp complexmat.cuh cuda_functions.cuh)
49     add_definitions(-DCUFFT)
50     set(use_cuda ON)
51 ELSE()
52   MESSAGE(FATAL_ERROR "Invalid FFT implementation selected")
53 ENDIF()
54
55 IF((FFT STREQUAL "OpenCV") AND BIG_BATCH)
56   message(SEND_ERROR "OpenCV version does not support big batch mode.")
57 ENDIF()
58
59 IF((FFT STREQUAL "cuFFT") AND (ASYNC OR (OPENMP AND NOT BIG_BATCH)))
60   message(SEND_ERROR "cuFFT version does not support ASYNC and OpenMP only if used with big batch mode.")
61 ENDIF()
62
63 IF(ASYNC AND NOT OPENMP)
64   add_definitions(-DASYNC)
65   MESSAGE(STATUS "ASYNC")
66 ENDIF() #ASYNC
67
68 FIND_PACKAGE( OpenCV REQUIRED )
69
70 IF(use_cuda)
71   find_package(CUDA REQUIRED)
72
73   if (NOT ${OpenCV_USE_CUFFT})
74     message(SEND_ERROR "OpenCV was not built with cuFFT")
75   endif()
76
77   include_directories ( ${CUDA_INCLUDE_DIRS} )
78   set(CUDA_SEPARABLE_COMPILATION ON)
79   set(CUDA_PROPAGATE_HOST_FLAGS OFF)
80   set(CUDA_HOST_COMPILER /usr/bin/g++)
81   list( APPEND CUDA_NVCC_FLAGS -O3 --gpu-architecture sm_62 -std=c++11 -default-stream per-thread)
82   find_cuda_helper_libs(cufftw)
83   IF(FFT STREQUAL "cuFFT")
84   add_subdirectory(cuda)
85   cuda_add_library(complexmat complexmat.cu)
86   cuda_add_library(cuda_func cuda_functions.cu)
87   ENDIF()
88
89 ENDIF()
90
91 add_subdirectory(piotr_fhog)
92 add_subdirectory(cn)
93
94 add_library(kcf STATIC ${KCF_LIB_SRC})
95 IF(NOT TEMPLATE_COMPLEXMAT)
96     add_library(complexmat complexmat.cpp)
97     target_link_libraries(kcf fhog cndata complexmat ${OpenCV_LIBS})
98 ELSE()
99     target_link_libraries(kcf fhog cndata ${OpenCV_LIBS})
100 ENDIF()
101 set_target_properties(kcf PROPERTIES VERSION 1.0.0 SOVERSION 1)
102
103 IF(FFT STREQUAL "fftw")
104   target_link_libraries(kcf ${FFTW_LDFLAGS})
105   IF(OPENMP)
106     target_link_libraries(kcf fftw3_omp)
107   ELSEIF(NOT ASYNC)
108     target_link_libraries(kcf fftw3_threads)
109   ENDIF()
110 ENDIF() #FFTW
111
112 IF(FFT STREQUAL "cuFFTW")
113   target_link_libraries(kcf ${CUDA_cufft_LIBRARY} ${CUDA_cufftw_LIBRARY})
114 ENDIF() #cuFFTW
115
116 IF(FFT STREQUAL "cuFFT")
117     target_link_libraries(kcf ${CUDA_cufft_LIBRARY} ${CUDA_LIBRARIES} complexmat cuda_func)
118 ENDIF()
119
120 IF(PROFILING)
121   target_link_libraries(kcf pfm)
122 ENDIF()