Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / samples / CMakeLists.txt
1 # Copyright (C) 2018-2019 Intel Corporation
2 # SPDX-License-Identifier: Apache-2.0
3 #
4
5 cmake_minimum_required (VERSION 2.8)
6
7 project(Samples)
8
9 if (CMAKE_BUILD_TYPE STREQUAL "")
10     message(STATUS "CMAKE_BUILD_TYPE not defined, 'Release' will be used")
11     set(CMAKE_BUILD_TYPE "Release")
12 endif()
13
14 if (NOT(BIN_FOLDER))
15     if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l")
16         set (ARCH armv7l)
17     elseif("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
18         set (ARCH intel64)
19     else()
20         set (ARCH ia32)
21     endif()
22
23     set (BIN_FOLDER ${ARCH})
24 endif()
25
26 if (NOT(IE_MAIN_SOURCE_DIR))
27     # in case if samples are built out of IE repo
28     set (IE_MAIN_SAMPLES_DIR ${CMAKE_CURRENT_BINARY_DIR})
29 else()
30     # in case if samples are built from IE repo
31     set (IE_MAIN_SAMPLES_DIR ${IE_MAIN_SOURCE_DIR})
32 endif()
33
34 if(NOT(UNIX))
35     set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER})
36     set (CMAKE_LIBRARY_PATH ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER})
37     set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER})
38     set (CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER})
39     set (CMAKE_PDB_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER})
40     set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER})
41     set (LIBRARY_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER})
42     set (LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_DIRECTORY}) # compatibility issue: linux uses LIBRARY_OUTPUT_PATH, windows uses LIBRARY_OUTPUT_DIRECTORY
43 else ()
44     set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER}/${CMAKE_BUILD_TYPE}/lib)
45     set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER}/${CMAKE_BUILD_TYPE}/lib)
46     set (CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER}/${CMAKE_BUILD_TYPE})
47     set (CMAKE_PDB_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER}/${CMAKE_BUILD_TYPE})
48     set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER}/${CMAKE_BUILD_TYPE})
49     set (LIBRARY_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER}/${CMAKE_BUILD_TYPE}/lib)
50     set (LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_DIRECTORY}/lib)
51 endif()
52
53 if (WIN32)
54     if (NOT "${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
55         message(FATAL_ERROR "Only 64-bit supported on Windows")
56     endif()
57
58     set_property (DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS _CRT_SECURE_NO_WARNINGS)
59     set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_SCL_SECURE_NO_WARNINGS -DNOMINMAX")
60     set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") #no asynchronous structured exception handling
61     set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
62     if (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
63         set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4251 /wd4275 /wd4267") #disable some warnings
64     endif()
65 else()
66     set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") #treating warnings as errors
67     if (APPLE)
68         set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=unused-command-line-argument")
69     elseif(UNIX)
70         set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wuninitialized -Winit-self")
71         if(NOT ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
72             set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wmaybe-uninitialized")
73         endif()
74     endif()
75 endif()
76
77
78 ####################################
79 ## to use C++11
80 set (CMAKE_CXX_STANDARD 11)
81 set (CMAKE_CXX_STANDARD_REQUIRED ON)
82 if (${CMAKE_CXX_COMPILER_ID} STREQUAL GNU)
83     set (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
84 endif()
85 ####################################
86
87 set (GFLAGS_IS_SUBPROJECT TRUE)
88 set (HAVE_SYS_STAT_H 1)
89 set (HAVE_INTTYPES_H 1)
90
91 add_subdirectory(thirdparty/gflags)
92
93 if (${CMAKE_CXX_COMPILER_ID} STREQUAL GNU)
94     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
95 endif()
96
97 include_directories (
98         ${CMAKE_CURRENT_SOURCE_DIR}/common
99         ${CMAKE_CURRENT_SOURCE_DIR}/common/format_reader
100 )
101 add_subdirectory(common/format_reader)
102
103 # samples build can be switched off during whole IE build
104 if (IE_MAIN_SOURCE_DIR AND NOT ENABLE_SAMPLES)
105     return()
106 endif()
107
108 function(add_samples_to_build)
109     # check each passed sample subdirectory
110     foreach (dir ${ARGN})
111         if (IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${dir})
112             # check if a subdirectory contains CMakeLists.txt. In this case we can build it.
113             file(GLOB is_sample_dir "${CMAKE_CURRENT_SOURCE_DIR}/${dir}/CMakeLists.txt")
114             if(is_sample_dir)
115                 # check if specified sample/demo is found.
116                 if (BUILD_SAMPLE_NAME)
117                     list(FIND BUILD_SAMPLE_NAME ${dir} index)
118                 endif()
119                 if (index EQUAL -1)
120                     message(STATUS "${dir} SKIPPED")
121                 else()
122                     # Include subdirectory to the project.
123                     add_subdirectory(${dir})
124                 endif()
125             endif()
126         endif()
127     endforeach()
128 endfunction(add_samples_to_build)
129
130 # use this flag if you need to throw custom message in case if the IE package is not found.
131 if (IE_NOT_FOUND_MESSAGE)
132     find_package(InferenceEngine 1.6 QUIET)
133     if (NOT(InferenceEngine_FOUND))
134         message(FATAL_ERROR ${IE_NOT_FOUND_MESSAGE})
135     endif()
136 else()
137     find_package(InferenceEngine 1.6 REQUIRED)
138 endif()
139
140 if (UNIX)
141     set (LIB_DL dl)
142 endif()
143
144 # collect all samples subdirectories
145 file(GLOB samples_dirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *)
146 # skip building of unnecessary subdirectories
147 list(REMOVE_ITEM samples_dirs archived common thirdparty)
148 add_samples_to_build(${samples_dirs})