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