[cmake] Use more cores in building nncc-package (#9324)
[platform/core/ml/nnfw.git] / infra / packaging / build
1 #!/bin/bash
2
3 SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
4
5 if [[ -z "${NNAS_PROJECT_PATH}" ]]; then
6   echo "ERROR: NNAS_PROJECT_PATH is not specified"
7   exit 255
8 fi
9
10 EXTRA_OPTIONS=()
11 while [ "$#" -ne 0 ]; do
12   CUR="$1"
13
14   case $CUR in
15     '--prefix')
16       NNAS_INSTALL_PREFIX="$2"
17       shift 2
18       ;;
19     '--')
20       shift
21       while [ "$#" -ne 0 ]; do
22         EXTRA_OPTIONS+=("$1")
23         shift
24       done
25       ;;
26     *)
27       echo "ERROR: '${CUR}' is invalid"
28       exit 255
29       ;;
30   esac
31 done
32
33 # Q. Is it better to have the default value for NNAS_INSTALL_PREFIX?
34 # TODO Show USAGE
35 if [[ -z "${NNAS_INSTALL_PREFIX}" ]]; then
36   echo "ERROR: --prefix is not specified"
37   exit 255
38 fi
39
40 # Normalize to absolute path
41 if [[ "${NNAS_INSTALL_PREFIX}" != /*  ]]; then
42     NNAS_INSTALL_PREFIX=${PWD}/${NNAS_INSTALL_PREFIX}
43 fi
44
45 if [[ -z "${NNAS_BUILD_PREFIX}" ]]; then
46   # Create a temporary directory and use it!
47   NNAS_BUILD_PREFIX=$(mktemp -d)
48   trap "{ rm -rf $NNAS_BUILD_PREFIX; }" EXIT
49 fi
50
51 # Create a release directory
52 mkdir -p "${NNAS_INSTALL_PREFIX}"
53
54 # Build and Install NNCC
55 NNCC_BUILD_PREFIX="${NNAS_BUILD_PREFIX}/nncc"
56 NNCC_INSTALL_PREFIX="${NNAS_INSTALL_PREFIX}"
57
58 mkdir -p "${NNCC_BUILD_PREFIX}"
59 cd "${NNCC_BUILD_PREFIX}"
60
61 function join_by
62 {
63   local IFS="$1"; shift; echo "$*"
64 }
65
66 REQUIRED_UNITS=()
67 # Common Libraries
68 REQUIRED_UNITS+=("angkor" "bino" "cwrap" "fipe" "pepper-str" "pepper-strcast" "pp" "stdex")
69 REQUIRED_UNITS+=("oops" "pepper-assert")
70 # Hermes Logging Framework
71 REQUIRED_UNITS+=("hermes" "hermes-std")
72 # loco IR and related utilities
73 REQUIRED_UNITS+=("loco" "locop" "locomotiv" "logo-core" "logo")
74 # loco IR extension: Custom Op Support
75 REQUIRED_UNITS+=("locoex-customop")
76 # TensorFlow Libraries
77 REQUIRED_UNITS+=("tfinfo" "plier-tf")
78 # TensorFlow GraphDef I/O
79 REQUIRED_UNITS+=("mio-tf")
80 # TensorFlow Frontend (.pb/.pbtxt -> loco.caninical)
81 REQUIRED_UNITS+=("moco-log" "moco" "moco-tf")
82 # TensorFlow Lite/Circle Backend (loco.canonical -> .tflite, loco.circle -> .circle)
83 REQUIRED_UNITS+=("exo")
84 # Tools
85 REQUIRED_UNITS+=("tf2tflite" "tf2circle")
86
87 # TODO Use "nncc configure" and "nncc build"
88 cmake \
89   -DCMAKE_INSTALL_PREFIX="${NNCC_INSTALL_PREFIX}" \
90   -DCMAKE_BUILD_TYPE=release \
91   -DBUILD_WHITELIST=$(join_by ";" "${REQUIRED_UNITS[@]}") \
92   ${EXTRA_OPTIONS[@]} \
93   "${NNAS_PROJECT_PATH}/infra/nncc"
94
95 NPROC=$(cat /proc/cpuinfo | grep -c processor)
96 cmake --build . -- -j$((NPROC/2)) all
97 cmake --build . -- install
98 # Install NN Package tools
99 NNPKG_INSTALL_PREFIX="${NNAS_INSTALL_PREFIX}"
100
101 install -t "${NNPKG_INSTALL_PREFIX}/bin" -D \
102   "${NNAS_PROJECT_PATH}/tools/nnpackage_tool/model2nnpkg/model2nnpkg.sh" \
103   "${NNAS_PROJECT_PATH}/tools/nnpackage_tool/tflite2circle/tflite2circle.sh" \
104   "${NNAS_PROJECT_PATH}/tools/nnpackage_tool/tflite2circle/tflitejson2circlejson.py"
105
106 install -T -m 644 -D \
107   "${SCRIPT_PATH}/res/tflite_schema.fbs" "${NNPKG_INSTALL_PREFIX}/res/tflite_schema.fbs"
108 install -T -m 644 -D \
109   "${NNAS_PROJECT_PATH}/nnpackage/schema/circle_schema.fbs" "${NNPKG_INSTALL_PREFIX}/res/circle_schema.fbs"
110
111 # Install tf2nnpkg
112 install -T -m 755 -D "${SCRIPT_PATH}/res/tf2nnpkg" "${NNAS_INSTALL_PREFIX}/bin/tf2nnpkg"