]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blob - CMakeLists.txt
d6359a12a091b9c01d3796c85942368579d49044
[hercules2020/kcf.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 3.0.2)
2
3 project(kcf_tracker)
4
5 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -pedantic -O3 -Wno-long-long -fno-omit-frame-pointer")
6
7 SET(FFT "OpenCV" CACHE STRING "Select FFT implementation")
8 SET_PROPERTY(CACHE FFT PROPERTY STRINGS OpenCV OpenCV_cuFFT fftw cuFFTW)
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(DEBUG_MODE "Additional terminal outputs and screens. " OFF)
14 option(PROFILING "Enable profiling using perf_event_open together with libpfm4. " OFF)
15
16 IF(DEBUG_MODE )
17   add_definitions(-DDEBUG_MODE )
18   MESSAGE(STATUS "Debug mode")
19 ENDIF() #DEBUG_MODE 
20
21 IF(PROFILING)
22   add_definitions(-DPROFILING )
23   MESSAGE(STATUS "Profiling mode")
24 ENDIF() #DEBUG_MODE 
25
26 SET(use_cuda OFF)
27
28 IF(FFT STREQUAL "OpenCV")
29 ELSEIF(FFT STREQUAL "OpenCV_cuFFT")
30   add_definitions(-DOPENCV_CUFFT)
31   set(use_cuda ON)
32 ELSEIF(FFT STREQUAL "fftw")
33   add_definitions(-DFFTW)
34 ELSEIF(FFT STREQUAL "cuFFTW")
35   add_definitions(-DFFTW -DCUFFTW)
36   set(use_cuda ON)
37 ELSE()
38   MESSAGE(FATAL_ERROR "Invalid FFT implementation selected")
39 ENDIF()
40
41 IF(ASYNC AND NOT OPENMP)
42   add_definitions(-DASYNC)
43   MESSAGE(STATUS "ASYNC")
44 ENDIF() #ASYNC
45
46 FIND_PACKAGE( OpenCV REQUIRED )
47 link_directories ( ${OpenCV_LIB_DIR} )
48 MESSAGE(STATUS "OpenCV_LIB_DIR: ${OpenCV_LIB_DIR} ")
49
50 IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
51   IF(NOT OPENMP)
52     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -Wno-unknown-pragmas")
53   ELSE()
54     MESSAGE(STATUS "OpenMP")
55     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
56   ENDIF() #ASYNC
57 ENDIF ()
58
59 include_directories ( ${OpenCV_INCLUDE_DIRS} )
60 MESSAGE(STATUS "OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}")
61
62 INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR}/)
63 include_directories(${CMAKE_SOURCE_DIR}/src/ ${CMAKE_SOURCE_DIR}/src/piotr_fhog ${CMAKE_SOURCE_DIR}/src/cn)
64
65 include_directories(${CMAKE_SOURCE_DIR}/sse2neon)
66
67 add_subdirectory(src)
68
69 IF(NOT use_cuda)
70   add_executable(kcf_vot main_vot.cpp vot.hpp)
71 ELSE()
72   find_package(CUDA REQUIRED)
73   link_directories ( ${CUDA_LIB_DIR} )
74   MESSAGE(STATUS "CUDA_LIB_DIR: ${CUDA_LIB_DIR} ")
75
76   include_directories ( ${CUDA_INCLUDE_DIRS} )
77   MESSAGE(STATUS "CUDA_INCLUDE_DIRS: ${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 compute_62 -std=c++11")
82
83   cuda_add_executable( kcf_vot main_vot.cpp vot.hpp )
84   target_link_libraries(kcf_vot ${CUDA_LIBRARIES})
85 ENDIF() #OPENCV_CUFFT
86
87 target_link_libraries(kcf_vot ${OpenCV_LIBS} kcf)
88
89 IF(FFT STREQUAL "fftw")
90   target_link_libraries(kcf_vot fftw3f)
91   IF(OPENMP)
92     target_link_libraries(kcf_vot fftw3_omp)
93   ENDIF()
94 ENDIF() #FFTW
95
96 IF(FFT STREQUAL "cuFFTW")
97   target_link_libraries(kcf_vot cufft cufftw)
98 ENDIF() #cuFFTW
99
100 IF(PROFILING)
101   include(ExternalProject)
102   find_program(MAKE_EXE NAMES gmake nmake make)
103   ExternalProject_Add(project_libpfm4
104     URL https://sourceforge.net/projects/perfmon2/files/libpfm4/libpfm-4.9.0.tar.gz/download
105     PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external
106     CONFIGURE_COMMAND ""
107     BUILD_IN_SOURCE TRUE
108     BUILD_COMMAND ${MAKE_EXE}
109     INSTALL_COMMAND ${MAKE_EXE} PREFIX=${CMAKE_CURRENT_BINARY_DIR}/external/libpfm4-4.9.0 install
110   )
111
112   add_library(libpfm4 STATIC IMPORTED )
113   set_property(TARGET libpfm4 PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/external/libpfm4-4.9.0/lib/libpfm.a)
114   include_directories(${CMAKE_CURRENT_BINARY_DIR}/external/libpfm4-4.9.0/include/perfmon)
115   target_link_libraries(kcf_vot libpfm4)
116 ENDIF()