1 # Copyright (C) 2018-2019 Intel Corporation
2 # SPDX-License-Identifier: Apache-2.0
5 cmake_minimum_required (VERSION 2.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")
15 if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l")
17 elseif("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
23 set (BIN_FOLDER ${ARCH})
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})
30 # in case if samples are built from IE repo
31 set (IE_MAIN_SAMPLES_DIR ${IE_MAIN_SOURCE_DIR})
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
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)
54 if (NOT "${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
55 message(FATAL_ERROR "Only 64-bit supported on Windows")
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
66 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") #treating warnings as errors
68 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=unused-command-line-argument")
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")
78 ####################################
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}")
85 ####################################
87 set (GFLAGS_IS_SUBPROJECT TRUE)
88 set (HAVE_SYS_STAT_H 1)
89 set (HAVE_INTTYPES_H 1)
91 add_subdirectory(thirdparty/gflags)
93 if (${CMAKE_CXX_COMPILER_ID} STREQUAL GNU)
94 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
98 ${CMAKE_CURRENT_SOURCE_DIR}/common
99 ${CMAKE_CURRENT_SOURCE_DIR}/common/format_reader
101 add_subdirectory(common/format_reader)
103 # samples build can be switched off during whole IE build
104 if (IE_MAIN_SOURCE_DIR AND NOT ENABLE_SAMPLES)
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")
115 # check if specified sample/demo is found.
116 if (BUILD_SAMPLE_NAME)
117 list(FIND BUILD_SAMPLE_NAME ${dir} index)
120 message(STATUS "${dir} SKIPPED")
122 # Include subdirectory to the project.
123 add_subdirectory(${dir})
128 endfunction(add_samples_to_build)
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})
137 find_package(InferenceEngine 1.6 REQUIRED)
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})