]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blob - src/CMakeLists.txt
Allow using debug functions in other files than kcf.cpp
[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 threadctx.hpp pragmas.h dynmem.hpp debug.cpp)
4
5 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
6   set_property(SOURCE kcf.cpp APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-gnu-zero-variadic-macro-arguments ")
7 endif()
8
9 find_package(PkgConfig)
10
11 SET(FFT "OpenCV" CACHE STRING "Select FFT implementation")
12 SET_PROPERTY(CACHE FFT PROPERTY STRINGS OpenCV fftw cuFFTW cuFFT)
13 MESSAGE(STATUS "FFT implementation: ${FFT}")
14
15 option(OPENMP "Use OpenMP library. Works with FFTW and OpenCV implementation." OFF)
16 option(ASYNC "Works only if OPENCV_CUFFT is not ON. Will enable C++ async directive." OFF)
17 option(CUDA_DEBUG "Enables error cheking for cuda and cufft. " OFF)
18 option(BIG_BATCH "Enable transforming all features from all scales together." OFF)
19
20 IF(PROFILING)
21   add_definitions(-DPROFILING )
22   MESSAGE(STATUS "Profiling mode")
23 ENDIF()
24
25 IF(BIG_BATCH)
26   add_definitions(-DBIG_BATCH )
27   MESSAGE(STATUS "Big_batch mode")
28 ENDIF()
29
30 SET(use_cuda OFF)
31
32 IF(FFT STREQUAL "OpenCV")
33   list(APPEND KCF_LIB_SRC fft_opencv.cpp complexmat.hpp)
34 ELSEIF(FFT STREQUAL "fftw")
35   list(APPEND KCF_LIB_SRC fft_fftw.cpp complexmat.hpp)
36   add_definitions(-DFFTW)
37   pkg_check_modules(FFTW REQUIRED fftw3f)
38 ELSEIF(FFT STREQUAL "cuFFTW")
39   list(APPEND KCF_LIB_SRC fft_fftw.cpp complexmat.hpp)
40   add_definitions(-DFFTW -DCUFFTW)
41   set(use_cuda ON)
42 ELSEIF(FFT STREQUAL "cuFFT")
43     list(APPEND KCF_LIB_SRC fft_cufft.cpp complexmat.cuh cuda_functions.cuh)
44     add_definitions(-DCUFFT)
45     set(use_cuda ON)
46     iF(CUDA_DEBUG)
47       add_definitions(-DCUDA_DEBUG)
48       MESSAGE(STATUS "CUDA debug mode")
49     ENDIF()
50 ELSE()
51   MESSAGE(FATAL_ERROR "Invalid FFT implementation selected")
52 ENDIF()
53
54 IF((FFT STREQUAL "OpenCV") AND BIG_BATCH)
55   message(SEND_ERROR "OpenCV version does not support big batch mode.")
56 ENDIF()
57
58 IF((FFT STREQUAL "cuFFT") AND (ASYNC))
59   message(SEND_ERROR "cuFFT version does not support ASYNC and OpenMP only if used with big batch mode.")
60 ENDIF()
61
62 IF(ASYNC)
63   add_definitions(-DASYNC)
64   MESSAGE(STATUS "ASYNC")
65 ELSEIF(OPENMP)
66     add_definitions(-DOPENMP)
67     MESSAGE(STATUS "OPENMP")
68 ENDIF() #ASYNC
69
70 FIND_PACKAGE( OpenCV REQUIRED )
71
72 IF(use_cuda)
73   find_package(CUDA REQUIRED)
74
75   include_directories ( ${CUDA_INCLUDE_DIRS} )
76   set(CUDA_SEPARABLE_COMPILATION ON)
77   set(CUDA_PROPAGATE_HOST_FLAGS OFF)
78
79   if(NOT COMMAND CUDA_SELECT_NVCC_ARCH_FLAGS)
80     include(${CMAKE_SOURCE_DIR}/cmake/FindCUDA/select_compute_arch.cmake)
81   endif()
82
83   set(CUDA_ARCH_LIST "Auto" CACHE STRING "CUDA GPU architecture for building the code")
84   CUDA_SELECT_NVCC_ARCH_FLAGS(ARCH_FLAGS ${CUDA_ARCH_LIST})
85   list( APPEND CUDA_NVCC_FLAGS -O3 -std=c++11 ${ARCH_FLAGS} --default-stream per-thread) # --gpu-architecture sm_62 )
86   find_cuda_helper_libs(cufftw)
87   IF(FFT STREQUAL "cuFFT")
88     cuda_add_library(kcfcuda complexmat.cu cuda_functions.cu)
89   ENDIF()
90
91 ENDIF()
92
93 add_subdirectory(piotr_fhog)
94 add_subdirectory(cn)
95
96 add_library(kcf STATIC ${KCF_LIB_SRC})
97 target_link_libraries(kcf fhog cndata ${OpenCV_LIBS})
98 set_target_properties(kcf PROPERTIES VERSION 1.0.0 SOVERSION 1)
99
100 IF(FFT STREQUAL "fftw")
101   target_link_libraries(kcf ${FFTW_LDFLAGS})
102   IF(OPENMP)
103     target_link_libraries(kcf fftw3_omp)
104   ELSEIF(NOT ASYNC)
105     target_link_libraries(kcf fftw3_threads)
106   ENDIF()
107 ENDIF() #FFTW
108
109 IF(FFT STREQUAL "cuFFTW")
110   target_link_libraries(kcf ${CUDA_cufft_LIBRARY} ${CUDA_cufftw_LIBRARY})
111 ENDIF() #cuFFTW
112
113 IF(FFT STREQUAL "cuFFT")
114     target_link_libraries(kcf kcfcuda ${CUDA_cufft_LIBRARY} ${CUDA_cublas_LIBRARY} ${CUDA_LIBRARIES})
115 ENDIF()
116
117 IF(PROFILING)
118   target_link_libraries(kcf pfm)
119 ENDIF()