| #!/bin/bash -u |
| |
| if [[ -z "${ANDROID_BUILD_TOP:-}" ]] ; then |
| echo >&2 "*** ERROR: $(basename $0) requires envar ANDROID_BUILD_TOP to be set" |
| exit 1 |
| fi |
| |
| DRYRUN="" |
| MODE="update" |
| while [[ $# -ne 0 ]] ; do |
| case "${1}" in |
| --dryrun) |
| DRYRUN="echo" |
| shift |
| ;; |
| --mode=*) |
| MODE=${1#"--mode="} |
| shift |
| ;; |
| *) |
| echo >&2 "*** USAGE: $(basename $0) [--dryrun] [--mode={update|hook}]" |
| exit 1 |
| ;; |
| esac |
| done |
| |
| TOOL=$(dirname $0)/generate_api.py |
| SPECFILE=$(dirname $0)/types.spec |
| HALDIR=${ANDROID_BUILD_TOP}/hardware/interfaces/neuralnetworks |
| NDKDIR=${ANDROID_BUILD_TOP}/packages/modules/NeuralNetworks/runtime/include |
| CANONICALDIR=${ANDROID_BUILD_TOP}/packages/modules/NeuralNetworks/common/include/nnapi |
| |
| RET=0 |
| function doit { |
| typeset -r kind="$1" in="$2" out="$3" |
| echo "=== $kind" |
| ${DRYRUN} ${TOOL} --kind ${kind} --specification ${SPECFILE} --template ${in} --out ${out} |
| if [[ $? -ne 0 ]] ; then RET=1 ; fi |
| } |
| |
| function check { |
| typeset -r kind="$1" in="$2" out="$3" |
| TEMPFILE=$(mktemp) |
| doit ${kind} ${in} ${TEMPFILE} |
| if [[ ${RET} -eq 0 ]] ; then |
| ${DRYRUN} cmp -s ${out} ${TEMPFILE} || { |
| RET=1 |
| echo >&2 "Error: $(basename ${out}) is out of sync with $(basename ${in}) or types.spec. Please run generate_api.sh before uploading." |
| } |
| fi |
| } |
| |
| case "${MODE}" in |
| update) |
| doit canonical $(dirname $0)/Types.t ${CANONICALDIR}/Types.h |
| doit canonical $(dirname $0)/OperandTypes.t ${CANONICALDIR}/OperandTypes.h |
| doit canonical $(dirname $0)/OperationTypes.t ${CANONICALDIR}/OperationTypes.h |
| doit ndk $(dirname $0)/NeuralNetworksTypes.t ${NDKDIR}/NeuralNetworksTypes.h |
| doit hal_1.0 ${HALDIR}/1.0/types.t ${HALDIR}/1.0/types.hal |
| doit hal_1.1 ${HALDIR}/1.1/types.t ${HALDIR}/1.1/types.hal |
| doit hal_1.2 ${HALDIR}/1.2/types.t ${HALDIR}/1.2/types.hal |
| doit hal_1.3 ${HALDIR}/1.3/types.t ${HALDIR}/1.3/types.hal |
| ;; |
| hook) |
| check canonical $(dirname $0)/Types.t ${CANONICALDIR}/Types.h |
| check canonical $(dirname $0)/OperandTypes.t ${CANONICALDIR}/OperandTypes.h |
| check canonical $(dirname $0)/OperationTypes.t ${CANONICALDIR}/OperationTypes.h |
| check ndk $(dirname $0)/NeuralNetworksTypes.t ${NDKDIR}/NeuralNetworksTypes.h |
| ;; |
| *) |
| echo >&2 "*** Unknown mode: ${MODE}" |
| exit 1 |
| ;; |
| esac |
| |
| if [[ ${RET} -ne 0 ]] ; then |
| echo >&2 "*** FAILED" |
| fi |
| exit ${RET} |