Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / CMakeLists.txt
1 # Copyright (C) 2018-2019 Intel Corporation
2 # SPDX-License-Identifier: Apache-2.0
3 #
4
5 cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
6
7 project(InferenceEngine)
8
9 set(DEV_BUILD TRUE)
10
11 include(CTest)
12
13 ## WA for problem with gtest submodule. It cannot detect uint32 type.
14 ## remove Gtest submodule and this two lines together
15 include (CheckTypeSize)
16 check_type_size (uint32_t uint32_t LANGUAGE CXX)
17
18 if (UNIX AND NOT APPLE)
19 set(LINUX TRUE)
20 endif()
21
22 option (OS_FOLDER "create OS dedicated folder in output" OFF)
23
24 if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l")
25     set (ARCH_FOLDER armv7l)
26 elseif("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
27     set (ARCH_FOLDER intel64)
28 else()
29     set (ARCH_FOLDER  ia32)
30 endif()
31
32 if (OS_FOLDER)
33         message ("**** OS FOLDER IS: [${OS_FOLDER}]")
34         if ("${OS_FOLDER}" STREQUAL "ON")
35                 message ("**** USING OS FOLDER: [${CMAKE_SYSTEM_NAME}]")
36                 set (BIN_FOLDER bin/${CMAKE_SYSTEM_NAME}/${ARCH_FOLDER})
37         else()
38                 set (BIN_FOLDER bin/${OS_FOLDER}/${ARCH_FOLDER})
39         endif()
40 else()
41     set (BIN_FOLDER bin/${ARCH_FOLDER})
42 endif()
43
44 set (IE_MAIN_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
45 set (CMAKE_MODULE_PATH "${IE_MAIN_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
46
47 #printing debug messages
48 include (debug)
49
50 if("${CMAKE_BUILD_TYPE}" STREQUAL "")
51     debug_message(STATUS "CMAKE_BUILD_TYPE not defined, 'Release' will be used")
52     set(CMAKE_BUILD_TYPE "Release")
53 endif()
54 message(STATUS "BUILD_CONFIGURATION: ${CMAKE_BUILD_TYPE}")
55
56 if(COVERAGE)
57     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage -O0")
58 endif()
59
60 if (UNIX)
61     SET(LIB_DL ${CMAKE_DL_LIBS})
62 endif()
63
64 set (OUTPUT_ROOT ${IE_MAIN_SOURCE_DIR})
65
66 include(os_flags)
67
68 #resolving dependencies for the project
69 include (dependencies)
70
71 set(CMAKE_DEBUG_POSTFIX ${IE_DEBUG_POSTFIX})
72 set(CMAKE_RELEASE_POSTFIX ${IE_RELEASE_POSTFIX})
73
74 if (WIN32)
75     # Support CMake multiconfiguration for Visual Studio build
76     set(IE_BUILD_POSTFIX $<$<CONFIG:Debug>:${IE_DEBUG_POSTFIX}>$<$<CONFIG:Release>:${IE_RELEASE_POSTFIX}>)
77     set(IE_BUILD_CONFIGURATION $<CONFIG>)
78 else ()
79     if (${CMAKE_BUILD_TYPE} STREQUAL "Debug" )
80         set(IE_BUILD_POSTFIX ${IE_DEBUG_POSTFIX})
81     else()
82         set(IE_BUILD_POSTFIX ${IE_RELEASE_POSTFIX})
83     endif()
84     set(IE_BUILD_CONFIGURATION ${CMAKE_BUILD_TYPE})
85 endif()
86
87 add_definitions(-DIE_BUILD_POSTFIX=\"${IE_BUILD_POSTFIX}\")
88
89 if(NOT(UNIX))
90     if (WIN32)
91         #set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
92         #set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
93     endif()
94     set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_ROOT}/${BIN_FOLDER})
95     set (CMAKE_LIBRARY_PATH ${OUTPUT_ROOT}/${BIN_FOLDER})
96     set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_ROOT}/${BIN_FOLDER})
97     set (CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY ${OUTPUT_ROOT}/${BIN_FOLDER})
98     set (CMAKE_PDB_OUTPUT_DIRECTORY ${OUTPUT_ROOT}/${BIN_FOLDER})
99     set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_ROOT}/${BIN_FOLDER})
100     set (LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_ROOT}/${BIN_FOLDER})
101     set (LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_DIRECTORY}) # compatibility issue: linux uses LIBRARY_OUTPUT_PATH, windows uses LIBRARY_OUTPUT_DIRECTORY
102 else ()
103     set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_ROOT}/${BIN_FOLDER}/${IE_BUILD_CONFIGURATION}/lib)
104     set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_ROOT}/${BIN_FOLDER}/${IE_BUILD_CONFIGURATION}/lib)
105     set (CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY ${OUTPUT_ROOT}/${BIN_FOLDER}/${IE_BUILD_CONFIGURATION})
106     set (CMAKE_PDB_OUTPUT_DIRECTORY ${OUTPUT_ROOT}/${BIN_FOLDER}/${IE_BUILD_CONFIGURATION})
107     set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_ROOT}/${BIN_FOLDER}/${IE_BUILD_CONFIGURATION})
108     set (LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_ROOT}/${BIN_FOLDER}/${IE_BUILD_CONFIGURATION}/lib)
109     set (LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_DIRECTORY}/lib)
110 endif()
111
112 if (APPLE)
113     set(CMAKE_MACOSX_RPATH 1)
114 endif(APPLE)
115
116 #rpath fully disabled
117 if (NOT ENABLE_PLUGIN_RPATH)
118     SET (CMAKE_SKIP_RPATH TRUE)
119 endif()
120
121 #Use solution folders.
122 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
123 #message("=====================> ${CMAKE_BUILD_TYPE} <=====================")
124
125 message (STATUS "PROJECT ............................... " ${PROJECT_NAME})
126 message (STATUS "CMAKE_BINARY_DIR ...................... " ${CMAKE_BINARY_DIR})
127 message (STATUS "IE_MAIN_SOURCE_DIR .................... " ${IE_MAIN_SOURCE_DIR})
128 message (STATUS "CMAKE_GENERATOR ....................... " ${CMAKE_GENERATOR})
129 message (STATUS "CMAKE_C_COMPILER_ID ................... " ${CMAKE_C_COMPILER_ID})
130
131 include(sdl)
132
133 set (CMAKE_POSITION_INDEPENDENT_CODE ON)
134
135 include (sanitizer)
136
137 include(CheckCXXCompilerFlag)
138
139 include(cpplint)
140
141 add_subdirectory(src)
142 add_subdirectory(tests)
143 add_subdirectory(thirdparty)
144 set(InferenceEngine_DIR "${CMAKE_BINARY_DIR}")
145
146 #to be able to link
147 set (LIB_FOLDER ${IE_MAIN_SOURCE_DIR}/${BIN_FOLDER}/${IE_BUILD_CONFIGURATION}/lib)
148
149 # gflags and format_reader targets are kept inside of samples directory and
150 # they must be built even if samples build is disabled (required for tests and tools).
151 add_subdirectory(samples)
152
153 file(GLOB_RECURSE SAMPLES_SOURCES samples/*.cpp samples/*.hpp samples/*.h)
154 add_cpplint_target(sample_cpplint
155     FOR_SOURCES ${SAMPLES_SOURCES}
156     EXCLUDE_PATTERNS "thirdparty/*" "pugixml/*")
157
158 if (ENABLE_PYTHON)
159     add_subdirectory(ie_bridges/python)
160 endif()
161
162 add_cpplint_report_target()