-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathCMakeLists.txt
107 lines (95 loc) · 4.08 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
cmake_minimum_required(VERSION 2.8)
project( akaze )
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
OPTION(OPENMP "Enable multithreading (requires OpenMP)" ON)
# Where to output binaries and libraries
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
FIND_PACKAGE(Eigen REQUIRED)
INCLUDE_DIRECTORIES(${EIGEN_INCLUDE_DIRS})
IF (EIGEN_FOUND)
MESSAGE("-- Found Eigen version ${EIGEN_VERSION}: ${EIGEN_INCLUDE_DIRS}")
ENDIF (EIGEN_FOUND)
# CImg is needed for reading/displaying the images.
ADD_SUBDIRECTORY(cimg)
ADD_SUBDIRECTORY(timer)
INCLUDE_DIRECTORIES(${cimg_INCLUDE_DIR} ${timer_INCLUDE_DIR} ./)
# Use a larger inlining threshold for Clang, since it hobbles Eigen,
# resulting in an unreasonably slow version of the blas routines. The
# -Qunused-arguments is needed because CMake passes the inline
# threshold to the linker and clang complains about it and dies.
IF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
SET(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} -Qunused-arguments -mllvm -inline-threshold=600")
# Older versions of Clang (<= 2.9) do not support the 'return-type-c-linkage'
# option, so check for its presence before adding it to the default flags set.
INCLUDE(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-Wno-return-type-c-linkage"
HAVE_RETURN_TYPE_C_LINKAGE)
IF (HAVE_RETURN_TYPE_C_LINKAGE)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-return-type-c-linkage")
ENDIF(HAVE_RETURN_TYPE_C_LINKAGE)
ENDIF ()
IF (OPENMP)
# Clang does not (yet) support OpenMP.
IF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# Retain the help string associated with the OPENMP option
# when updating it to disable use of OPENMP.
GET_PROPERTY(HELP_STRING CACHE OPENMP PROPERTY HELPSTRING)
SET(OPENMP OFF CACHE BOOL "${HELP_STRING}" FORCE)
MESSAGE("-- Compiler is Clang, disabling OpenMP.")
ELSE (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# Find quietly s/t as we can continue without OpenMP if it is not found.
FIND_PACKAGE(OpenMP QUIET)
IF (OPENMP_FOUND)
MESSAGE("-- Building with OpenMP.")
ADD_DEFINITIONS(-DAKAZE_USE_OPENMP)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
IF (UNIX)
# At least on Linux, we need pthreads to be enabled for mutex to
# compile. This may not work on Windows or Android.
FIND_PACKAGE(Threads REQUIRED)
SET(STATIC_LIBRARY_FLAGS
"${STATIC_LIBRARY_FLAGS} ${CMAKE_THREAD_LIBS_INIT}")
SET(CMAKE_SHARED_LINKER_FLAGS
"${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_THREAD_LIBS_INIT}")
ENDIF (UNIX)
ELSE (OPENMP_FOUND)
MESSAGE("-- Failed to find OpenMP, disabling.")
# Retain the help string associated with the OPENMP option
# when updating it to disable use of OPENMP.
GET_PROPERTY(HELP_STRING CACHE OPENMP PROPERTY HELPSTRING)
SET(OPENMP OFF CACHE BOOL "${HELP_STRING}" FORCE)
ENDIF (OPENMP_FOUND)
ENDIF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
ELSE (OPENMP)
MESSAGE("-- Building without OpenMP.")
ENDIF (OPENMP)
Include("${CMAKE_MODULE_PATH}/OptimizeCompilerFlags.cmake")
OptimizeCompilerFlags()
# Support for Debug mode.
IF (CMAKE_BUILD_TYPE STREQUAL "Debug")
MESSAGE("========== Warning: Compiling with Debug mode ==========")
ENDIF (CMAKE_BUILD_TYPE STREQUAL "Debug")
mark_as_advanced(
Gperftools_ROOT_DIR
GPERFTOOLS_TCMALLOC
GPERFTOOLS_PROFILER
GPERFTOOLS_TCMALLOC_AND_PROFILER
GPERFTOOLS_LIBRARIES
GPERFTOOLS_INCLUDE_DIR)
SET(AKAZE_SRCS
src/AKAZE.cpp
src/convolution.cpp
src/fed.cpp
src/nldiffusion_functions.cpp
src/utils.cpp)
ADD_LIBRARY(akaze ${AKAZE_SRCS})
TARGET_LINK_LIBRARIES(akaze ${EIGEN_LIBRARIES} ${CIMG_LIBRARIES} timer)
# Demo program extracting akaze features.
ADD_EXECUTABLE(akaze_features akaze_features.cpp)
TARGET_LINK_LIBRARIES(akaze_features akaze ${CIMG_LIBRARIES})
# Demo program matching akaze features.
ADD_EXECUTABLE(akaze_match akaze_match.cpp)
TARGET_LINK_LIBRARIES(akaze_match akaze ${CIMG_LIBRARIES})