diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 181 |
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") |