Commit a115b927 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

tools: ynl: don't skip regeneration from make targets

Commit 2b7ac0c8 ("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: default avatarJakub Kicinski <kuba@kernel.org>
parent 9cf9b570
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -1164,8 +1164,9 @@ class RenderInfo:


class CodeWriter:
    def __init__(self, nlib, out_file=None):
    def __init__(self, nlib, out_file=None, overwrite=True):
        self.nlib = nlib
        self._overwrite = overwrite

        self._nl = False
        self._block_end = False
@@ -1186,7 +1187,8 @@ class CodeWriter:
            return
        # Avoid modifying the file if contents didn't change
        self._out.flush()
        if os.path.isfile(self._out_file) and filecmp.cmp(self._out.name, self._out_file, shallow=False):
        if not self._overwrite and os.path.isfile(self._out_file):
            if filecmp.cmp(self._out.name, self._out_file, shallow=False):
                return
        with open(self._out_file, 'w+') as out_file:
            self._out.seek(0)
@@ -2516,6 +2518,8 @@ def main():
    parser.add_argument('--header', dest='header', action='store_true', default=None)
    parser.add_argument('--source', dest='header', action='store_false')
    parser.add_argument('--user-header', nargs='+', default=[])
    parser.add_argument('--cmp-out', action='store_true', default=None,
                        help='Do not overwrite the output file if the new output is identical to the old')
    parser.add_argument('--exclude-op', action='append', default=[])
    parser.add_argument('-o', dest='out_file', type=str, default=None)
    args = parser.parse_args()
@@ -2543,7 +2547,7 @@ def main():
        print(f'Message enum-model {parsed.msg_id_model} not supported for {args.mode} generation')
        os.sys.exit(1)

    cw = CodeWriter(BaseNlLib(), args.out_file)
    cw = CodeWriter(BaseNlLib(), args.out_file, overwrite=(not args.cmp_out))

    _, spec_kernel = find_kernel_root(args.spec)
    if args.mode == 'uapi' or args.header:
+2 −2
Original line number Diff line number Diff line
@@ -30,8 +30,8 @@ for f in $files; do
    fi

    echo -e "\tGEN ${params[2]}\t$f"
    $TOOL --mode ${params[2]} --${params[3]} --spec $KDIR/${params[0]} \
	  $args -o $f
    $TOOL --cmp-out --mode ${params[2]} --${params[3]} \
	  --spec $KDIR/${params[0]} $args -o $f
done

popd >>/dev/null