1 cmake_minimum_required(VERSION 3.5.1)
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)
12 set(NNAS_PROJECT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." CACHE
13 INTERNAL "Where to find nnas top-level source directory"
16 set(NNAS_EXTERNALS_DIR
17 "${NNAS_PROJECT_SOURCE_DIR}/externals" CACHE
18 INTERNAL "Where to download external dependencies"
20 set(NNFW_OVERLAY_DIR "${CMAKE_BINARY_DIR}/overlay" CACHE
21 INTERNAL "Where locally built external dependencies are installed")
23 # Share package build script with compiler
24 set(EXT_OVERLAY_DIR ${NNFW_OVERLAY_DIR})
26 # This allows find_package to access configurations installed inside overlay
27 list(APPEND CMAKE_PREFIX_PATH "${EXT_OVERLAY_DIR}")
29 macro(nnas_include PREFIX)
30 include("${NNAS_PROJECT_SOURCE_DIR}/infra/cmake/modules/${PREFIX}.cmake")
31 endmacro(nnas_include)
33 # Runtime 'find_package()' wrapper to find in cmake/packages folder
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
45 endmacro(nnfw_find_package)
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
53 endmacro(nnas_find_package)
55 set(CMAKE_CXX_STANDARD 14)
56 set(CMAKE_CXX_EXTENSIONS OFF)
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)
65 # identify platform: HOST_PLATFORM, TARGET_PLATFORM and related
66 # note: this should be placed before flags and options setting
67 nnas_include(IdentifyPlatform)
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
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")
82 nnfw_find_package(GTest QUIET)
84 option(ENABLE_TEST "Build Tests using Google Test" ${GTest_FOUND})
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})
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})
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)
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)
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)
109 target_compile_options(nnfw_coverage INTERFACE -fprofile-arcs -ftest-coverage)
110 target_link_libraries(nnfw_coverage INTERFACE gcov)
111 endif(ENABLE_COVERAGE)
113 nnas_include(AddSubdirectories)
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)