Update Android build scripts (#1487)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Fri, 1 Jun 2018 00:18:18 +0000 (09:18 +0900)
committer박세희/동작제어Lab(SR)/Principal Engineer/삼성전자 <saehie.park@samsung.com>
Fri, 1 Jun 2018 00:18:18 +0000 (09:18 +0900)
This commit revises 'build_android_rootfs.sh' to create ndk directory
for tensorflow lite buiild, and updates tensorflow lite CMakeLists.txt
to access this NDK during build.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
externals/CMakeLists.txt
tools/cross/build_android_rootfs.sh

index 004df65..729d156 100644 (file)
@@ -46,6 +46,22 @@ list(APPEND TFLITE_INCLUDES "${TFLITE_DEPEND_DIR}/neon_2_sse")
 list(APPEND TFLITE_INCLUDES "${TFLITE_DEPEND_DIR}/farmhash/src")
 list(APPEND TFLITE_INCLUDES "${TFLITE_DEPEND_DIR}/flatbuffers/include")
 
+if("${TARGET_OS}" STREQUAL "android")
+  if(NOT DEFINED NDK_DIR)
+    file(GLOB NDK_DIRS "${CMAKE_SOURCE_DIR}/tools/cross/ndk/*/ndk")
+    list(LENGHT NDK_DIRS_COUNT)
+    if (NDK_DIRS_COUNT EQUAL 1)
+      set(NDK_DIR "${NDK_DIRS}")
+    endif(NDK_DIRS_COUNT EQUAL 1)
+  endif(NOT DEFINED NDK_DIR)
+
+  if(NOT DEFINED NDK_DIR)
+    message(FATAL_ERROR "NDK_DIR should be specified via environment variable")
+  endif()
+  message(STATUS "Found NDK: ${NDK_DIR}")
+  list(APPEND TFLITE_INCLUDES "${NDK_DIR}")
+endif()
+
 add_library(tensorflow-lite ${TFLITE_SRCS})
 target_include_directories(tensorflow-lite PUBLIC ${TFLITE_INCLUDES})
 target_compile_definitions(tensorflow-lite PUBLIC "GEMMLOWP_ALLOW_SLOW_SCALAR_FALLBACK")
index ef8024c..700602f 100755 (executable)
@@ -45,21 +45,30 @@ for i in "$@" ; do
     esac
 done
 
+__ToolchainDir=${TOOLCHAIN_DIR:-"${__CrossDir}/ndk/${__NDKVersion}"}
 __RootfsDir=${ROOTFS_DIR:-"${__CrossDir}/rootfs/${__BuildArch}.android"}
-__TempDir=${TEMP_DIR:-"/tmp"}
 
 NDK_DIR=android-ndk-${__NDKVersion}
 NDK_ZIP=${NDK_DIR}-linux-x86_64.zip
 
+if [[ -e $__RootfsDir ]]; then
+  echo "ERROR: $__RootfsDir already exists"
+  exit 255
+fi
+
 echo "Downloading Android NDK"
-wget -nv -nc https://dl.google.com/android/repository/$NDK_ZIP -O $__TempDir/$NDK_ZIP
+rm -rf "$__ToolchainDir"
+mkdir -p "$__ToolchainDir"
+wget -nv -nc https://dl.google.com/android/repository/$NDK_ZIP -O $__ToolchainDir/$NDK_ZIP
 
 echo "Unzipping Android NDK"
-unzip -qq -o $__TempDir/$NDK_ZIP -d $__TempDir
+unzip -qq -o $__ToolchainDir/$NDK_ZIP -d $__ToolchainDir
+rm $__ToolchainDir/$NDK_ZIP
+mv  $__ToolchainDir/${NDK_DIR} "$__ToolchainDir/ndk"
 
 echo "Generating standalone toolchain and rootfs to $__RootfsDir"
 
-$__TempDir/$NDK_DIR/build/tools/make-standalone-toolchain.sh --arch=$__BuildArch --platform=android-$__APILevel --install-dir=$__RootfsDir
+$__ToolchainDir/ndk/build/tools/make-standalone-toolchain.sh --arch=$__BuildArch --platform=android-$__APILevel --install-dir=$__RootfsDir
 
 # Install boost
 
@@ -68,20 +77,20 @@ echo "Installing boost library (HEADER-ONLY)"
 
 BOOST_VERSION=1_67_0
 BOOST_BASENAME=boost_$BOOST_VERSION
-wget -nv -nc https://dl.bintray.com/boostorg/release/1.67.0/source/$BOOST_BASENAME.tar.gz -O $__TempDir/$BOOST_BASENAME.tar.gz
+wget -nv -nc https://dl.bintray.com/boostorg/release/1.67.0/source/$BOOST_BASENAME.tar.gz -O $__ToolchainDir/$BOOST_BASENAME.tar.gz
 
-tar xzf $__TempDir/$BOOST_BASENAME.tar.gz -C $__TmpDir
-cp -rv $__TempDir/$BOOST_BASENAME/boost $__RootfsDir/sysroot/usr/include
+tar xzf $__ToolchainDir/$BOOST_BASENAME.tar.gz -C $__ToolchainDir
+cp -rv $__ToolchainDir/$BOOST_BASENAME/boost $__RootfsDir/sysroot/usr/include
 
 echo "Installing arm compute library"
 
 ACL_VERSION=18.03
 ACL_BASENAME=arm_compute-v$ACL_VERSION-bin-android
-wget -nv -nc https://github.com/ARM-software/ComputeLibrary/releases/download/v$ACL_VERSION/$ACL_BASENAME.tar.gz -O $__TempDir/$ACL_BASENAME.tar.gz
-
-tar xzf $__TempDir/$ACL_BASENAME.tar.gz -C $__TempDir
-cp -rv $__TempDir/$ACL_BASENAME/arm_compute $__RootfsDir/sysroot/usr/include
-cp -rv $__TempDir/$ACL_BASENAME/include/* $__RootfsDir/sysroot/usr/include
-cp -rv $__TempDir/$ACL_BASENAME/support $__RootfsDir/sysroot/usr/include
-cp -rv $__TempDir/$ACL_BASENAME/util $__RootfsDir/sysroot/usr/include
-cp -rv $__TempDir/$ACL_BASENAME/lib/android-arm64-v8a-cl/* $__RootfsDir/sysroot/usr/lib # TODO hardcoded path "arm64-v8a"
+wget -nv -nc https://github.com/ARM-software/ComputeLibrary/releases/download/v$ACL_VERSION/$ACL_BASENAME.tar.gz -O $__ToolchainDir/$ACL_BASENAME.tar.gz
+
+tar xzf $__ToolchainDir/$ACL_BASENAME.tar.gz -C $__ToolchainDir
+cp -rv $__ToolchainDir/$ACL_BASENAME/arm_compute $__RootfsDir/sysroot/usr/include
+cp -rv $__ToolchainDir/$ACL_BASENAME/include/* $__RootfsDir/sysroot/usr/include
+cp -rv $__ToolchainDir/$ACL_BASENAME/support $__RootfsDir/sysroot/usr/include
+cp -rv $__ToolchainDir/$ACL_BASENAME/util $__RootfsDir/sysroot/usr/include
+cp -rv $__ToolchainDir/$ACL_BASENAME/lib/android-arm64-v8a-cl/* $__RootfsDir/sysroot/usr/lib # TODO hardcoded path "arm64-v8a"