mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-10 15:58:47 +00:00
a115b9279f
Commit 2b7ac0c87d98 ("tools: ynl-gen: don't touch the output file if content is the same") is working too well. It was added so that ynl-regen -f doesn't make us rebuild half of the kernel, if there are no actual changes in any generated code. When ynl-gen-c is called by make, however, we're better off trusting make's tracking and overwrite the file. Otherwise if output is identical we won't update file timestamps and make will retry code gen on every invocation. Link: https://lore.kernel.org/r/20231129193622.2912353-5-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
38 lines
950 B
Bash
Executable File
38 lines
950 B
Bash
Executable File
#!/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 --cmp-out --mode ${params[2]} --${params[3]} \
|
|
--spec $KDIR/${params[0]} $args -o $f
|
|
done
|
|
|
|
popd >>/dev/null
|