Add preset support to create-package (#9366)
author박종현/On-Device Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Wed, 4 Dec 2019 05:41:09 +0000 (14:41 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Wed, 4 Dec 2019 05:41:09 +0000 (14:41 +0900)
This commit allows users to change the SDK configuration (a.k.a preset)
using --preset option.

Please note that this does not change the default behavior.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
infra/packaging/build
infra/packaging/preset/20191115 [new file with mode: 0644]

index a0c96fe..8769b77 100644 (file)
@@ -7,6 +7,9 @@ if [[ -z "${NNAS_PROJECT_PATH}" ]]; then
   exit 255
 fi
 
+# The default preset
+PRESET="20191115"
+
 EXTRA_OPTIONS=()
 while [ "$#" -ne 0 ]; do
   CUR="$1"
@@ -16,6 +19,10 @@ while [ "$#" -ne 0 ]; do
       NNAS_INSTALL_PREFIX="$2"
       shift 2
       ;;
+    '--preset')
+      PRESET="$2"
+      shift 2
+      ;;
     '--')
       shift
       while [ "$#" -ne 0 ]; do
@@ -37,6 +44,18 @@ if [[ -z "${NNAS_INSTALL_PREFIX}" ]]; then
   exit 255
 fi
 
+PRESET_PATH="${SCRIPT_PATH}/preset/${PRESET}"
+
+if [[ ! -f "${PRESET_PATH}" ]]; then
+  echo "ERROR: ${PRESET} is unavailable"
+  # TODO Show available presets
+  exit 255
+fi
+
+echo "-- Use '${PRESET}' SDK preset"
+
+source "${PRESET_PATH}"
+
 # Normalize to absolute path
 if [[ "${NNAS_INSTALL_PREFIX}" != /*  ]]; then
     NNAS_INSTALL_PREFIX=${PWD}/${NNAS_INSTALL_PREFIX}
@@ -63,34 +82,8 @@ function join_by
   local IFS="$1"; shift; echo "$*"
 }
 
-REQUIRED_UNITS=()
-# Common Libraries
-REQUIRED_UNITS+=("angkor" "bino" "cwrap" "fipe" "pepper-str" "pepper-strcast" "pp" "stdex")
-REQUIRED_UNITS+=("oops" "pepper-assert")
-# Hermes Logging Framework
-REQUIRED_UNITS+=("hermes" "hermes-std")
-# loco IR and related utilities
-REQUIRED_UNITS+=("loco" "locop" "locomotiv" "logo-core" "logo")
-# loco IR extension: Custom Op Support
-REQUIRED_UNITS+=("locoex-customop")
-# TensorFlow Libraries
-REQUIRED_UNITS+=("tfinfo" "plier-tf")
-# TensorFlow GraphDef I/O
-REQUIRED_UNITS+=("mio-tf")
-# TensorFlow Frontend (.pb/.pbtxt -> loco.caninical)
-REQUIRED_UNITS+=("moco-log" "moco" "moco-tf")
-# TensorFlow Lite/Circle Backend (loco.canonical -> .tflite, loco.circle -> .circle)
-REQUIRED_UNITS+=("exo")
-# Tools
-REQUIRED_UNITS+=("tf2tflite" "tf2circle")
-
-# TODO Use "nncc configure" and "nncc build"
-cmake \
-  -DCMAKE_INSTALL_PREFIX="${NNCC_INSTALL_PREFIX}" \
-  -DCMAKE_BUILD_TYPE=release \
-  -DBUILD_WHITELIST=$(join_by ";" "${REQUIRED_UNITS[@]}") \
-  ${EXTRA_OPTIONS[@]} \
-  "${NNAS_PROJECT_PATH}/infra/nncc"
+# Invoke "preset_configure" function that the preset provides
+preset_configure
 
 NPROC=$(cat /proc/cpuinfo | grep -c processor)
 cmake --build . -- -j$((NPROC/2)) all
@@ -98,15 +91,5 @@ cmake --build . -- install
 # Install NN Package tools
 NNPKG_INSTALL_PREFIX="${NNAS_INSTALL_PREFIX}"
 
-install -t "${NNPKG_INSTALL_PREFIX}/bin" -D \
-  "${NNAS_PROJECT_PATH}/tools/nnpackage_tool/model2nnpkg/model2nnpkg.sh" \
-  "${NNAS_PROJECT_PATH}/tools/nnpackage_tool/tflite2circle/tflite2circle.sh" \
-  "${NNAS_PROJECT_PATH}/tools/nnpackage_tool/tflite2circle/tflitejson2circlejson.py"
-
-install -T -m 644 -D \
-  "${SCRIPT_PATH}/res/tflite_schema.fbs" "${NNPKG_INSTALL_PREFIX}/res/tflite_schema.fbs"
-install -T -m 644 -D \
-  "${NNAS_PROJECT_PATH}/nnpackage/schema/circle_schema.fbs" "${NNPKG_INSTALL_PREFIX}/res/circle_schema.fbs"
-
-# Install tf2nnpkg
-install -T -m 755 -D "${SCRIPT_PATH}/res/tf2nnpkg" "${NNAS_INSTALL_PREFIX}/bin/tf2nnpkg"
+# Invoke "preset_install" function that the preset provides
+preset_install
diff --git a/infra/packaging/preset/20191115 b/infra/packaging/preset/20191115
new file mode 100644 (file)
index 0000000..e2f6f8c
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+function preset_configure()
+{
+  REQUIRED_UNITS=()
+  # Common Libraries
+  REQUIRED_UNITS+=("angkor" "bino" "cwrap" "fipe" "pepper-str" "pepper-strcast" "pp" "stdex")
+  REQUIRED_UNITS+=("oops" "pepper-assert")
+  # Hermes Logging Framework
+  REQUIRED_UNITS+=("hermes" "hermes-std")
+  # loco IR and related utilities
+  REQUIRED_UNITS+=("loco" "locop" "locomotiv" "logo-core" "logo")
+  # loco IR extension: Custom Op Support
+  REQUIRED_UNITS+=("locoex-customop")
+  # TensorFlow Libraries
+  REQUIRED_UNITS+=("tfinfo" "plier-tf")
+  # TensorFlow GraphDef I/O
+  REQUIRED_UNITS+=("mio-tf")
+  # TensorFlow Frontend (.pb/.pbtxt -> loco.caninical)
+  REQUIRED_UNITS+=("moco-log" "moco" "moco-tf")
+  # TensorFlow Lite/Circle Backend (loco.canonical -> .tflite, loco.circle -> .circle)
+  REQUIRED_UNITS+=("exo")
+  # Tools
+  REQUIRED_UNITS+=("tf2tflite" "tf2circle")
+
+  # TODO Use "nncc configure" and "nncc build"
+  cmake \
+    -DCMAKE_INSTALL_PREFIX="${NNCC_INSTALL_PREFIX}" \
+    -DCMAKE_BUILD_TYPE=release \
+    -DBUILD_WHITELIST=$(join_by ";" "${REQUIRED_UNITS[@]}") \
+    ${EXTRA_OPTIONS[@]} \
+    "${NNAS_PROJECT_PATH}/infra/nncc"
+}
+
+function preset_install()
+{
+  install -t "${NNPKG_INSTALL_PREFIX}/bin" -D \
+    "${NNAS_PROJECT_PATH}/tools/nnpackage_tool/model2nnpkg/model2nnpkg.sh" \
+    "${NNAS_PROJECT_PATH}/tools/nnpackage_tool/tflite2circle/tflite2circle.sh" \
+    "${NNAS_PROJECT_PATH}/tools/nnpackage_tool/tflite2circle/tflitejson2circlejson.py"
+
+  install -T -m 644 -D \
+    "${SCRIPT_PATH}/res/tflite_schema.fbs" "${NNPKG_INSTALL_PREFIX}/res/tflite_schema.fbs"
+  install -T -m 644 -D \
+    "${NNAS_PROJECT_PATH}/nnpackage/schema/circle_schema.fbs" "${NNPKG_INSTALL_PREFIX}/res/circle_schema.fbs"
+
+  # Install tf2nnpkg
+  install -T -m 755 -D "${SCRIPT_PATH}/res/tf2nnpkg" "${NNAS_INSTALL_PREFIX}/bin/tf2nnpkg"
+}