summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt181
1 files changed, 181 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 000000000..faf88ef6d
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,181 @@
+cmake_minimum_required(VERSION 2.8.12)
+
+project(nnfw)
+
+if(CMAKE_VERSION VERSION_LESS 3.1.0)
+ set(CMAKE_CXX_FLAGS "-std=c++11")
+else(CMAKE_VERSION VERSION_LESS 3.1.0)
+ set(CMAKE_CXX_STANDARD 11)
+endif(CMAKE_VERSION VERSION_LESS 3.1.0)
+
+# set host platform to build
+if(NOT HOST_ARCH OR "${HOST_ARCH}" STREQUAL "")
+ set(HOST_ARCH ${CMAKE_HOST_SYSTEM_PROCESSOR})
+endif()
+
+# set target platform to run
+if(NOT TARGET_ARCH OR "${TARGET_ARCH}" STREQUAL "")
+ set(TARGET_ARCH "${HOST_ARCH}")
+endif()
+
+if(NOT DEFINED TARGET_OS)
+ set(TARGET_OS "${HOST_OS}")
+endif()
+
+if("${HOST_ARCH}" STREQUAL "x86_64")
+ set(HOST_ARCH_BASE ${HOST_ARCH})
+elseif("${HOST_ARCH}" STREQUAL "armv7l")
+ set(HOST_ARCH_BASE "arm")
+elseif("${HOST_ARCH}" STREQUAL "arm64")
+ set(HOST_ARCH_BASE "arm64")
+elseif("${HOST_ARCH}" STREQUAL "aarch64")
+ set(HOST_ARCH_BASE "aarch64")
+else()
+ message(FATAL_ERROR "'${HOST_ARCH}' architecture is not supported")
+endif()
+
+if("${TARGET_ARCH}" STREQUAL "x86_64")
+ set(TARGET_ARCH_BASE ${TARGET_ARCH})
+elseif("${TARGET_ARCH}" STREQUAL "armv7l")
+ set(TARGET_ARCH_BASE "arm")
+elseif("${TARGET_ARCH}" STREQUAL "arm64")
+ set(TARGET_ARCH_BASE "arm64")
+elseif("${TARGET_ARCH}" STREQUAL "aarch64")
+ set(TARGET_ARCH_BASE "aarch64")
+else()
+ message(FATAL_ERROR "'${TARGET_ARCH}' architecture is not supported")
+endif()
+
+# Determine native or cross build
+if("${HOST_ARCH}" STREQUAL "${TARGET_ARCH}")
+ set(BUILD_IS_NATIVE True)
+else()
+ set(BUILD_IS_NATIVE False)
+endif()
+
+# host & target platform name
+set(HOST_PLATFORM "${HOST_ARCH}-${HOST_OS}")
+set(TARGET_PLATFORM "${TARGET_ARCH}-${TARGET_OS}")
+
+# lib pthread as a variable (pthread must be disabled on android)
+set(LIB_PTHREAD pthread)
+
+# platform specific options
+include("cmake/option/option_${TARGET_PLATFORM}.cmake")
+
+# test-coverage build flag
+if("${COVERAGE_BUILD}" STREQUAL "1")
+ set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE ON)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
+ set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
+ set(CMAKE_EXE_LINKER_FLAGS
+ "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
+endif()
+
+# 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()
+
+#
+# Configuration flags
+#
+option(BUILD_ACL "Build ARM Compute Library" OFF)
+option(BUILD_ACL_STATIC_LIB "Build ARM Comput Static Library" OFF)
+option(BUILD_BENCHMARK_ACL "Build ARM Compute Library Benchmarks" OFF)
+option(BUILD_NN_RUNTIME "Build NN Runtime" ON)
+option(BUILD_LABS "Build lab projects" ON)
+option(BUILD_ANDROID_NN_RUNTIME_TEST "Build Android NN Runtime Test" ON)
+
+#
+# Common variables
+#
+set(NNFW_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include)
+
+if(NOT "${TARGET_OS}" STREQUAL "tizen" AND NOT "${TARGET_OS}" STREQUAL "android")
+ set(NNFW_ACL_FOLDER ${CMAKE_SOURCE_DIR}/externals/acl)
+ set(NNFW_ACL_INCLUDES ${NNFW_ACL_FOLDER}
+ ${NNFW_ACL_FOLDER}/include)
+else()
+ set(NNFW_ACL_FOLDER "")
+ set(NNFW_ACL_INCLUDES "")
+endif()
+set(NNFW_ACL_LIBS arm_compute_graph arm_compute arm_compute_core)
+set(NNFW_NN_RUNTIME_ROOT ${CMAKE_SOURCE_DIR}/runtimes/nn)
+
+# NOTE '${CMAKE_INSTALL_PREFIX}/lib' should be added as a link directory as
+# CI server places pre-built ARM compute libraries on this directory.
+link_directories(${CMAKE_INSTALL_PREFIX}/lib)
+
+#
+# GTest support
+#
+if("${TARGET_OS}" STREQUAL "tizen" AND NOT "${TARGET_OS}" STREQUAL "android")
+ enable_testing()
+ find_package(GTest REQUIRED)
+ include_directories(${GTEST_INCLUDE_DIR})
+else()
+ include(ExternalProject)
+ # Download and install GoogleTest
+ ExternalProject_Add(
+ googletest
+ URL https://github.com/google/googletest/archive/release-1.8.0.zip
+ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/googletest
+ # Disable install step
+ INSTALL_COMMAND ""
+ LOG_DOWNLOAD 1
+ LOG_BUILD 1
+ LOG_CONFIGURE 1
+ CMAKE_ARGS
+ -DCMAKE_TOOLCHAIN_FILE=${PROJECT_SOURCE_DIR}/cmake/config/config_${TARGET_ARCH}-${TARGET_OS}.cmake
+ )
+ ExternalProject_Get_Property(googletest source_dir binary_dir)
+
+ # include and link path for all sub project
+ include_directories(${source_dir}/googletest/include/)
+ link_directories(${binary_dir}/googlemock/gtest/)
+endif()
+
+# gtest libs
+set(NNFW_GTEST_LIBS libgtest.a libgtest_main.a ${LIB_PTHREAD})
+
+# TODO For now Android build is being enabled incrementally so not all subdirectories are added yet.
+# However we are going to have the same subdirectories with other OS eventually.
+if("${TARGET_OS}" STREQUAL "android")
+
+ include_directories(externals/tensorflow)
+ include_directories(externals/flatbuffers/include)
+ include_directories(include)
+
+ add_subdirectory(libs)
+ add_subdirectory(externals)
+ add_subdirectory(tools/nnapi_test)
+
+ if(BUILD_NN_RUNTIME)
+ add_subdirectory(runtimes/nn)
+ endif(BUILD_NN_RUNTIME)
+ add_subdirectory(src/support/tflite)
+
+else("${TARGET_OS}" STREQUAL "android") # General case (non-android build)
+
+# TODO Fix indentation
+
+if (NOT ${TARGET_OS} STREQUAL "tizen")
+ add_subdirectory(externals)
+endif()
+add_subdirectory(libs)
+add_subdirectory(tools)
+add_subdirectory(runtimes)
+
+endif("${TARGET_OS}" STREQUAL "android")