diff options
Diffstat (limited to 'tools/net/ynl/ynl-regen.sh')
-rwxr-xr-x | tools/net/ynl/ynl-regen.sh | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tools/net/ynl/ynl-regen.sh b/tools/net/ynl/ynl-regen.sh new file mode 100755 index 0000000000..bdba24066c --- /dev/null +++ b/tools/net/ynl/ynl-regen.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause + +TOOL=$(dirname $(realpath $0))/ynl-gen-c.py + +force= +search= + +while [ ! -z "$1" ]; do + case "$1" in + -f ) force=yes; shift ;; + -p ) search=$2; shift 2 ;; + * ) echo "Unrecognized option '$1'"; exit 1 ;; + esac +done + +KDIR=$(dirname $(dirname $(dirname $(dirname $(realpath $0))))) +pushd ${search:-$KDIR} >>/dev/null + +files=$(git grep --files-with-matches '^/\* YNL-GEN \(kernel\|uapi\|user\)') +for f in $files; do + # params: 0 1 2 3 + # $YAML YNL-GEN kernel $mode + params=( $(git grep -B1 -h '/\* YNL-GEN' $f | sed 's@/\*\(.*\)\*/@\1@') ) + args=$(sed -n 's@/\* YNL-ARG \(.*\) \*/@\1@p' $f) + + if [ $f -nt ${params[0]} -a -z "$force" ]; then + echo -e "\tSKIP $f" + continue + fi + + echo -e "\tGEN ${params[2]}\t$f" + $TOOL --mode ${params[2]} --${params[3]} --spec $KDIR/${params[0]} \ + $args -o $f +done + +popd >>/dev/null |