/
CMakeLists.txt
125 lines (103 loc) · 3.8 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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
#check for oddly named compiler versions (such as those on warp)
FIND_PROGRAM(GNUCXX44_COMPILER g++44)
FIND_PROGRAM(GNUC44_COMPILER gcc44)
IF(GNUCXX44_COMPILER)
SET(CMAKE_CXX_COMPILER ${GNUCXX44_COMPILER})
ENDIF()
IF(GNUC44_COMPILER)
SET(CMAKE_C_COMPILER ${GNUC44_COMPILER})
ENDIF()
PROJECT(vocabtree)
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "Lib output dir")
SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "Binary output dir")
# defaulting to release build
IF (NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE "Release" CACHE STRING "Type of build (Debug Release RelWithDebInfo MinSizeRel)" FORCE)
ENDIF ()
IF (APPLE)
SET(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "Build arch for OS X" FORCE)
ENDIF (APPLE)
IF(CMAKE_COMPILER_IS_GNUCC)
SET(WARNING_FLAGS "-Wall -Wno-strict-aliasing")
SET(PARALLEL_FLAGS "-D_GLIBCXX_PARALLEL")
SET(ARCHITECTURE_FLAGS "-mtune=native -march=native")
ENDIF(CMAKE_COMPILER_IS_GNUCC)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_INIT} ${WARNING_FLAGS} ${ARCHITECTURE_FLAGS} -g")
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
FIND_PACKAGE(Boost REQUIRED)
FIND_PACKAGE(OpenCV REQUIRED)
# Enable openmp / mpi
FIND_PACKAGE(OpenMP)
FIND_PACKAGE(MPI)
# Enable c++11x
IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libstdc++")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++")
ELSEIF("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
IF(GCC_VERSION VERSION_LESS 4.2)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
ELSEIF(GCC_VERSION VERSION_LESS 4.7)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -fpermissive")
ELSE()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fpermissive")
ENDIF()
ENDIF()
# doxygen
FIND_PACKAGE(Doxygen)
IF(DOXYGEN_FOUND)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
ADD_CUSTOM_TARGET(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating API documentation with Doxygen" VERBATIM)
ENDIF(DOXYGEN_FOUND)
# options
OPTION(ENABLE_MULTITHREAD "Enable multithreading (requires OpenMP)" ON)
IF(ENABLE_MULTITHREAD)
SET(ENABLE_MULTITHREAD 1)
ELSE()
SET(ENABLE_MULTITHREAD 0)
ENDIF()
IF(OPENMP_FOUND AND ENABLE_MULTITHREAD)
SET(ENABLE_OPENMP 1)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
ELSE()
SET(ENABLE_OPENMP 0)
ENDIF()
OPTION(ENABLE_MULTINODE "Enable multi node support (requires MPI)" ON)
IF(MPI_FOUND AND ENABLE_MULTINODE)
SET(ENABLE_MPI 1)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MPI_COMPILE_FLAGS}")
SET(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} ${MPI_LINK_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MPI_COMPILE_FLAGS}")
SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} ${MPI_LINK_FLAGS}")
INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
ELSE()
SET(ENABLE_MPI 0)
ENDIF()
SET(ENABLE_MPI 0)
OPTION(ENABLE_FASTCLUSTER "Enable fast clustering (requires mpi and yasm)" OFF)
IF(UNIX AND ENABLE_MULTINODE)
FIND_PROGRAM(YASM_EXECUTABLE yasm)
IF(MPI_FOUND AND YASM_EXECUTABLE AND ENABLE_FASTCLUSTER)
FIND_PACKAGE(FastCluster)
IF(FASTCLUSTER_FOUND)
SET(ENABLE_FASTCLUSTER 1)
ELSE()
SET(ENABLE_FASTCLUSTER 0)
ENDIF()
ELSE()
SET(ENABLE_FASTCLUSTER 0)
ENDIF()
ENDIF()
SET(ENABLE_FASTCLUSTER 0)
CONFIGURE_FILE(
${CMAKE_SOURCE_DIR}/scripts/config.py.cmake
${CMAKE_SOURCE_DIR}/scripts/config.py
)
SET(VOCAB_TREE_INCLUDE ${PROJECT_SOURCE_DIR}/modules/)
SET(VOCAB_TREE_3RDPARTY_DIR ${PROJECT_SOURCE_DIR}/3rdparty/)
ADD_SUBDIRECTORY(3rdparty)
ADD_SUBDIRECTORY(modules)