summaryrefslogtreecommitdiff
path: root/infra/nnfw
diff options
context:
space:
mode:
Diffstat (limited to 'infra/nnfw')
-rw-r--r--infra/nnfw/CMakeLists.txt108
-rw-r--r--infra/nnfw/cmake/ApplyCompileFlags.cmake39
-rw-r--r--infra/nnfw/cmake/CfgOptionFlags.cmake77
-rw-r--r--infra/nnfw/cmake/buildtool/config/config_aarch64-android.cmake9
-rw-r--r--infra/nnfw/cmake/buildtool/config/config_aarch64-linux.cmake12
-rw-r--r--infra/nnfw/cmake/buildtool/config/config_aarch64-tizen.cmake13
-rw-r--r--infra/nnfw/cmake/buildtool/config/config_armv7l-linux.cmake18
-rw-r--r--infra/nnfw/cmake/buildtool/config/config_armv7l-tizen.cmake18
-rw-r--r--infra/nnfw/cmake/buildtool/config/config_linux.cmake21
-rw-r--r--infra/nnfw/cmake/buildtool/config/config_x86_64-linux.cmake12
-rw-r--r--infra/nnfw/cmake/buildtool/cross/toolchain_aarch64-android.cmake25
-rw-r--r--infra/nnfw/cmake/buildtool/cross/toolchain_aarch64-linux.cmake39
-rw-r--r--infra/nnfw/cmake/buildtool/cross/toolchain_aarch64-tizen.cmake62
-rw-r--r--infra/nnfw/cmake/buildtool/cross/toolchain_armv7l-linux.cmake39
-rw-r--r--infra/nnfw/cmake/buildtool/cross/toolchain_armv7l-tizen.cmake66
-rw-r--r--infra/nnfw/cmake/options/options_aarch64-android.cmake17
-rw-r--r--infra/nnfw/cmake/options/options_aarch64-linux.cmake5
-rw-r--r--infra/nnfw/cmake/options/options_aarch64-tizen.cmake15
-rw-r--r--infra/nnfw/cmake/options/options_armv7l-linux.cmake6
-rw-r--r--infra/nnfw/cmake/options/options_armv7l-tizen.cmake14
-rw-r--r--infra/nnfw/cmake/options/options_x86_64-linux.cmake5
-rw-r--r--infra/nnfw/cmake/packages/AbslSourceConfig.cmake14
-rw-r--r--infra/nnfw/cmake/packages/EigenConfig.cmake17
-rw-r--r--infra/nnfw/cmake/packages/EigenSourceConfig.cmake14
-rw-r--r--infra/nnfw/cmake/packages/FarmhashSourceConfig.cmake14
-rw-r--r--infra/nnfw/cmake/packages/FlatBuffersConfig.cmake77
-rw-r--r--infra/nnfw/cmake/packages/FlatBuffersSourceConfig.cmake14
-rw-r--r--infra/nnfw/cmake/packages/GEMMLowpSourceConfig.cmake14
-rw-r--r--infra/nnfw/cmake/packages/GTestConfig.cmake99
-rw-r--r--infra/nnfw/cmake/packages/HDF5Config.cmake31
-rw-r--r--infra/nnfw/cmake/packages/NEON2SSESourceConfig.cmake20
-rw-r--r--infra/nnfw/cmake/packages/TensorFlowLite/CMakeLists.txt63
-rw-r--r--infra/nnfw/cmake/packages/TensorFlowLiteConfig.cmake69
-rw-r--r--infra/nnfw/cmake/packages/TensorFlowSourceConfig.cmake18
-rw-r--r--infra/nnfw/cmake/packages/TensorflowConfig.cmake44
-rw-r--r--infra/nnfw/command/build24
-rw-r--r--infra/nnfw/command/configure26
-rw-r--r--infra/nnfw/command/copyright-check45
-rw-r--r--infra/nnfw/command/docker-run12
-rw-r--r--infra/nnfw/command/docker-run-user12
-rw-r--r--infra/nnfw/command/docker-shell13
-rw-r--r--infra/nnfw/command/gen-coverage-report59
-rw-r--r--infra/nnfw/command/install11
-rw-r--r--infra/nnfw/config/build.configuration6
-rw-r--r--infra/nnfw/config/docker.configuration44
-rw-r--r--infra/nnfw/config/gbs.conf20
46 files changed, 1400 insertions, 0 deletions
diff --git a/infra/nnfw/CMakeLists.txt b/infra/nnfw/CMakeLists.txt
new file mode 100644
index 000000000..6b5c465d2
--- /dev/null
+++ b/infra/nnfw/CMakeLists.txt
@@ -0,0 +1,108 @@
+cmake_minimum_required(VERSION 3.5.1)
+
+project(nnfw)
+
+enable_testing()
+
+set(CMAKE_SKIP_BUILD_RPATH FALSE)
+set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
+set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib:$ORIGIN/")
+set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+
+set(NNAS_PROJECT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." CACHE
+ INTERNAL "Where to find nnas top-level source directory"
+)
+
+set(NNAS_EXTERNALS_DIR
+ "${NNAS_PROJECT_SOURCE_DIR}/externals" CACHE
+ INTERNAL "Where to download external dependencies"
+)
+set(NNFW_OVERLAY_DIR "${CMAKE_BINARY_DIR}/overlay" CACHE
+ INTERNAL "Where locally built external dependencies are installed")
+
+# Share package build script with compiler
+set(EXT_OVERLAY_DIR ${NNFW_OVERLAY_DIR})
+
+# This allows find_package to access configurations installed inside overlay
+list(APPEND CMAKE_PREFIX_PATH "${EXT_OVERLAY_DIR}")
+
+macro(nnas_include PREFIX)
+ include("${NNAS_PROJECT_SOURCE_DIR}/infra/cmake/modules/${PREFIX}.cmake")
+endmacro(nnas_include)
+
+# 'find_package()' wrapper to find in cmake/packages folder
+#
+# Example:
+# nnfw_find_package(Boost): Load settings from 'BoostConfig.cmake' file
+# - this may drop warnings like "-- Could NOT find Boost (missing: Boost_DIR)
+# nnfw_find_package(Boost QUIET): Load settings silently, without warnings
+# nnfw_find_package(Boost REQUIRED): Load settings but stop with error when failed
+macro(nnfw_find_package PREFIX)
+ find_package(${PREFIX} CONFIG NO_DEFAULT_PATH PATHS ${CMAKE_SOURCE_DIR}/cmake/packages ${ARGN})
+endmacro(nnfw_find_package)
+# TODO Remove nnfw_find_pacakge
+macro(nnas_find_package PREFIX)
+ find_package(${PREFIX} CONFIG NO_DEFAULT_PATH
+ PATHS ${NNAS_PROJECT_SOURCE_DIR}/infra/cmake/packages
+ ${ARGN}
+ )
+endmacro(nnas_find_package)
+
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+# This feature works with CMake 3.5.2 or later. However, using previous versions does not produce
+# an error. We are still officially using CMake 3.5.1, but put this code for the sake of semantic
+# support in various development tools.
+# Todo: Someday, CMake needs to be updated to 3.7.2 or later to take advantage of improvements
+# such as `cmake-server`.
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+
+# identify platform: HOST_PLATFORM, TARGET_PLATFORM and related
+# note: this should be placed before flags and options setting
+nnas_include(IdentifyPlatform)
+
+# Configuration flags
+include("cmake/CfgOptionFlags.cmake")
+# and besides CfgOptionFlags.cmake that can be given outside
+# COVERAGE_BUILD: build boolean flag that enables converage test
+# ROOTFS_DIR: rootfs path for cross building
+# TARGET_ARCH: target architecture string for cross building
+# TARGET_OS: target os string for cross building
+
+# apply compilation flags
+# NOTE This should be placed after cmake/CfgOptionFlags.cmake files include
+# because compile flag setting can be decided using option (ex. ENABLE_COVERAGE)
+include("cmake/ApplyCompileFlags.cmake")
+
+nnfw_find_package(GTest QUIET)
+
+option(ENABLE_TEST "Build Tests using Google Test" ${GTest_FOUND})
+
+if(${ENABLE_TEST} AND NOT ${GTest_FOUND})
+ message(FATAL_ERROR "Google Test is required to enable test")
+endif(${ENABLE_TEST} AND NOT ${GTest_FOUND})
+
+if(${ENABLE_COVERAGE} AND NOT ${ENABLE_TEST})
+ message(FATAL_ERROR "Test should be enabled to measure test coverage")
+endif(${ENABLE_COVERAGE} AND NOT ${ENABLE_TEST})
+
+add_library(nnfw_common INTERFACE)
+if(ENABLE_STRICT_BUILD)
+ target_compile_options(nnfw_common INTERFACE -Werror -Wall -Wextra)
+endif(ENABLE_STRICT_BUILD)
+
+# TODO Replace using default build option setting in cmake/buildtool/config/config_linux.cmake
+# to link nnfw_coverage on each module which want to check coverage
+add_library(nnfw_coverage INTERFACE)
+if(ENABLE_COVERAGE)
+ target_compile_options(nnfw_coverage INTERFACE -fprofile-arcs -ftest-coverage)
+ target_link_libraries(nnfw_coverage INTERFACE gcov)
+endif(ENABLE_COVERAGE)
+
+nnas_include(AddSubdirectories)
+
+add_subdirectory(${NNAS_PROJECT_SOURCE_DIR}/compute compute)
+add_subdirectory(${NNAS_PROJECT_SOURCE_DIR}/runtime runtime)
+add_subdirectory(${NNAS_PROJECT_SOURCE_DIR}/tests tests)
+add_subdirectory(${NNAS_PROJECT_SOURCE_DIR}/tools tools)
diff --git a/infra/nnfw/cmake/ApplyCompileFlags.cmake b/infra/nnfw/cmake/ApplyCompileFlags.cmake
new file mode 100644
index 000000000..956ddfe1c
--- /dev/null
+++ b/infra/nnfw/cmake/ApplyCompileFlags.cmake
@@ -0,0 +1,39 @@
+#
+# Platform independent compile flag setting
+#
+# flags for build type: debug, release
+if(${ENABLE_COVERAGE})
+ # test-coverage build flag for tizen
+ set(CMAKE_C_FLAGS_DEBUG "-O -g -DDEBUG")
+ set(CMAKE_CXX_FLAGS_DEBUG "-O -g -DDEBUG")
+else(${ENABLE_COVERAGE})
+ set(CMAKE_C_FLAGS_DEBUG "-O0 -g -DDEBUG")
+ set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -DDEBUG")
+endif(${ENABLE_COVERAGE})
+set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG")
+set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
+
+#
+# Platform specific compile flag setting
+#
+include("cmake/buildtool/config/config_${TARGET_PLATFORM}.cmake")
+
+#
+# Apply compile flags
+# note: this should be placed after cmake/buildtool/config/config_xxx.cmake files
+#
+# add common flags
+foreach(FLAG ${FLAGS_COMMON})
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAG}")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}")
+endforeach()
+
+# add c flags
+foreach(FLAG ${FLAGS_CONLY})
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAG}")
+endforeach()
+
+# add cxx flags
+foreach(FLAG ${FLAGS_CXXONLY})
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}")
+endforeach()
diff --git a/infra/nnfw/cmake/CfgOptionFlags.cmake b/infra/nnfw/cmake/CfgOptionFlags.cmake
new file mode 100644
index 000000000..4d15d9a10
--- /dev/null
+++ b/infra/nnfw/cmake/CfgOptionFlags.cmake
@@ -0,0 +1,77 @@
+include(CMakeDependentOption)
+
+#
+# Platfor specific configuration
+# note: this should be placed before default setting for option setting priority
+# (platform specific setting have higher priority)
+#
+include("cmake/options/options_${TARGET_PLATFORM}.cmake")
+
+#
+# Default build configuration for project
+#
+option(ENABLE_STRICT_BUILD "Treat warning as error" ON)
+option(ENABLE_COVERAGE "Build for coverage test" OFF)
+option(BUILD_EXT_MULTITHREAD "Build external build using multi thread" ON)
+option(BUILD_NEURUN "Build neurun" ON)
+option(BUILD_LOGGING "Build logging runtime" ON)
+option(BUILD_PURE_ARM_COMPUTE "Build pure_arm_compute runtime" OFF)
+CMAKE_DEPENDENT_OPTION(BUILD_RUNTIME_NNAPI_TEST "Build Runtime NN API Generated Test"
+ # Set BUILD_RUNTIME_NNAPI_TEST as ON
+ # if CMAKE_COMPILER_IS_GNUCC AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.2
+ ON "CMAKE_COMPILER_IS_GNUCC;NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.2"
+ # Otherwise set BUILD_RUNTIME_NNAPI_TEST as OFF
+ OFF)
+option(BUILD_TFLITE_RUN "Build tflite-run" ON)
+option(BUILD_TFLITE_BENCHMARK "Build tflite benchmark" ON)
+option(BUILD_TFLITE_BENCHMARK_MODEL "Build tflite benchmark model" OFF)
+option(BUILD_NNPACKAGE_RUN "Build nnpackge_run" ON)
+option(BUILD_SRCN_KERNEL "Build srcn kernel" OFF)
+option(BUILD_TFLITE_LOADER "Build TensorFlow Lite loader" ON)
+option(BUILD_CIRCLE_LOADER "Build circle loader" ON)
+option(BUILD_TFLITE_LOADER_TEST_TOOL "Build tflite loader testing tool" ON)
+option(GENERATE_RUNTIME_NNAPI_TESTS "Generate NNAPI operation gtest" ON)
+option(ENVVAR_NEURUN_CONFIG "Use environment variable for neurun configuration" ON)
+#
+# Default build configuration for contrib
+#
+option(BUILD_ANDROID_TFLITE "Enable android support for TensorFlow Lite" OFF)
+option(BUILD_ANDROID_BENCHMARK_APP "Enable Android Benchmark App" OFF)
+option(BUILD_BENCHMARK_ACL "Build ARM Compute Library Benchmarks" OFF)
+option(BUILD_DETECTION_APP "Build detection example app" OFF)
+option(BUILD_HEAP_TRACE "Build heap trace tool" OFF)
+option(BUILD_LABS "Build lab projects" OFF)
+option(BUILD_TFLITE_TEST "Build tensorflow lite test" OFF)
+option(BUILD_TFLITE_CLASSIFY_APP "Build tflite_classify app" OFF)
+option(BUILD_UBEN "Build micro-benchmark (uben) suite" OFF)
+option(BUILD_MLAPSE "Build mlapse benchmark toolkit" OFF)
+#
+# Default build configuration for tools
+#
+option(BUILD_KBENCHMARK "Build kernel benchmark tool" OFF)
+option(BUILD_OPENCL_TOOL "Build OpenCL tool" OFF)
+option(BUILD_NNAPI_QUICKCHECK "Build NN API Quickcheck tools" OFF)
+option(BUILD_TFLITE_ACCURACY "Build tflite accuracy tool" OFF)
+#
+# Default external libraries source download and build configuration
+#
+option(DOWNLOAD_TENSORFLOW "Download Tensorflow source" ON)
+option(DOWNLOAD_ABSL "Download Absl source" ON)
+option(DOWNLOAD_EIGEN "Download Eigen source" ON)
+option(DOWNLOAD_FARMHASH "Download farmhash source" ON)
+option(DOWNLOAD_GEMMLOWP "Download GEMM low precesion library source" ON)
+option(DOWNLOAD_NEON2SSE "Download NEON2SSE library source" ON)
+option(DOWNLOAD_NNPACK "Download NNPACK source" ON)
+option(DOWNLOAD_FLATBUFFERS "Download FlatBuffers source" ON)
+option(DOWNLOAD_ARMCOMPUTE "Download ARM Compute source" ON)
+option(DOWNLOAD_NONIUS "Download nonius source" ON)
+option(DOWNLOAD_BOOST "Download boost source" OFF)
+option(BUILD_BOOST "Build boost source" OFF)
+option(BUILD_TENSORFLOW_LITE "Build TensorFlow Lite from the downloaded source" ON)
+option(BUILD_GTEST "Download and build Google Test" ON)
+option(BUILD_ARMCOMPUTE "Build ARM Compute from the downloaded source" ON)
+
+#
+## Default sample build configuration
+#
+option(BUILD_MINIMAL_SAMPLE "Build minimal app" OFF)
diff --git a/infra/nnfw/cmake/buildtool/config/config_aarch64-android.cmake b/infra/nnfw/cmake/buildtool/config/config_aarch64-android.cmake
new file mode 100644
index 000000000..e0c81dee7
--- /dev/null
+++ b/infra/nnfw/cmake/buildtool/config/config_aarch64-android.cmake
@@ -0,0 +1,9 @@
+include("cmake/buildtool/config/config_linux.cmake")
+
+# On Android, pthread is contained in bionic(libc)
+set(LIB_PTHREAD "")
+
+# SIMD for aarch64
+set(FLAGS_COMMON ${FLAGS_COMMON}
+ "-ftree-vectorize"
+ )
diff --git a/infra/nnfw/cmake/buildtool/config/config_aarch64-linux.cmake b/infra/nnfw/cmake/buildtool/config/config_aarch64-linux.cmake
new file mode 100644
index 000000000..f859bbfe5
--- /dev/null
+++ b/infra/nnfw/cmake/buildtool/config/config_aarch64-linux.cmake
@@ -0,0 +1,12 @@
+#
+# aarch64 linux compile options
+#
+
+message(STATUS "Building for AARCH64 Linux")
+
+# include linux common
+include("cmake/buildtool/config/config_linux.cmake")
+
+# addition for aarch64-linux
+set(FLAGS_COMMON ${FLAGS_COMMON}
+ )
diff --git a/infra/nnfw/cmake/buildtool/config/config_aarch64-tizen.cmake b/infra/nnfw/cmake/buildtool/config/config_aarch64-tizen.cmake
new file mode 100644
index 000000000..fa1e8b078
--- /dev/null
+++ b/infra/nnfw/cmake/buildtool/config/config_aarch64-tizen.cmake
@@ -0,0 +1,13 @@
+#
+# aarch64 tizen compile options
+#
+
+message(STATUS "Building for AARCH64 Tizen")
+
+# TODO : add and use option_tizen if something uncommon comes up
+# include linux common
+include("cmake/buildtool/config/config_linux.cmake")
+
+# addition for aarch64-tizen
+set(FLAGS_COMMON ${FLAGS_COMMON}
+ )
diff --git a/infra/nnfw/cmake/buildtool/config/config_armv7l-linux.cmake b/infra/nnfw/cmake/buildtool/config/config_armv7l-linux.cmake
new file mode 100644
index 000000000..6d6459f0f
--- /dev/null
+++ b/infra/nnfw/cmake/buildtool/config/config_armv7l-linux.cmake
@@ -0,0 +1,18 @@
+#
+# armv7l linux compile options
+#
+
+message(STATUS "Building for ARMv7l Linux")
+
+# include linux common
+include("cmake/buildtool/config/config_linux.cmake")
+
+# addition for arm-linux
+set(FLAGS_COMMON ${FLAGS_COMMON}
+ "-mcpu=cortex-a7"
+ "-mfloat-abi=hard"
+ "-mfpu=neon-vfpv4"
+ "-funsafe-math-optimizations"
+ "-ftree-vectorize"
+ "-mfp16-format=ieee"
+ )
diff --git a/infra/nnfw/cmake/buildtool/config/config_armv7l-tizen.cmake b/infra/nnfw/cmake/buildtool/config/config_armv7l-tizen.cmake
new file mode 100644
index 000000000..a5dae2027
--- /dev/null
+++ b/infra/nnfw/cmake/buildtool/config/config_armv7l-tizen.cmake
@@ -0,0 +1,18 @@
+#
+# armv7l tizen compile options
+#
+
+message(STATUS "Building for ARMv7l(softfp) Tizen")
+
+# TODO : add and use option_tizen if something uncommon comes up
+# include linux common
+include("cmake/buildtool/config/config_linux.cmake")
+
+# addition for arm-linux
+set(FLAGS_COMMON ${FLAGS_COMMON}
+ "-mtune=cortex-a8"
+ "-mfloat-abi=softfp"
+ "-mfpu=neon-vfpv4"
+ "-funsafe-math-optimizations"
+ "-ftree-vectorize"
+ )
diff --git a/infra/nnfw/cmake/buildtool/config/config_linux.cmake b/infra/nnfw/cmake/buildtool/config/config_linux.cmake
new file mode 100644
index 000000000..86dd0f217
--- /dev/null
+++ b/infra/nnfw/cmake/buildtool/config/config_linux.cmake
@@ -0,0 +1,21 @@
+#
+# linux common compile options
+#
+
+# remove warning from arm cl
+# https://github.com/ARM-software/ComputeLibrary/issues/330
+set(GCC_VERSION_DISABLE_WARNING 6.0)
+if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER GCC_VERSION_DISABLE_WARNING)
+ message(STATUS "GCC version higher than ${GCC_VERSION_DISABLE_WARNING}")
+ set(FLAGS_CXXONLY ${FLAGS_CXXONLY}
+ "-Wno-ignored-attributes"
+ )
+endif()
+
+# Disable annoying ABI compatibility warning.
+if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0)
+ list(APPEND FLAGS_CXXONLY "-Wno-psabi")
+endif()
+
+# lib pthread as a variable (pthread must be disabled on android)
+set(LIB_PTHREAD pthread)
diff --git a/infra/nnfw/cmake/buildtool/config/config_x86_64-linux.cmake b/infra/nnfw/cmake/buildtool/config/config_x86_64-linux.cmake
new file mode 100644
index 000000000..528e48396
--- /dev/null
+++ b/infra/nnfw/cmake/buildtool/config/config_x86_64-linux.cmake
@@ -0,0 +1,12 @@
+#
+# x86_64 linux compile options
+#
+message(STATUS "Building for x86-64 Linux")
+
+# include linux common
+include("cmake/buildtool/config/config_linux.cmake")
+
+# SIMD for x86
+set(FLAGS_COMMON ${FLAGS_COMMON}
+ "-msse4"
+ )
diff --git a/infra/nnfw/cmake/buildtool/cross/toolchain_aarch64-android.cmake b/infra/nnfw/cmake/buildtool/cross/toolchain_aarch64-android.cmake
new file mode 100644
index 000000000..2b2792a6a
--- /dev/null
+++ b/infra/nnfw/cmake/buildtool/cross/toolchain_aarch64-android.cmake
@@ -0,0 +1,25 @@
+# A workaround for accessing to NDK_DIR. This works since Env Vars are always accessible
+# while cache variables are not
+if (NDK_DIR)
+ set(ENV{_NDK_DIR} "${NDK_DIR}")
+else (NDK_DIR)
+ set(NDK_DIR "$ENV{_NDK_DIR}")
+endif (NDK_DIR)
+
+if(NOT DEFINED NDK_DIR)
+ message(FATAL_ERROR "NDK_DIR should be specified via cmake argument")
+endif(NOT DEFINED NDK_DIR)
+
+set(ANDROID_ABI arm64-v8a)
+set(ANDROID_PLATFORM android-27)
+
+# Find package in the host. `nnfw_find_package` won't work without this
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER)
+# Find library in the host. Necessary for `add_library` searching in `out/lib` dir.
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
+
+# Use the toolchain file that NDK provides
+include(${NDK_DIR}/build/cmake/android.toolchain.cmake)
+
+set(TARGET_OS "android")
+set(TARGET_ARCH "aarch64")
diff --git a/infra/nnfw/cmake/buildtool/cross/toolchain_aarch64-linux.cmake b/infra/nnfw/cmake/buildtool/cross/toolchain_aarch64-linux.cmake
new file mode 100644
index 000000000..3356aa72d
--- /dev/null
+++ b/infra/nnfw/cmake/buildtool/cross/toolchain_aarch64-linux.cmake
@@ -0,0 +1,39 @@
+#
+# config for aarch64-linux
+#
+include(CMakeForceCompiler)
+
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+
+set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
+set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
+
+# where is the target environment
+set(NNAS_PROJECT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..")
+set(ROOTFS_AARCH64 "${NNAS_PROJECT_SOURCE_DIR}/tools/cross/rootfs/aarch64")
+include("${NNAS_PROJECT_SOURCE_DIR}/infra/cmake/modules/OptionTools.cmake")
+
+envoption(ROOTFS_DIR ${ROOTFS_AARCH64})
+if(NOT EXISTS "${ROOTFS_DIR}/lib/aarch64-linux-gnu")
+ message(FATAL_ERROR "Please prepare RootFS for AARCH64")
+endif()
+
+set(CMAKE_SYSROOT ${ROOTFS_DIR})
+set(CMAKE_FIND_ROOT_PATH ${ROOTFS_DIR})
+set(CMAKE_SHARED_LINKER_FLAGS
+ "${CMAKE_SHARED_LINKER_FLAGS} --sysroot=${ROOTFS_DIR}"
+ CACHE INTERNAL "" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS
+ "${CMAKE_EXE_LINKER_FLAGS} --sysroot=${ROOTFS_DIR}"
+ CACHE INTERNAL "" FORCE)
+
+# search for programs in the build host directories
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+
+# for libraries and headers in the target directories
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+# Set cache variable to ignore try-run error by find_package(Threads REQUIRED) on cross build
+set(THREADS_PTHREAD_ARG "2" CACHE STRING "Result from TRY_RUN" FORCE)
diff --git a/infra/nnfw/cmake/buildtool/cross/toolchain_aarch64-tizen.cmake b/infra/nnfw/cmake/buildtool/cross/toolchain_aarch64-tizen.cmake
new file mode 100644
index 000000000..4d5d7ac56
--- /dev/null
+++ b/infra/nnfw/cmake/buildtool/cross/toolchain_aarch64-tizen.cmake
@@ -0,0 +1,62 @@
+#
+# config for aarch64-linux
+#
+include(CMakeForceCompiler)
+
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+
+set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
+set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
+
+set(TIZEN_TOOLCHAIN "aarch64-tizen-linux-gnu/6.2.1")
+
+# where is the target environment
+set(NNAS_PROJECT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..")
+set(ROOTFS_AARCH64 "${NNAS_PROJECT_SOURCE_DIR}/tools/cross/rootfs/aarch64")
+include("${NNAS_PROJECT_SOURCE_DIR}/infra/cmake/modules/OptionTools.cmake")
+
+envoption(ROOTFS_DIR ${ROOTFS_AARCH64})
+if(NOT EXISTS "${ROOTFS_DIR}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
+ message(FATAL_ERROR "Please prepare RootFS for tizen aarch64")
+endif()
+
+set(CMAKE_SYSROOT ${ROOTFS_DIR})
+set(CMAKE_FIND_ROOT_PATH ${ROOTFS_DIR})
+set(CMAKE_SHARED_LINKER_FLAGS
+ "${CMAKE_SHARED_LINKER_FLAGS} --sysroot=${ROOTFS_DIR}"
+ CACHE INTERNAL "" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS
+ "${CMAKE_EXE_LINKER_FLAGS} --sysroot=${ROOTFS_DIR}"
+ CACHE INTERNAL "" FORCE)
+
+# search for programs in the build host directories
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+
+# for libraries and headers in the target directories
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+# Set cache variable to ignore try-run error by find_package(Threads REQUIRED) on cross build
+set(THREADS_PTHREAD_ARG "2" CACHE STRING "Result from TRY_RUN" FORCE)
+
+add_compile_options(--sysroot=${ROOTFS_DIR})
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --sysroot=${ROOTFS_DIR}")
+
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --sysroot=${ROOTFS_DIR}")
+
+include_directories(SYSTEM ${ROOTFS_DIR}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
+include_directories(SYSTEM ${ROOTFS_DIR}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/aarch64-tizen-linux-gnu)
+add_compile_options(-Wno-deprecated-declarations) # compile-time option
+add_compile_options(-D__extern_always_inline=inline) # compile-time option
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -B${ROOTFS_DIR}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -L${ROOTFS_DIR}/lib64")
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -L${ROOTFS_DIR}/usr/lib64")
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -L${ROOTFS_DIR}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
+
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -B${ROOTFS_DIR}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${ROOTFS_DIR}/lib64")
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${ROOTFS_DIR}/usr/lib64")
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${ROOTFS_DIR}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
diff --git a/infra/nnfw/cmake/buildtool/cross/toolchain_armv7l-linux.cmake b/infra/nnfw/cmake/buildtool/cross/toolchain_armv7l-linux.cmake
new file mode 100644
index 000000000..8f2cb6735
--- /dev/null
+++ b/infra/nnfw/cmake/buildtool/cross/toolchain_armv7l-linux.cmake
@@ -0,0 +1,39 @@
+#
+# config for arm-linux
+#
+include(CMakeForceCompiler)
+
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR armv7l)
+
+set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
+set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
+
+# where is the target environment
+set(NNAS_PROJECT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..")
+set(ROOTFS_ARM "${NNAS_PROJECT_SOURCE_DIR}/tools/cross/rootfs/arm")
+include("${NNAS_PROJECT_SOURCE_DIR}/infra/cmake/modules/OptionTools.cmake")
+
+envoption(ROOTFS_DIR ${ROOTFS_ARM})
+if(NOT EXISTS "${ROOTFS_DIR}/lib/arm-linux-gnueabihf")
+ message(FATAL_ERROR "Please prepare RootFS for ARM")
+endif()
+
+set(CMAKE_SYSROOT ${ROOTFS_DIR})
+set(CMAKE_FIND_ROOT_PATH ${ROOTFS_DIR})
+set(CMAKE_SHARED_LINKER_FLAGS
+ "${CMAKE_SHARED_LINKER_FLAGS} --sysroot=${ROOTFS_DIR}"
+ CACHE INTERNAL "" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS
+ "${CMAKE_EXE_LINKER_FLAGS} --sysroot=${ROOTFS_DIR}"
+ CACHE INTERNAL "" FORCE)
+
+# search for programs in the build host directories
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+
+# for libraries and headers in the target directories
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+# Set cache variable to ignore try-run error by find_package(Threads REQUIRED) on cross build
+set(THREADS_PTHREAD_ARG "2" CACHE STRING "Result from TRY_RUN" FORCE)
diff --git a/infra/nnfw/cmake/buildtool/cross/toolchain_armv7l-tizen.cmake b/infra/nnfw/cmake/buildtool/cross/toolchain_armv7l-tizen.cmake
new file mode 100644
index 000000000..72513cdc1
--- /dev/null
+++ b/infra/nnfw/cmake/buildtool/cross/toolchain_armv7l-tizen.cmake
@@ -0,0 +1,66 @@
+#
+# config for arm-linux
+#
+include(CMakeForceCompiler)
+
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR armv7l)
+
+set(CMAKE_C_COMPILER arm-linux-gnueabi-gcc)
+set(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++)
+
+set(TIZEN_TOOLCHAIN "armv7l-tizen-linux-gnueabi/6.2.1")
+
+# where is the target environment
+set(NNAS_PROJECT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..")
+set(ROOTFS_ARM "${NNAS_PROJECT_SOURCE_DIR}/tools/cross/rootfs/armel")
+include("${NNAS_PROJECT_SOURCE_DIR}/infra/cmake/modules/OptionTools.cmake")
+
+envoption(ROOTFS_DIR ${ROOTFS_ARM})
+if(NOT EXISTS "${ROOTFS_DIR}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+ message(FATAL_ERROR "Please prepare RootFS for tizen ARM softfp")
+endif()
+
+set(CMAKE_SYSROOT ${ROOTFS_DIR})
+set(CMAKE_FIND_ROOT_PATH ${ROOTFS_DIR})
+set(CMAKE_SHARED_LINKER_FLAGS
+ "${CMAKE_SHARED_LINKER_FLAGS} --sysroot=${ROOTFS_DIR}"
+ CACHE INTERNAL "" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS
+ "${CMAKE_EXE_LINKER_FLAGS} --sysroot=${ROOTFS_DIR}"
+ CACHE INTERNAL "" FORCE)
+
+# search for programs in the build host directories
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+
+# for libraries and headers in the target directories
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+# Set cache variable to ignore try-run error by find_package(Threads REQUIRED) on cross build
+set(THREADS_PTHREAD_ARG "2" CACHE STRING "Result from TRY_RUN" FORCE)
+
+
+add_compile_options(-mthumb)
+add_compile_options(-mfpu=neon-vfpv4)
+add_compile_options(-mfloat-abi=softfp)
+add_compile_options(--sysroot=${ROOTFS_DIR})
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --sysroot=${ROOTFS_DIR}")
+
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --sysroot=${ROOTFS_DIR}")
+
+include_directories(SYSTEM ${ROOTFS_DIR}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
+include_directories(SYSTEM ${ROOTFS_DIR}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/armv7l-tizen-linux-gnueabi)
+add_compile_options(-Wno-deprecated-declarations) # compile-time option
+add_compile_options(-D__extern_always_inline=inline) # compile-time option
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -B${ROOTFS_DIR}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -L${ROOTFS_DIR}/lib")
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -L${ROOTFS_DIR}/usr/lib")
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -L${ROOTFS_DIR}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -B${ROOTFS_DIR}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${ROOTFS_DIR}/lib")
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${ROOTFS_DIR}/usr/lib")
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${ROOTFS_DIR}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
diff --git a/infra/nnfw/cmake/options/options_aarch64-android.cmake b/infra/nnfw/cmake/options/options_aarch64-android.cmake
new file mode 100644
index 000000000..2393764a1
--- /dev/null
+++ b/infra/nnfw/cmake/options/options_aarch64-android.cmake
@@ -0,0 +1,17 @@
+# aarch64 android cmake options
+#
+option(BUILD_ARMCOMPUTE "Build ARM Compute from the downloaded source" OFF)
+# NOTE BUILD_ANDROID_TFLITE(JNI lib) is disabled due to BuiltinOpResolver issue.
+# tensorflow-lite does not build BuiltinOpResolver but JNI lib need it
+# Related Issue : #1403
+option(BUILD_ANDROID_TFLITE "Enable android support for TensorFlow Lite" ON)
+option(BUILD_ANDROID_BENCHMARK_APP "Enable Android Benchmark App" ON)
+option(DOWNLOAD_NEON2SSE "Download NEON2SSE library source" OFF)
+# Need boost library
+option(BUILD_RUNTIME_NNAPI_TEST "Build Runtime NN API Generated Test" OFF)
+option(BUILD_NNPACKAGE_RUN "Build nnpackge_run" OFF)
+option(BUILD_TFLITE_RUN "Build tflite-run" OFF)
+option(BUILD_TFLITE_LOADER_TEST_TOOL "Build tflite loader testing tool" OFF)
+option(BUILD_LOGGING "Build logging runtime" OFF)
+
+option(ENABLE_STRICT_BUILD "Treat warning as error" OFF)
diff --git a/infra/nnfw/cmake/options/options_aarch64-linux.cmake b/infra/nnfw/cmake/options/options_aarch64-linux.cmake
new file mode 100644
index 000000000..179030ec8
--- /dev/null
+++ b/infra/nnfw/cmake/options/options_aarch64-linux.cmake
@@ -0,0 +1,5 @@
+#
+# aarch64 linux cmake options
+#
+option(DOWNLOAD_NEON2SSE "Download NEON2SSE library source" OFF)
+option(BUILD_SRCN_KERNEL "Build srcn kernel" ON)
diff --git a/infra/nnfw/cmake/options/options_aarch64-tizen.cmake b/infra/nnfw/cmake/options/options_aarch64-tizen.cmake
new file mode 100644
index 000000000..23eecbc46
--- /dev/null
+++ b/infra/nnfw/cmake/options/options_aarch64-tizen.cmake
@@ -0,0 +1,15 @@
+#
+# aarch64 tizen cmake options
+#
+option(BUILD_ARMCOMPUTE "Build ARM Compute from the downloaded source" OFF)
+option(BUILD_TENSORFLOW_LITE "Build TensorFlow Lite from the downloaded source" OFF)
+option(DOWNLOAD_EIGEN "Download Eigen source" OFF)
+option(DOWNLOAD_NEON2SSE "Download NEON2SSE library source" OFF)
+option(DOWNLOAD_NNPACK "Download NNPACK source" OFF)
+
+option(BUILD_LOGGING "Build logging runtime" OFF)
+option(BUILD_TFLITE_RUN "Build tflite-run" OFF)
+option(BUILD_TFLITE_LOADER_TEST_TOOL "Build tflite loader testing tool" OFF)
+option(BUILD_SRCN_KERNEL "Build srcn kernel" ON)
+option(GENERATE_RUNTIME_NNAPI_TESTS "Generate NNAPI operation gtest" OFF)
+option(ENVVAR_NEURUN_CONFIG "Use environment variable for neurun configuration" OFF)
diff --git a/infra/nnfw/cmake/options/options_armv7l-linux.cmake b/infra/nnfw/cmake/options/options_armv7l-linux.cmake
new file mode 100644
index 000000000..ec2f8d6ed
--- /dev/null
+++ b/infra/nnfw/cmake/options/options_armv7l-linux.cmake
@@ -0,0 +1,6 @@
+#
+# armv7l linux cmake options
+#
+option(DOWNLOAD_NEON2SSE "Download NEON2SSE library source" OFF)
+option(BUILD_SRCN_KERNEL "Build srcn kernel" ON)
+option(BUILD_OPENCL_TOOL "Build OpenCL tool" ON)
diff --git a/infra/nnfw/cmake/options/options_armv7l-tizen.cmake b/infra/nnfw/cmake/options/options_armv7l-tizen.cmake
new file mode 100644
index 000000000..af31958ff
--- /dev/null
+++ b/infra/nnfw/cmake/options/options_armv7l-tizen.cmake
@@ -0,0 +1,14 @@
+#
+# armv7l tizen cmake options
+#
+option(BUILD_ARMCOMPUTE "Build ARM Compute from the downloaded source" OFF)
+option(BUILD_TENSORFLOW_LITE "Build TensorFlow Lite from the downloaded source" OFF)
+option(DOWNLOAD_EIGEN "Download Eigen source" OFF)
+option(DOWNLOAD_NEON2SSE "Download NEON2SSE library source" OFF)
+option(DOWNLOAD_NNPACK "Download NNPACK source" OFF)
+
+option(BUILD_LOGGING "Build logging runtime" OFF)
+option(BUILD_TFLITE_RUN "Build tflite-run" OFF)
+option(BUILD_SRCN_KERNEL "Build srcn kernel" ON)
+option(GENERATE_RUNTIME_NNAPI_TESTS "Generate NNAPI operation gtest" OFF)
+option(ENVVAR_NEURUN_CONFIG "Use environment variable for neurun configuration" OFF)
diff --git a/infra/nnfw/cmake/options/options_x86_64-linux.cmake b/infra/nnfw/cmake/options/options_x86_64-linux.cmake
new file mode 100644
index 000000000..97642e6ce
--- /dev/null
+++ b/infra/nnfw/cmake/options/options_x86_64-linux.cmake
@@ -0,0 +1,5 @@
+#
+# x86_64 linux cmake options
+#
+option(BUILD_ARMCOMPUTE "Build ARM Compute from the downloaded source" OFF)
+option(DOWNLOAD_ARMCOMPUTE "Download ARM Compute source" OFF)
diff --git a/infra/nnfw/cmake/packages/AbslSourceConfig.cmake b/infra/nnfw/cmake/packages/AbslSourceConfig.cmake
new file mode 100644
index 000000000..c3bab13e7
--- /dev/null
+++ b/infra/nnfw/cmake/packages/AbslSourceConfig.cmake
@@ -0,0 +1,14 @@
+function(_AbslSource_import)
+ nnas_include(ExternalSourceTools)
+ nnas_include(OptionTools)
+
+ # NOTE The following URL comes from TensorFlow 1.12
+ envoption(EXTERNAL_DOWNLOAD_SERVER "https://github.com")
+ set(ABSL_URL ${EXTERNAL_DOWNLOAD_SERVER}/abseil/abseil-cpp/archive/389ec3f906f018661a5308458d623d01f96d7b23.tar.gz)
+ ExternalSource_Get("absl" ${DOWNLOAD_ABSL} ${ABSL_URL})
+
+ set(AbslSource_DIR ${absl_SOURCE_DIR} PARENT_SCOPE)
+ set(AbslSource_FOUND ${absl_SOURCE_GET} PARENT_SCOPE)
+endfunction(_AbslSource_import)
+
+_AbslSource_import()
diff --git a/infra/nnfw/cmake/packages/EigenConfig.cmake b/infra/nnfw/cmake/packages/EigenConfig.cmake
new file mode 100644
index 000000000..7a8d3d5c6
--- /dev/null
+++ b/infra/nnfw/cmake/packages/EigenConfig.cmake
@@ -0,0 +1,17 @@
+function(_Eigen_import)
+ nnfw_find_package(EigenSource QUIET)
+
+ if(NOT EigenSource_FOUND)
+ set(Eigen_FOUND FALSE PARENT_SCOPE)
+ return()
+ endif(NOT EigenSource_FOUND)
+
+ if(NOT TARGET eigen)
+ add_library(eigen INTERFACE)
+ target_include_directories(eigen SYSTEM INTERFACE "${EigenSource_DIR}")
+ endif(NOT TARGET eigen)
+
+ set(Eigen_FOUND TRUE PARENT_SCOPE)
+endfunction(_Eigen_import)
+
+_Eigen_import()
diff --git a/infra/nnfw/cmake/packages/EigenSourceConfig.cmake b/infra/nnfw/cmake/packages/EigenSourceConfig.cmake
new file mode 100644
index 000000000..1fbcf13d3
--- /dev/null
+++ b/infra/nnfw/cmake/packages/EigenSourceConfig.cmake
@@ -0,0 +1,14 @@
+function(_EigenSource_import)
+ nnas_include(ExternalSourceTools)
+ nnas_include(OptionTools)
+
+ # NOTE TensorFlow 1.12 downloads Eign from the following URL
+ envoption(EXTERNAL_DOWNLOAD_SERVER "https://bitbucket.org")
+ set(EIGEN_URL ${EXTERNAL_DOWNLOAD_SERVER}/eigen/eigen/get/88fc23324517.tar.gz)
+ ExternalSource_Get("eigen" ${DOWNLOAD_EIGEN} ${EIGEN_URL})
+
+ set(EigenSource_DIR ${eigen_SOURCE_DIR} PARENT_SCOPE)
+ set(EigenSource_FOUND ${eigen_SOURCE_GET} PARENT_SCOPE)
+endfunction(_EigenSource_import)
+
+_EigenSource_import()
diff --git a/infra/nnfw/cmake/packages/FarmhashSourceConfig.cmake b/infra/nnfw/cmake/packages/FarmhashSourceConfig.cmake
new file mode 100644
index 000000000..cba3c3c27
--- /dev/null
+++ b/infra/nnfw/cmake/packages/FarmhashSourceConfig.cmake
@@ -0,0 +1,14 @@
+function(_FarmhashSource_import)
+ nnas_include(ExternalSourceTools)
+ nnas_include(OptionTools)
+
+ # NOTE TensorFlow 1.12 downloads farmhash from the following URL
+ envoption(EXTERNAL_DOWNLOAD_SERVER "https://github.com")
+ set(FARMHASH_URL ${EXTERNAL_DOWNLOAD_SERVER}/google/farmhash/archive/816a4ae622e964763ca0862d9dbd19324a1eaf45.tar.gz)
+ ExternalSource_Get("farmhash" ${DOWNLOAD_FARMHASH} ${FARMHASH_URL})
+
+ set(FarmhashSource_DIR ${farmhash_SOURCE_DIR} PARENT_SCOPE)
+ set(FarmhashSource_FOUND ${farmhash_SOURCE_GET} PARENT_SCOPE)
+endfunction(_FarmhashSource_import)
+
+_FarmhashSource_import()
diff --git a/infra/nnfw/cmake/packages/FlatBuffersConfig.cmake b/infra/nnfw/cmake/packages/FlatBuffersConfig.cmake
new file mode 100644
index 000000000..064673158
--- /dev/null
+++ b/infra/nnfw/cmake/packages/FlatBuffersConfig.cmake
@@ -0,0 +1,77 @@
+function(_FlatBuffers_import)
+ nnfw_find_package(FlatBuffersSource QUIET)
+
+ if(NOT FlatBuffersSource_FOUND)
+ set(FlatBuffers_FOUND FALSE PARENT_SCOPE)
+ return()
+ endif(NOT FlatBuffersSource_FOUND)
+
+ # From FlatBuffers's CMakeLists.txt
+ list(APPEND FlatBuffers_Library_SRCS "${FlatBuffersSource_DIR}/src/code_generators.cpp")
+ list(APPEND FlatBuffers_Library_SRCS "${FlatBuffersSource_DIR}/src/idl_parser.cpp")
+ list(APPEND FlatBuffers_Library_SRCS "${FlatBuffersSource_DIR}/src/idl_gen_text.cpp")
+ list(APPEND FlatBuffers_Library_SRCS "${FlatBuffersSource_DIR}/src/reflection.cpp")
+ list(APPEND FlatBuffers_Library_SRCS "${FlatBuffersSource_DIR}/src/util.cpp")
+
+ # From FlatBuffers's CMakeLists.txt
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/idl_gen_cpp.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/idl_gen_dart.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/idl_gen_fbs.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/idl_gen_general.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/idl_gen_go.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/idl_gen_grpc.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/idl_gen_js.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/idl_gen_json_schema.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/idl_gen_lobster.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/idl_gen_lua.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/idl_gen_php.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/idl_gen_python.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/flatc.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/src/flatc_main.cpp")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/grpc/src/compiler/cpp_generator.cc")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/grpc/src/compiler/go_generator.cc")
+ list(APPEND FlatBuffers_Compiler_SRCS "${FlatBuffersSource_DIR}/grpc/src/compiler/java_generator.cc")
+
+ if(NOT TARGET flatbuffers)
+ add_library(flatbuffers ${FlatBuffers_Library_SRCS})
+ target_include_directories(flatbuffers PUBLIC "${FlatBuffersSource_DIR}/include")
+ endif(NOT TARGET flatbuffers)
+
+ if(NOT TARGET flatc)
+ add_executable(flatc ${FlatBuffers_Compiler_SRCS})
+ target_include_directories(flatc PRIVATE "${FlatBuffersSource_DIR}/grpc")
+ target_link_libraries(flatc flatbuffers)
+ endif(NOT TARGET flatc)
+
+ set(FlatBuffers_FOUND TRUE PARENT_SCOPE)
+endfunction(_FlatBuffers_import)
+
+_FlatBuffers_import()
+
+if(FlatBuffers_FOUND)
+ function(FlatBuffers_Generate PREFIX OUTPUT_DIR SCHEMA_DIR)
+ get_filename_component(abs_output_dir ${OUTPUT_DIR} ABSOLUTE)
+ get_filename_component(abs_schema_dir ${SCHEMA_DIR} ABSOLUTE)
+
+ foreach(schema ${ARGN})
+ get_filename_component(schema_fn "${schema}" NAME)
+ get_filename_component(dir "${schema}" DIRECTORY)
+
+ get_filename_component(schema_fn_we "${schema_fn}" NAME_WE)
+
+ list(APPEND SCHEMA_FILES "${abs_schema_dir}/${schema}")
+ list(APPEND OUTPUT_FILES "${abs_output_dir}/${schema_fn_we}_generated.h")
+ endforeach()
+
+ add_custom_command(OUTPUT ${OUTPUT_FILES}
+ COMMAND ${CMAKE_COMMAND} -E make_directory "${abs_output_dir}"
+ COMMAND "$<TARGET_FILE:flatc>" -c --no-includes
+ --no-union-value-namespacing
+ --gen-object-api -o "${abs_output_dir}"
+ ${SCHEMA_FILES}
+ DEPENDS flatc)
+
+ set(${PREFIX}_SOURCES ${OUTPUT_FILES} PARENT_SCOPE)
+ set(${PREFIX}_INCLUDE_DIRS ${abs_output_dir} PARENT_SCOPE)
+ endfunction(FlatBuffers_Generate)
+endif(FlatBuffers_FOUND)
diff --git a/infra/nnfw/cmake/packages/FlatBuffersSourceConfig.cmake b/infra/nnfw/cmake/packages/FlatBuffersSourceConfig.cmake
new file mode 100644
index 000000000..5a59ef3f7
--- /dev/null
+++ b/infra/nnfw/cmake/packages/FlatBuffersSourceConfig.cmake
@@ -0,0 +1,14 @@
+function(_FlatBuffersSource_import)
+ nnas_include(ExternalSourceTools)
+ nnas_include(OptionTools)
+
+ # NOTE TensorFlow 1.12 downloads FlatBuffers from the following URL
+ envoption(EXTERNAL_DOWNLOAD_SERVER "https://github.com")
+ set(FLATBUFFERS_URL ${EXTERNAL_DOWNLOAD_SERVER}/google/flatbuffers/archive/1f5eae5d6a135ff6811724f6c57f911d1f46bb15.tar.gz)
+ ExternalSource_Get("flatbuffers" ${DOWNLOAD_FLATBUFFERS} ${FLATBUFFERS_URL})
+
+ set(FlatBuffersSource_DIR ${flatbuffers_SOURCE_DIR} PARENT_SCOPE)
+ set(FlatBuffersSource_FOUND ${flatbuffers_SOURCE_GET} PARENT_SCOPE)
+endfunction(_FlatBuffersSource_import)
+
+_FlatBuffersSource_import()
diff --git a/infra/nnfw/cmake/packages/GEMMLowpSourceConfig.cmake b/infra/nnfw/cmake/packages/GEMMLowpSourceConfig.cmake
new file mode 100644
index 000000000..d800cdcd4
--- /dev/null
+++ b/infra/nnfw/cmake/packages/GEMMLowpSourceConfig.cmake
@@ -0,0 +1,14 @@
+function(_GEMMLowpSource_import)
+ nnas_include(ExternalSourceTools)
+ nnas_include(OptionTools)
+
+ # NOTE TensorFlow 1.12 uses the following URL
+ envoption(EXTERNAL_DOWNLOAD_SERVER "https://github.com")
+ set(GEMMLOWP_URL ${EXTERNAL_DOWNLOAD_SERVER}/google/gemmlowp/archive/38ebac7b059e84692f53e5938f97a9943c120d98.tar.gz)
+ ExternalSource_Get("gemmlowp" ${DOWNLOAD_GEMMLOWP} ${GEMMLOWP_URL})
+
+ set(GEMMLowpSource_DIR ${gemmlowp_SOURCE_DIR} PARENT_SCOPE)
+ set(GEMMLowpSource_FOUND ${gemmlowp_SOURCE_GET} PARENT_SCOPE)
+endfunction(_GEMMLowpSource_import)
+
+_GEMMLowpSource_import()
diff --git a/infra/nnfw/cmake/packages/GTestConfig.cmake b/infra/nnfw/cmake/packages/GTestConfig.cmake
new file mode 100644
index 000000000..b4dd05fd4
--- /dev/null
+++ b/infra/nnfw/cmake/packages/GTestConfig.cmake
@@ -0,0 +1,99 @@
+if(${BUILD_GTEST})
+ nnas_include(ExternalSourceTools)
+ nnas_include(ExternalProjectTools)
+ nnas_include(OptionTools)
+
+ envoption(EXTERNAL_DOWNLOAD_SERVER "https://github.com")
+ set(GTEST_URL ${EXTERNAL_DOWNLOAD_SERVER}/google/googletest/archive/release-1.8.0.tar.gz)
+ ExternalSource_Get("gtest" TRUE ${GTEST_URL})
+
+ # gtest_SOURCE_DIR is used in gtest subdirectorty's cmake
+ set(sourcedir_gtest ${gtest_SOURCE_DIR})
+ unset(gtest_SOURCE_DIR)
+
+ if(NOT TARGET gtest_main)
+ add_extdirectory(${sourcedir_gtest} gtest EXCLUDE_FROM_ALL)
+ endif(NOT TARGET gtest_main)
+
+ set(GTest_FOUND TRUE)
+ return()
+endif(${BUILD_GTEST})
+
+### Find and use pre-installed Google Test
+find_package(GTest)
+find_package(Threads)
+
+if(${GTEST_FOUND} AND TARGET Threads::Threads)
+ if(NOT TARGET gtest)
+ add_library(gtest INTERFACE)
+ target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIRS})
+ target_link_libraries(gtest INTERFACE ${GTEST_LIBRARIES} Threads::Threads)
+ endif(NOT TARGET gtest)
+
+ if(NOT TARGET gtest_main)
+ add_library(gtest_main INTERFACE)
+ target_include_directories(gtest_main INTERFACE ${GTEST_INCLUDE_DIRS})
+ target_link_libraries(gtest_main INTERFACE gtest)
+ target_link_libraries(gtest_main INTERFACE ${GTEST_MAIN_LIBRARIES})
+ endif(NOT TARGET gtest_main)
+
+ if(NOT TARGET gmock)
+ find_library(GMOCK_LIBRARIES gmock)
+ find_path(GMOCK_INCLUDE_DIR gmock/gmock.h)
+ if(GMOCK_LIBRARIES AND GMOCK_INCLUDE_DIR)
+ add_library(gmock INTERFACE)
+ target_include_directories(gmock INTERFACE ${GMOCK_INCLUDE_DIR})
+ target_link_libraries(gmock INTERFACE ${GMOCK_LIBRARIES} Threads::Threads)
+ endif(GMOCK_LIBRARIES)
+ endif(NOT TARGET gmock)
+
+ if(NOT TARGET gmock_main)
+ find_library(GMOCK_MAIN_LIBRARIES gmock_main)
+ find_path(GMOCK_INCLUDE_DIR gmock/gmock.h)
+ if(GMOCK_MAIN_LIBRARIES AND GMOCK_INCLUDE_DIR)
+ add_library(gmock_main INTERFACE)
+ target_include_directories(gmock_main INTERFACE ${GMOCK_INCLUDE_DIR})
+ target_link_libraries(gmock_main INTERFACE gmock)
+ target_link_libraries(gmock_main INTERFACE ${GMOCK_MAIN_LIBRARIES})
+ endif(GMOCK_MAIN_LIBRARIES AND GMOCK_INCLUDE_DIR)
+ endif(NOT TARGET gmock_main)
+
+ # TODO Check whether this command is necessary or not
+ include_directories(${GTEST_INCLUDE_DIR})
+ set(GTest_FOUND TRUE)
+else(${GTEST_FOUND} AND TARGET Threads::Threads)
+ find_path(GTEST_INCLUDE_DIR gtest/gtest.h)
+ find_path(GMOCK_INCLUDE_DIR gmock/gmock.h)
+ find_library(GMOCK_LIBRARIES libgmock.so)
+ find_library(GMOCK_MAIN_LIBRARIES libgmock_main.so)
+
+ if(GTEST_INCLUDE_DIR AND GMOCK_INCLUDE_DIR AND GMOCK_LIBRARIES AND GMOCK_MAIN_LIBRARIES AND TARGET Threads::Threads)
+ if(NOT TARGET gmock)
+ add_library(gmock INTERFACE)
+ target_include_directories(gmock INTERFACE ${GMOCK_INCLUDE_DIRS})
+ target_link_libraries(gmock INTERFACE ${GMOCK_LIBRARIES} Threads::Threads)
+ endif(NOT TARGET gmock)
+
+ if(NOT TARGET gmock_main)
+ add_library(gmock_main INTERFACE)
+ target_include_directories(gmock_main INTERFACE ${GMOCK_INCLUDE_DIRS})
+ target_link_libraries(gmock_main INTERFACE gmock)
+ target_link_libraries(gmock_main INTERFACE ${GMOCK_MAIN_LIBRARIES})
+ endif(NOT TARGET gmock_main)
+
+ if(NOT TARGET gtest)
+ add_library(gtest INTERFACE)
+ target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIRS})
+ target_link_libraries(gtest INTERFACE ${GMOCK_LIBRARIES} Threads::Threads)
+ endif(NOT TARGET gtest)
+
+ if(NOT TARGET gtest_main)
+ add_library(gtest_main INTERFACE)
+ target_include_directories(gtest_main INTERFACE ${GTEST_INCLUDE_DIRS})
+ target_link_libraries(gtest_main INTERFACE gtest)
+ target_link_libraries(gtest_main INTERFACE ${GMOCK_MAIN_LIBRARIES})
+ endif(NOT TARGET gtest_main)
+
+ set(GTest_FOUND TRUE)
+ endif(GTEST_INCLUDE_DIR AND GMOCK_INCLUDE_DIR AND GMOCK_LIBRARIES AND GMOCK_MAIN_LIBRARIES AND TARGET Threads::Threads)
+endif(${GTEST_FOUND} AND TARGET Threads::Threads)
diff --git a/infra/nnfw/cmake/packages/HDF5Config.cmake b/infra/nnfw/cmake/packages/HDF5Config.cmake
new file mode 100644
index 000000000..1f90deaf9
--- /dev/null
+++ b/infra/nnfw/cmake/packages/HDF5Config.cmake
@@ -0,0 +1,31 @@
+unset(HDF5_DIR CACHE)
+find_package(HDF5 QUIET)
+
+if (NOT HDF5_FOUND)
+ # Give second chance for some systems where sytem find_package config mode fails
+ unset(HDF5_FOUND)
+
+ find_path(HDF5_INCLUDE_DIRS NAMES hdf5.h PATH_SUFFIXES include/hdf5/serial)
+
+ if (NOT HDF5_INCLUDE_DIRS)
+ set(HDF5_FOUND FALSE)
+ return()
+ endif()
+
+ if (HDF5_USE_STATIC_LIBRARIES)
+ find_library(HDF5_LIBRARIES libhdf5.a)
+ else (HDF5_USE_STATIC_LIBRARIES)
+ find_library(HDF5_LIBRARIES libhdf5.so)
+ endif(HDF5_USE_STATIC_LIBRARIES)
+
+ if (NOT HDF5_LIBRARIES)
+ set(HDF5_FOUND FALSE)
+ return()
+ endif()
+ list(APPEND HDF5_LIBRARIES "sz" "z" "dl" "m")
+
+ set(HDF5_FOUND TRUE)
+endif()
+
+# Append missing libaec which is required by libsz, which is required by libhdf5
+list(APPEND HDF5_LIBRARIES "aec")
diff --git a/infra/nnfw/cmake/packages/NEON2SSESourceConfig.cmake b/infra/nnfw/cmake/packages/NEON2SSESourceConfig.cmake
new file mode 100644
index 000000000..b1bf6cfb9
--- /dev/null
+++ b/infra/nnfw/cmake/packages/NEON2SSESourceConfig.cmake
@@ -0,0 +1,20 @@
+function(_NEON2SSESource_import)
+ # TODO Remove this workaround once target preset is ready
+ if(NOT (TARGET_ARCH_BASE STREQUAL "x86_64"))
+ set(NEON2SSESource_FOUND FALSE PARENT_SCOPE)
+ return()
+ endif(NOT (TARGET_ARCH_BASE STREQUAL "x86_64"))
+
+ nnas_include(ExternalSourceTools)
+ nnas_include(OptionTools)
+
+ # NOTE TensorFlow 1.12 downloads NEON2SSE from the following URL
+ envoption(EXTERNAL_DOWNLOAD_SERVER "https://github.com")
+ set(NEON2SSE_URL ${EXTERNAL_DOWNLOAD_SERVER}/intel/ARM_NEON_2_x86_SSE/archive/0f77d9d182265259b135dad949230ecbf1a2633d.tar.gz)
+ ExternalSource_Get("neon_2_sse" ${DOWNLOAD_NEON2SSE} ${NEON2SSE_URL})
+
+ set(NEON2SSESource_DIR ${neon_2_sse_SOURCE_DIR} PARENT_SCOPE)
+ set(NEON2SSESource_FOUND ${neon_2_sse_SOURCE_GET} PARENT_SCOPE)
+endfunction(_NEON2SSESource_import)
+
+_NEON2SSESource_import()
diff --git a/infra/nnfw/cmake/packages/TensorFlowLite/CMakeLists.txt b/infra/nnfw/cmake/packages/TensorFlowLite/CMakeLists.txt
new file mode 100644
index 000000000..00ec4b5e2
--- /dev/null
+++ b/infra/nnfw/cmake/packages/TensorFlowLite/CMakeLists.txt
@@ -0,0 +1,63 @@
+set(TENSORFLOW_LITE_BASE ${TensorFlowSource_DIR}/tensorflow/lite)
+
+#
+# Tensorflow Lite library
+#
+file(GLOB TFLITE_CORE_SRCS "${TENSORFLOW_LITE_BASE}/*.c" "${TENSORFLOW_LITE_BASE}/*.cc" "${TENSORFLOW_LITE_BASE}/core/*.cc")
+file(GLOB TFLITE_CORE_TESTS "${TENSORFLOW_LITE_BASE}/*test*.cc")
+list(REMOVE_ITEM TFLITE_CORE_SRCS ${TFLITE_CORE_TESTS})
+
+file(GLOB_RECURSE TFLITE_KERNEL_SRCS "${TENSORFLOW_LITE_BASE}/kernels/*.cc")
+file(GLOB_RECURSE TFLITE_KERNEL_TESTS "${TENSORFLOW_LITE_BASE}/kernels/*test*.cc")
+list(REMOVE_ITEM TFLITE_KERNEL_SRCS ${TFLITE_KERNEL_TESTS})
+
+file(GLOB TFLITE_LIB_SRCS "${TENSORFLOW_LITE_BASE}/c/*.c" "${TENSORFLOW_LITE_BASE}/c/*.cc")
+file(GLOB TFLITE_LIB_TESTS "${TENSORFLOW_LITE_BASE}/c/*test*.cc")
+list(REMOVE_ITEM TFLITE_LIB_SRCS ${TFLITE_LIB_TESTS})
+
+file(GLOB TFLITE_API_SRCS "${TENSORFLOW_LITE_BASE}/core/api/*.c" "${TENSORFLOW_LITE_BASE}/core/api/*.cc")
+file(GLOB TFLITE_API_TESTS "${TENSORFLOW_LITE_BASE}/core/api/*test*.cc")
+list(REMOVE_ITEM TFLITE_API_SRCS ${TFLITE_API_TESTS})
+
+file(GLOB TFLITE_PROFILING_SRCS "${TENSORFLOW_LITE_BASE}/profiling/*.cc")
+file(GLOB TFLITE_PROFILING_TESTS "${TENSORFLOW_LITE_BASE}/profiling/*test*.cc")
+list(REMOVE_ITEM TFLITE_PROFILING_SRCS ${TFLITE_PROFILING_TESTS})
+
+# We will use our own BuiltinOpResolver
+list(REMOVE_ITEM TFLITE_KERNEL_SRCS "${TENSORFLOW_LITE_BASE}/kernels/register.cc")
+# We will use our own summarizer
+list(REMOVE_ITEM TFLITE_PROFILING_SRCS "${TENSORFLOW_LITE_BASE}/profiling/profile_summarizer.cc")
+list(APPEND TFLITE_SRCS ${TFLITE_CORE_SRCS})
+list(APPEND TFLITE_SRCS ${TFLITE_KERNEL_SRCS})
+list(APPEND TFLITE_SRCS ${TFLITE_LIB_SRCS})
+list(APPEND TFLITE_SRCS ${TFLITE_API_SRCS})
+list(APPEND TFLITE_SRCS ${TFLITE_PROFILING_SRCS})
+
+list(APPEND TFLITE_SRCS "${FarmhashSource_DIR}/src/farmhash.cc")
+
+list(APPEND TFLITE_INCLUDES "${TensorFlowSource_DIR}")
+list(APPEND TFLITE_INCLUDES "${AbslSource_DIR}")
+list(APPEND TFLITE_INCLUDES "${GEMMLowpSource_DIR}")
+list(APPEND TFLITE_INCLUDES "${FarmhashSource_DIR}/src")
+list(APPEND TFLITE_INCLUDES "${FlatBuffersSource_DIR}/include")
+
+if(NEON2SSESource_FOUND)
+ list(APPEND TFLITE_INCLUDES "${NEON2SSESource_DIR}")
+endif(NEON2SSESource_FOUND)
+
+# This kernels are not used on nnfw
+## spectrogram
+list(REMOVE_ITEM TFLITE_SRCS "${TENSORFLOW_LITE_BASE}/kernels/audio_spectrogram.cc")
+list(REMOVE_ITEM TFLITE_SRCS "${TENSORFLOW_LITE_BASE}/kernels/audio_spectrogram_test.cc")
+list(REMOVE_ITEM TFLITE_SRCS "${TENSORFLOW_LITE_BASE}/kernels/internal/spectrogram.cc")
+
+add_library(tensorflow-lite STATIC ${TFLITE_SRCS})
+target_include_directories(tensorflow-lite SYSTEM PUBLIC ${TFLITE_INCLUDES})
+target_compile_definitions(tensorflow-lite PUBLIC "GEMMLOWP_ALLOW_SLOW_SCALAR_FALLBACK")
+set_property(TARGET tensorflow-lite PROPERTY POSITION_INDEPENDENT_CODE ON)
+target_link_libraries(tensorflow-lite eigen ${LIB_PTHREAD} dl)
+
+if(ANDROID)
+ target_link_libraries(tensorflow-lite log)
+ target_include_directories(tensorflow-lite PUBLIC "${NDK_DIR}/..")
+endif()
diff --git a/infra/nnfw/cmake/packages/TensorFlowLiteConfig.cmake b/infra/nnfw/cmake/packages/TensorFlowLiteConfig.cmake
new file mode 100644
index 000000000..2b1c0ec24
--- /dev/null
+++ b/infra/nnfw/cmake/packages/TensorFlowLiteConfig.cmake
@@ -0,0 +1,69 @@
+# NOTE This line prevents multiple definitions of tensorflow-lite target
+if(TARGET tensorflow-lite)
+ set(TensorFlowLite_FOUND TRUE)
+ return()
+endif(TARGET tensorflow-lite)
+
+if(BUILD_TENSORFLOW_LITE)
+ macro(return_unless VAR)
+ if(NOT ${VAR})
+ set(TensorFlowLite_FOUND PARENT_SCOPE)
+ return()
+ endif(NOT ${VAR})
+ endmacro(return_unless)
+
+ # Required packages
+ nnfw_find_package(AbslSource QUIET)
+ return_unless(AbslSource_FOUND)
+ nnfw_find_package(Eigen QUIET)
+ return_unless(Eigen_FOUND)
+ nnfw_find_package(FarmhashSource QUIET)
+ return_unless(FarmhashSource_FOUND)
+ nnfw_find_package(FlatBuffersSource QUIET)
+ return_unless(FlatBuffersSource_FOUND)
+ nnfw_find_package(GEMMLowpSource QUIET)
+ return_unless(GEMMLowpSource_FOUND)
+ nnfw_find_package(TensorFlowSource QUIET)
+ return_unless(TensorFlowSource_FOUND)
+
+ # Optional packages
+ nnfw_find_package(NEON2SSESource QUIET)
+
+ nnas_include(ExternalProjectTools)
+ add_extdirectory("${CMAKE_CURRENT_LIST_DIR}/TensorFlowLite" tflite)
+
+ set(TensorFlowLite_FOUND TRUE)
+ return()
+endif(BUILD_TENSORFLOW_LITE)
+
+# Use pre-built TensorFlow Lite
+find_path(TFLITE_INCLUDE_DIR NAMES tensorflow/lite/interpreter.h)
+find_library(TFLITE_LIB NAMES tensorflow-lite)
+
+if(NOT TFLITE_INCLUDE_DIR)
+ set(TensorFlowLite_FOUND FALSE)
+ return()
+endif(NOT TFLITE_INCLUDE_DIR)
+
+if(NOT TFLITE_LIB)
+ set(TensorFlowLite_FOUND FALSE)
+ return()
+endif(NOT TFLITE_LIB)
+
+message(STATUS "Found TensorFlow Lite: TRUE (include: ${TFLITE_INCLUDE_DIR}, lib: ${TFLITE_LIB}")
+
+# TODO Use IMPORTED target
+add_library(tensorflow-lite INTERFACE)
+target_include_directories(tensorflow-lite SYSTEM INTERFACE ${TFLITE_INCLUDE_DIR})
+target_link_libraries(tensorflow-lite INTERFACE ${TFLITE_LIB})
+
+# Prefer -pthread to -lpthread
+set(THREADS_PREFER_PTHREAD_FLAG TRUE)
+set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
+find_package(Threads QUIET)
+
+if(Threads_FOUND)
+ target_link_libraries(tensorflow-lite INTERFACE ${CMAKE_THREAD_LIBS_INIT})
+endif(Threads_FOUND)
+
+set(TensorFlowLite_FOUND TRUE)
diff --git a/infra/nnfw/cmake/packages/TensorFlowSourceConfig.cmake b/infra/nnfw/cmake/packages/TensorFlowSourceConfig.cmake
new file mode 100644
index 000000000..1896239d3
--- /dev/null
+++ b/infra/nnfw/cmake/packages/TensorFlowSourceConfig.cmake
@@ -0,0 +1,18 @@
+function(_TensorFlowSource_import)
+ if(NOT DOWNLOAD_TENSORFLOW)
+ set(TensorFlowSource_FOUND FALSE PARENT_SCOPE)
+ return()
+ endif(NOT DOWNLOAD_TENSORFLOW)
+
+ nnas_include(ExternalSourceTools)
+ nnas_include(OptionTools)
+
+ envoption(EXTERNAL_DOWNLOAD_SERVER "https://github.com")
+ set(TENSORFLOW_URL ${EXTERNAL_DOWNLOAD_SERVER}/tensorflow/tensorflow/archive/v1.13.1.tar.gz)
+ ExternalSource_Get("tensorflow" ${DOWNLOAD_TENSORFLOW} ${TENSORFLOW_URL})
+
+ set(TensorFlowSource_DIR ${tensorflow_SOURCE_DIR} PARENT_SCOPE)
+ set(TensorFlowSource_FOUND ${tensorflow_SOURCE_GET} PARENT_SCOPE)
+endfunction(_TensorFlowSource_import)
+
+_TensorFlowSource_import()
diff --git a/infra/nnfw/cmake/packages/TensorflowConfig.cmake b/infra/nnfw/cmake/packages/TensorflowConfig.cmake
new file mode 100644
index 000000000..b9c947c5b
--- /dev/null
+++ b/infra/nnfw/cmake/packages/TensorflowConfig.cmake
@@ -0,0 +1,44 @@
+function(_Tensorflow_Import)
+ if(NOT DEFINED TENSORFLOW_DIR)
+ set(TENSORFLOW_DIR ${NNAS_EXTERNALS_DIR}/tensorflow)
+ endif(NOT DEFINED TENSORFLOW_DIR)
+
+ if(NOT DEFINED NSYNC_ARCH)
+ set(NSYNC_ARCH "default")
+ endif(NOT DEFINED NSYNC_ARCH)
+
+ set(TENSROFLOW_MAKEFILE_DIR "${TENSORFLOW_DIR}/tensorflow/makefile")
+ set(TENSORFLOW_GEN_DIR "${TENSROFLOW_MAKEFILE_DIR}/gen")
+ set(TENSORFLOW_DOWNLOADS_DIR "${TENSROFLOW_MAKEFILE_DIR}/downloads")
+
+ if(NOT EXISTS "${TENSORFLOW_GEN_DIR}/lib/libtensorflow-core.a")
+ set(Tensorflow_FOUND FALSE PARENT_SCOPE)
+ return()
+ endif()
+
+ if(NOT EXISTS "${TENSORFLOW_DOWNLOADS_DIR}/nsync/builds/${NSYNC_ARCH}.linux.c++11/libnsync.a")
+ set(Tensorflow_FOUND FALSE PARENT_SCOPE)
+ return()
+ endif()
+
+ if(NOT TARGET tensorflow-core)
+ add_library(tensorflow-core INTERFACE)
+
+ target_include_directories(tensorflow-core INTERFACE "${TENSORFLOW_DIR}")
+ target_include_directories(tensorflow-core INTERFACE "${TENSORFLOW_GEN_DIR}/proto")
+ target_include_directories(tensorflow-core INTERFACE "${TENSORFLOW_GEN_DIR}/protobuf/include")
+ target_include_directories(tensorflow-core INTERFACE "${TENSORFLOW_DOWNLOADS_DIR}/eigen")
+ target_include_directories(tensorflow-core INTERFACE "${TENSORFLOW_DOWNLOADS_DIR}/nsync/public")
+
+ target_link_libraries(tensorflow-core INTERFACE -Wl,--whole-archive "${TENSORFLOW_GEN_DIR}/lib/libtensorflow-core.a" -Wl,--no-whole-archive)
+ target_link_libraries(tensorflow-core INTERFACE "${TENSORFLOW_GEN_DIR}/protobuf/lib/libprotobuf.a")
+ target_link_libraries(tensorflow-core INTERFACE "${TENSORFLOW_DOWNLOADS_DIR}/nsync/builds/${NSYNC_ARCH}.linux.c++11/libnsync.a")
+ target_link_libraries(tensorflow-core INTERFACE ${LIB_PTHREAD} dl)
+
+ message(STATUS "Found Tensorflow (lib: ${TENSORFLOW_GEN_DIR}/lib/libtensorflow-core.a")
+ endif()
+
+ set(Tensorflow_FOUND TRUE PARENT_SCOPE)
+endfunction(_Tensorflow_Import)
+
+_Tensorflow_Import()
diff --git a/infra/nnfw/command/build b/infra/nnfw/command/build
new file mode 100644
index 000000000..8e59f66f2
--- /dev/null
+++ b/infra/nnfw/command/build
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+import "build.configuration"
+
+if [[ ! -d "${BUILD_PATH}" ]]; then
+ echo "[ERROR] '${BUILD_PATH}' does not exist. Please run 'configure' first"
+ exit 255
+fi
+
+# Set parallel build
+# TODO Use argument instead of environment variable
+HOST_OS=${HOST_OS:-linux}
+NPROCS=${NPROCS:-1}
+PARALLEL_BUILD=${PARALLEL_BUILD:-1}
+
+if [ "${PARALLEL_BUILD}" == "1" ]; then
+ # Get number of processors (linux only for now)
+ if [ "${HOST_OS}" == "linux" ]; then
+ NPROCS="$(grep -c ^processor /proc/cpuinfo)"
+ fi
+fi
+
+cd ${BUILD_PATH}
+make -j ${NPROCS} "$@"
diff --git a/infra/nnfw/command/configure b/infra/nnfw/command/configure
new file mode 100644
index 000000000..98cad7671
--- /dev/null
+++ b/infra/nnfw/command/configure
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+import "build.configuration"
+
+INSTALL_PATH="${NNFW_INSTALL_PREFIX:-${WORKSPACE_PATH}/out}"
+# Normalize to absolute path
+if [[ "${INSTALL_PATH}" != /* ]]; then
+ INSTALL_PATH=${NNFW_PROJECT_PATH}/${INSTALL_PATH}
+fi
+
+# Create "BUILD_PATH"
+mkdir -p "${BUILD_PATH}"
+
+if [ ! -d "${INSTALL_PATH}" ]; then
+ echo "[WARNING] Cannot find install directory '${INSTALL_PATH}'"
+ echo " Try to make install directory"
+ mkdir -p "${INSTALL_PATH}"
+ if [ ! -d "${INSTALL_PATH}" ]; then
+ echo "[ERROR] Fail to make install directory '${INSTALL_PATH}'"
+ echo " Please make '${INSTALL_PATH}' directory first"
+ exit 255
+ fi
+fi
+
+cd "${BUILD_PATH}"
+cmake "${NNFW_PROJECT_PATH}"/infra/nnfw -DCMAKE_INSTALL_PREFIX="${INSTALL_PATH}" "$@"
diff --git a/infra/nnfw/command/copyright-check b/infra/nnfw/command/copyright-check
new file mode 100644
index 000000000..79ead2e31
--- /dev/null
+++ b/infra/nnfw/command/copyright-check
@@ -0,0 +1,45 @@
+#!/bin/bash
+
+INVALID_EXIT=0
+
+check_copyright() {
+ DIRECTORIES_NOT_TO_BE_TESTED=$2
+ CORRECT_COPYRIGHT="Copyright \(c\) [0-9]+ Samsung Electronics Co\., Ltd\. All Rights Reserved"
+
+ FILES_TO_CHECK=$(git ls-files -c --exclude-standard)
+ FILES_TO_CHECK_COPYRIGHTS=()
+ for f in ${FILES_TO_CHECK[@]}; do
+ # File extension to check
+ if [[ ${f} == +(*.h|*.hpp|*.cpp|*.cc|*.c|*.cl) ]]; then
+ FILES_TO_CHECK_COPYRIGHTS+=("${f}")
+ fi
+ done
+
+ for s in ${DIRECTORIES_NOT_TO_BE_TESTED[@]}; do
+ FILES_TO_CHECK_COPYRIGHTS=(${FILES_TO_CHECK_COPYRIGHTS[*]/$s*/})
+ done
+
+ if [[ ${#FILES_TO_CHECK_COPYRIGHTS} -ne 0 ]]; then
+ for f in ${FILES_TO_CHECK_COPYRIGHTS[@]}; do
+ if ! grep -qE "$CORRECT_COPYRIGHT" $f; then
+ CREATED_YEAR=$(git log --follow --format=%aD $f | tail -1 | awk '{print $4}')
+ EXAMPLE_COPYRIGHT="Copyright (c) $CREATED_YEAR Samsung Electronics Co., Ltd. All Rights Reserved"
+ echo "Copyright format of $f is incorrect: recommend \"$EXAMPLE_COPYRIGHT\""
+ INVALID_EXIT=1
+ fi
+ done
+ fi
+}
+
+DIRECTORIES_NOT_TO_BE_TESTED=()
+
+for DIR_NOT_TO_BE_TESTED in $(find -name '.FORMATDENY' -exec dirname {} \;); do
+ DIRECTORIES_NOT_TO_BE_TESTED+=("$DIR_NOT_TO_BE_TESTED")
+done
+
+check_copyright $DIRECTORIES_NOT_TO_BE_TESTED
+
+if [[ $INVALID_EXIT -ne 0 ]]; then
+ echo "[FAILED] Invalid copyright check exit."
+ exit 1
+fi
diff --git a/infra/nnfw/command/docker-run b/infra/nnfw/command/docker-run
new file mode 100644
index 000000000..b523d61a3
--- /dev/null
+++ b/infra/nnfw/command/docker-run
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+import "docker.configuration"
+
+docker run $DOCKER_RUN_OPTS $DOCKER_ENV_VARS $DOCKER_VOLUMES $DOCKER_IMAGE_NAME "$@"
+EXITCODE=$?
+
+docker_cleanup
+
+if [ $EXITCODE -ne 0 ]; then
+ exit $EXITCODE
+fi
diff --git a/infra/nnfw/command/docker-run-user b/infra/nnfw/command/docker-run-user
new file mode 100644
index 000000000..3b5a96142
--- /dev/null
+++ b/infra/nnfw/command/docker-run-user
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+import "docker.configuration"
+
+DOCKER_RUN_OPTS+=" -u $(id -u):$(id -g)"
+
+docker run $DOCKER_RUN_OPTS $DOCKER_ENV_VARS $DOCKER_VOLUMES $DOCKER_IMAGE_NAME "$@"
+EXITCODE=$?
+
+if [ $EXITCODE -ne 0 ]; then
+ exit $EXITCODE
+fi
diff --git a/infra/nnfw/command/docker-shell b/infra/nnfw/command/docker-shell
new file mode 100644
index 000000000..1413a7ade
--- /dev/null
+++ b/infra/nnfw/command/docker-shell
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+import "docker.configuration"
+
+DOCKER_RUN_OPTS+=" -it"
+docker run $DOCKER_RUN_OPTS $DOCKER_ENV_VARS $DOCKER_VOLUMES $DOCKER_IMAGE_NAME "/bin/bash"
+EXITCODE=$?
+
+docker_cleanup
+
+if [ $EXITCODE -ne 0 ]; then
+ exit $EXITCODE
+fi
diff --git a/infra/nnfw/command/gen-coverage-report b/infra/nnfw/command/gen-coverage-report
new file mode 100644
index 000000000..8fd398db3
--- /dev/null
+++ b/infra/nnfw/command/gen-coverage-report
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+# This file is based on https://github.sec.samsung.net/STAR/nncc/pull/80
+
+LCOV_PATH=$(command -v lcov)
+GENHTML_PATH=$(command -v genhtml)
+
+SRC_PREFIX=${SRC_PREFIX:-${NNFW_PROJECT_PATH}}
+
+if [[ -z "${LCOV_PATH}" ]]; then
+ echo "ERROR: 'lcov' is not found"
+ exit 255
+fi
+
+if [[ -z "${GENHTML_PATH}" ]]; then
+ echo "ERROR: 'genhtml' is not found"
+ exit 255
+fi
+
+if [[ -z "${GCOV_PATH}" ]]; then
+ GCOV_PATH=$(command -v gcov)
+ if [[ -z "${GCOV_PATH}" ]]; then
+ echo "ERROR: 'gcov' is not found"
+ exit 255
+ fi
+fi
+
+OUTPUT_PATH="$1"
+
+if [[ -z "${OUTPUT_PATH}" ]]; then
+ OUTPUT_PATH="$NNFW_PROJECT_PATH/coverage"
+fi
+
+if [[ -e "${OUTPUT_PATH}" ]]; then
+ echo "ERROR: '${OUTPUT_PATH}' already exists"
+ exit 255
+fi
+
+mkdir -p "${OUTPUT_PATH}"
+
+RAW_COVERAGE_INFO_PATH="${OUTPUT_PATH}/coverage.raw.info"
+LIBS_COVERAGE_INFO_PATH="${OUTPUT_PATH}/coverage.libs.info"
+INCLUDE_COVERAGE_INFO_PATH="${OUTPUT_PATH}/coverage.include.info"
+RUNTIMES_COVERAGE_INFO_PATH="${OUTPUT_PATH}/coverage.runtimes.info"
+TOOLS_COVERAGE_INFO_PATH="${OUTPUT_PATH}/coverage.tools.info"
+FINAL_COVERAGE_INFO_PATH="${OUTPUT_PATH}/coverage.info"
+HTML_PATH="${OUTPUT_PATH}/html"
+COVERTURA_PATH="${OUTPUT_PATH}/nnfw_coverage.xml"
+
+"${LCOV_PATH}" -c -d "${NNFW_PROJECT_PATH}" --gcov-tool ${GCOV_PATH} -o "${RAW_COVERAGE_INFO_PATH}"
+#"${LCOV_PATH}" -e "${RAW_COVERAGE_INFO_PATH}" -o "${LIBS_COVERAGE_INFO_PATH}" "${SRC_PREFIX}/libs/*"
+#"${LCOV_PATH}" -e "${RAW_COVERAGE_INFO_PATH}" -o "${INCLUDE_COVERAGE_INFO_PATH}" "${SRC_PREFIX}/include/*"
+"${LCOV_PATH}" -e "${RAW_COVERAGE_INFO_PATH}" -o "${RUNTIMES_COVERAGE_INFO_PATH}" "${SRC_PREFIX}/runtimes/*"
+"${LCOV_PATH}" -e "${RAW_COVERAGE_INFO_PATH}" -o "${TOOLS_COVERAGE_INFO_PATH}" "${SRC_PREFIX}/tests/tools/*"
+#"${LCOV_PATH}" -a "${LIBS_COVERAGE_INFO_PATH}" -a "${INCLUDE_COVERAGE_INFO_PATH}" \
+# -a "${RUNTIMES_COVERAGE_INFO_PATH}" -a "${TOOLS_COVERAGE_INFO_PATH}" \
+# -o "${FINAL_COVERAGE_INFO_PATH}"
+"${LCOV_PATH}" -a "${RUNTIMES_COVERAGE_INFO_PATH}" -a "${TOOLS_COVERAGE_INFO_PATH}" -o "${FINAL_COVERAGE_INFO_PATH}"
+"${GENHTML_PATH}" "${FINAL_COVERAGE_INFO_PATH}" --output-directory "${HTML_PATH}" ${GENHTML_FLAG:-}
diff --git a/infra/nnfw/command/install b/infra/nnfw/command/install
new file mode 100644
index 000000000..3bbb92e0f
--- /dev/null
+++ b/infra/nnfw/command/install
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+import "build.configuration"
+
+if [[ ! -d "${BUILD_PATH}" ]]; then
+ echo "'${BUILD_PATH}' does not exist. Please run 'configure' first"
+ exit 255
+fi
+
+cd ${BUILD_PATH}
+make install
diff --git a/infra/nnfw/config/build.configuration b/infra/nnfw/config/build.configuration
new file mode 100644
index 000000000..5e1a8deb1
--- /dev/null
+++ b/infra/nnfw/config/build.configuration
@@ -0,0 +1,6 @@
+WORKSPACE_PATH=${NNFW_WORKSPACE:-${NNFW_PROJECT_PATH}/Product}
+# Normalize to absolute path
+if [[ "${WORKSPACE_PATH}" != /* ]]; then
+ WORKSPACE_PATH=${NNFW_PROJECT_PATH}/${WORKSPACE_PATH}
+fi
+BUILD_PATH=${WORKSPACE_PATH}/${NNFW_BUILD_RPATH:-obj}
diff --git a/infra/nnfw/config/docker.configuration b/infra/nnfw/config/docker.configuration
new file mode 100644
index 000000000..862e5f8b5
--- /dev/null
+++ b/infra/nnfw/config/docker.configuration
@@ -0,0 +1,44 @@
+#!/bin/bash
+
+DOCKER_IMAGE_NAME=${DOCKER_IMAGE_NAME:-nnas}
+echo "Using docker image ${DOCKER_IMAGE_NAME}"
+
+if [ -z "`docker images ${DOCKER_IMAGE_NAME}`" ]; then
+ echo "Need docker image!"
+ exit 1
+fi
+
+HOST_PATH="$NNFW_PROJECT_PATH"
+DOCKER_PATH="$NNFW_PROJECT_PATH"
+
+export GIT_SSL_NO_VERIFY=1
+
+DOCKER_VOLUMES+=" -v $HOST_PATH:$DOCKER_PATH"
+
+if [[ ! -z $ENV_FILE ]]; then
+ DOCKER_ENV_VARS+=" --env-file ${ENV_FILE} "
+fi
+
+DOCKER_ENV_VARS+=" -e http_proxy"
+DOCKER_ENV_VARS+=" -e no_proxy"
+DOCKER_ENV_VARS+=" -e GIT_SSL_NO_VERIFY"
+DOCKER_ENV_VARS+=" -e EXTERNAL_DOWNLOAD_SERVER"
+DOCKER_ENV_VARS+=" -e NNFW_WORKSPACE"
+
+DOCKER_RUN_OPTS="${DOCKER_OPTS}"
+DOCKER_RUN_OPTS+=" --rm"
+DOCKER_RUN_OPTS+=" -w $DOCKER_PATH"
+
+function docker_cleanup()
+{
+ # Newly created files during during docker run can have different ownership.
+ # This may cause some problems, for example, some jenkins slaves or developers
+ # can't remove built files due to lack of permission.
+ # To address this issue, let's change owner of all files
+ # in nncc to owner of nncc.
+ NNFW_OWNER_UID=$(stat -c "%u" $HOST_PATH)
+ NNFW_OWNER_GID=$(stat -c "%g" $HOST_PATH)
+
+ CMD="chown -R $NNFW_OWNER_UID:$NNFW_OWNER_GID $DOCKER_PATH"
+ docker run $DOCKER_RUN_OPTS $DOCKER_ENV_VARS $DOCKER_VOLUMES $DOCKER_IMAGE_NAME $CMD
+}
diff --git a/infra/nnfw/config/gbs.conf b/infra/nnfw/config/gbs.conf
new file mode 100644
index 000000000..515cadaba
--- /dev/null
+++ b/infra/nnfw/config/gbs.conf
@@ -0,0 +1,20 @@
+[general]
+#Current profile name which should match a profile section name
+profile = profile.tizen
+
+[profile.tizen]
+user=obs_viewer
+obs = obs.tizen
+repos = repo.tizen_base,repo.tizen_mobile
+buildroot = /home/GBS-ROOT/
+
+[obs.tizen]
+url = http://api.tizen.org
+
+[repo.tizen_mobile]
+url = http://download.tizen.org/snapshots/tizen/unified/latest/repos/standard/packages/
+
+[repo.tizen_base]
+url = http://download.tizen.org/snapshots/tizen/base/latest/repos/standard/packages/
+
+