Imported Upstream version 1.7.0
[platform/core/ml/nnfw.git] / infra / nnfw / CMakeLists.txt
1 cmake_minimum_required(VERSION 3.5.1)
2
3 project(nnfw)
4
5 enable_testing()
6
7 set(CMAKE_SKIP_BUILD_RPATH FALSE)
8 set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
9 set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib:$ORIGIN/")
10 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
11
12 set(NNAS_PROJECT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." CACHE
13   INTERNAL "Where to find nnas top-level source directory"
14 )
15
16 set(NNAS_EXTERNALS_DIR
17   "${NNAS_PROJECT_SOURCE_DIR}/externals" CACHE
18   INTERNAL "Where to download external dependencies"
19 )
20 set(NNFW_OVERLAY_DIR "${CMAKE_BINARY_DIR}/overlay" CACHE
21     INTERNAL "Where locally built external dependencies are installed")
22
23 # Share package build script with compiler
24 set(EXT_OVERLAY_DIR ${NNFW_OVERLAY_DIR})
25
26 # This allows find_package to access configurations installed inside overlay
27 list(APPEND CMAKE_PREFIX_PATH "${EXT_OVERLAY_DIR}")
28
29 macro(nnas_include PREFIX)
30   include("${NNAS_PROJECT_SOURCE_DIR}/infra/cmake/modules/${PREFIX}.cmake")
31 endmacro(nnas_include)
32
33 # Runtime 'find_package()' wrapper to find in cmake/packages folder
34 #
35 # Example:
36 #  nnfw_find_package(Boost): Load settings from 'BoostConfig.cmake' file
37 #    - this may drop warnings like "-- Could NOT find Boost (missing: Boost_DIR)
38 #  nnfw_find_package(Boost QUIET): Load settings silently, without warnings
39 #  nnfw_find_package(Boost REQUIRED): Load settings but stop with error when failed
40 macro(nnfw_find_package PREFIX)
41   find_package(${PREFIX} CONFIG NO_DEFAULT_PATH
42     PATHS ${CMAKE_SOURCE_DIR}/cmake/packages
43     ${ARGN}
44   )
45 endmacro(nnfw_find_package)
46
47 # Common 'find_package()' wrapper to find in infra/cmake/packages folder
48 macro(nnas_find_package PREFIX)
49   find_package(${PREFIX} CONFIG NO_DEFAULT_PATH
50     PATHS ${NNAS_PROJECT_SOURCE_DIR}/infra/cmake/packages
51     ${ARGN}
52   )
53 endmacro(nnas_find_package)
54
55 set(CMAKE_CXX_STANDARD 14)
56 set(CMAKE_CXX_EXTENSIONS OFF)
57
58 # This feature works with CMake 3.5.2 or later. However, using previous versions does not produce
59 # an error. We are still officially using CMake 3.5.1, but put this code for the sake of semantic
60 # support in various development tools.
61 # Todo: Someday, CMake needs to be updated to 3.7.2 or later to take advantage of improvements
62 #       such as `cmake-server`.
63 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
64
65 # identify platform: HOST_PLATFORM, TARGET_PLATFORM and related
66 # note: this should be placed before flags and options setting
67 nnas_include(IdentifyPlatform)
68
69 # Configuration flags
70 include("cmake/CfgOptionFlags.cmake")
71 # and besides CfgOptionFlags.cmake that can be given outside
72 #   COVERAGE_BUILD: build boolean flag that enables converage test
73 #   ROOTFS_DIR: rootfs path for cross building
74 #   TARGET_ARCH: target architecture string for cross building
75 #   TARGET_OS: target os string for cross building
76
77 # apply compilation flags
78 # NOTE This should be placed after cmake/CfgOptionFlags.cmake files include
79 #      because compile flag setting can be decided using option (ex. ENABLE_COVERAGE)
80 include("cmake/ApplyCompileFlags.cmake")
81
82 nnfw_find_package(GTest QUIET)
83
84 option(ENABLE_TEST "Build Tests using Google Test" ${GTest_FOUND})
85
86 if(${ENABLE_TEST} AND NOT ${GTest_FOUND})
87   message(FATAL_ERROR "Google Test is required to enable test")
88 endif(${ENABLE_TEST} AND NOT ${GTest_FOUND})
89
90 if(${ENABLE_COVERAGE} AND NOT ${ENABLE_TEST})
91   message(FATAL_ERROR "Test should be enabled to measure test coverage")
92 endif(${ENABLE_COVERAGE} AND NOT ${ENABLE_TEST})
93
94 add_library(nnfw_common INTERFACE)
95 if(ENABLE_STRICT_BUILD)
96   target_compile_options(nnfw_common INTERFACE -Werror -Wall -Wextra)
97 endif(ENABLE_STRICT_BUILD)
98
99 macro(nnfw_strict_build TARGET)
100   if(ENABLE_STRICT_BUILD)
101     target_compile_options(${TARGET} PRIVATE -Werror -Wall -Wextra)
102   endif(ENABLE_STRICT_BUILD)
103 endmacro(nnfw_strict_build)
104
105 # TODO Replace using default build option setting in cmake/buildtool/config/config_linux.cmake
106 #      to link nnfw_coverage on each module which want to check coverage
107 add_library(nnfw_coverage INTERFACE)
108 if(ENABLE_COVERAGE)
109   target_compile_options(nnfw_coverage INTERFACE -fprofile-arcs -ftest-coverage)
110   target_link_libraries(nnfw_coverage INTERFACE gcov)
111 endif(ENABLE_COVERAGE)
112
113 nnas_include(AddSubdirectories)
114
115 add_subdirectory(${NNAS_PROJECT_SOURCE_DIR}/compute compute)
116 add_subdirectory(${NNAS_PROJECT_SOURCE_DIR}/runtime runtime)
117 add_subdirectory(${NNAS_PROJECT_SOURCE_DIR}/tests tests)
118 add_subdirectory(${NNAS_PROJECT_SOURCE_DIR}/tools tools)