]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blob - src/CMakeLists.txt
Remove unused functions
[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 complexmat.hpp)
4
5 find_package(PkgConfig)
6
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}")
10
11 option(OPENMP "Use OpenMP to paralelize certain portions of code." OFF)
12 option(ASYNC "Use C++ std::async to paralelize certain portions of code." OFF)
13 option(CUDA_DEBUG "Enables error cheking for cuda and cufft. " OFF)
14 option(BIG_BATCH "Execute all FFT calculation in a single batch. This can improve paralelism and reduce GPU offloading overhead." OFF)
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 (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") AND NOT OPENMP)
27   SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas")
28 ENDIF()
29
30 SET(use_cuda OFF)
31
32 IF(FFT STREQUAL "OpenCV")
33   list(APPEND KCF_LIB_SRC fft_opencv.cpp)
34 ELSEIF(FFT STREQUAL "fftw")
35   list(APPEND KCF_LIB_SRC fft_fftw.cpp)
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)
40   add_definitions(-DFFTW -DCUFFTW)
41   set(use_cuda ON)
42 ELSEIF(FFT STREQUAL "cuFFT")
43     list(APPEND KCF_LIB_SRC fft_cufft.cpp)
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 "cuFFT")
55   list(APPEND KCF_LIB_SRC complexmat.cu)
56 ELSE()
57   list(APPEND KCF_LIB_SRC complexmat.cpp)
58 ENDIF()
59
60 IF((FFT STREQUAL "OpenCV") AND BIG_BATCH)
61   message(SEND_ERROR "OpenCV version does not support big batch mode.")
62 ENDIF()
63
64 IF((FFT STREQUAL "cuFFT") AND (ASYNC))
65   message(SEND_ERROR "cuFFT version does not support ASYNC and OpenMP only if used with big batch mode.")
66 ENDIF()
67
68 IF(ASYNC)
69   add_definitions(-DASYNC)
70   find_package(Threads REQUIRED)
71   MESSAGE(STATUS "ASYNC")
72 ELSEIF(OPENMP)
73   add_definitions(-DOPENMP)
74   FIND_PACKAGE(OpenMP REQUIRED CXX)
75 ENDIF() #ASYNC
76
77 FIND_PACKAGE( OpenCV REQUIRED )
78
79 IF(use_cuda)
80   find_package(CUDA REQUIRED)
81
82   include_directories ( ${CUDA_INCLUDE_DIRS} )
83   set(CUDA_SEPARABLE_COMPILATION ON)
84   set(CUDA_PROPAGATE_HOST_FLAGS OFF)
85
86   if(NOT COMMAND CUDA_SELECT_NVCC_ARCH_FLAGS)
87     include(${CMAKE_SOURCE_DIR}/cmake/FindCUDA/select_compute_arch.cmake)
88   endif()
89
90   set(CUDA_ARCH_LIST "Auto" CACHE STRING "CUDA GPU architecture for building the code")
91   CUDA_SELECT_NVCC_ARCH_FLAGS(ARCH_FLAGS ${CUDA_ARCH_LIST})
92   list( APPEND CUDA_NVCC_FLAGS -O3 -std=c++11 ${ARCH_FLAGS} --default-stream per-thread) # --gpu-architecture sm_62 )
93   find_cuda_helper_libs(cufftw)
94   find_cuda_helper_libs(nvToolsExt)
95 ENDIF()
96
97 add_subdirectory(piotr_fhog)
98 add_subdirectory(cn)
99
100 if(FFT STREQUAL "cuFFT")
101   cuda_add_library(kcf STATIC ${KCF_LIB_SRC})
102 else()
103   add_library(kcf STATIC ${KCF_LIB_SRC})
104 endif()
105
106 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
107   target_compile_options(kcf PRIVATE -Wno-gnu-zero-variadic-macro-arguments)
108 endif()
109
110
111 target_link_libraries(kcf fhog cndata ${OpenCV_LIBS})
112 set_target_properties(kcf PROPERTIES VERSION 1.0.0 SOVERSION 1)
113
114 IF(FFT STREQUAL "fftw")
115   target_link_libraries(kcf ${FFTW_LDFLAGS})
116   IF(OPENMP)
117     target_link_libraries(kcf fftw3_omp)
118   ELSE()
119     target_link_libraries(kcf fftw3_threads)
120   ENDIF()
121 ENDIF() #FFTW
122
123 IF(FFT STREQUAL "cuFFTW")
124   target_link_libraries(kcf ${CUDA_cufft_LIBRARY} ${CUDA_cufftw_LIBRARY})
125 ENDIF() #cuFFTW
126
127 IF(FFT STREQUAL "cuFFT")
128   target_link_libraries(kcf ${CUDA_cufft_LIBRARY} ${CUDA_cublas_LIBRARY} ${CUDA_LIBRARIES} ${CUDA_nvToolsExt_LIBRARY})
129 ENDIF()
130
131 IF(PROFILING)
132   target_link_libraries(kcf pfm)
133 ENDIF()
134
135 IF(OPENMP)
136   target_compile_options(kcf PUBLIC ${OpenMP_CXX_FLAGS})
137   target_link_libraries(kcf ${OpenMP_CXX_LIB_NAMES})
138   target_link_libraries(kcf ${OpenMP_omp_LIBRARY})
139   if (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") AND NOT OpenMP_CXX_LIB_NAMES)
140     # Older cmake does not set OpenMP_CXX_LIB_NAMES so hardcode it here
141     target_link_libraries(kcf gomp)
142   endif()
143 ENDIF()
144
145 if(THREADS_HAVE_PTHREAD_ARG)
146   target_compile_options(kcf PUBLIC "-pthread")
147 endif()
148 if(CMAKE_THREAD_LIBS_INIT)
149   target_link_libraries(kcf "${CMAKE_THREAD_LIBS_INIT}")
150 endif()