scripts: zephyr_module: Skip writing output on no change
Skips updating files if the output already matches the file contents, this prevents a random occurance whereby sysbuild reconfigures itself after a reconfiguration for no known discernable reason Signed-off-by: Jamie McCrae <spam@helper3000.net>
This commit is contained in:
committed by
Anas Nashif
parent
7a9b4d3a5c
commit
a4e2a38370
@@ -830,6 +830,14 @@ def parse_modules(zephyr_base, manifest=None, west_projs=None, modules=None,
|
||||
|
||||
return sorted_modules
|
||||
|
||||
def write_if_different(file, data):
|
||||
if Path(file).is_file():
|
||||
with open(file, encoding="utf-8") as fp:
|
||||
if fp.read() == data:
|
||||
return
|
||||
|
||||
with open(file, 'w', encoding="utf-8") as fp:
|
||||
fp.write(data)
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='''
|
||||
@@ -878,8 +886,17 @@ def main():
|
||||
cmake = ""
|
||||
sysbuild_kconfig = ""
|
||||
sysbuild_cmake = ""
|
||||
settings = ""
|
||||
twister = ""
|
||||
settings = '''\
|
||||
# WARNING. THIS FILE IS AUTO-GENERATED. DO NOT MODIFY!
|
||||
#
|
||||
# This file contains build system settings derived from your modules.
|
||||
#
|
||||
# Modules may be set via ZEPHYR_MODULES, ZEPHYR_EXTRA_MODULES,
|
||||
# and/or the west manifest file.
|
||||
#
|
||||
# See the Modules guide for more information.
|
||||
'''
|
||||
|
||||
west_projs = west_projects()
|
||||
modules = parse_modules(args.zephyr_base, None, west_projs,
|
||||
@@ -907,54 +924,34 @@ def main():
|
||||
kconfig_module_dirs_cmake_out = PurePath(args.sysbuild_kconfig_out).parent / \
|
||||
'kconfig_module_dirs.cmake'
|
||||
|
||||
with open(kconfig_module_dirs_out, 'w', encoding="utf-8") as fp:
|
||||
fp.write(kconfig_module_dirs)
|
||||
|
||||
with open(kconfig_module_dirs_cmake_out, 'w', encoding="utf-8") as fp:
|
||||
fp.write(kconfig_module_dirs_cmake)
|
||||
write_if_different(kconfig_module_dirs_out, kconfig_module_dirs)
|
||||
write_if_different(kconfig_module_dirs_cmake_out, kconfig_module_dirs_cmake)
|
||||
|
||||
if args.kconfig_out:
|
||||
with open(args.kconfig_out, 'w', encoding="utf-8") as fp:
|
||||
fp.write(kconfig)
|
||||
write_if_different(args.kconfig_out, kconfig)
|
||||
|
||||
if args.cmake_out:
|
||||
with open(args.cmake_out, 'w', encoding="utf-8") as fp:
|
||||
fp.write(cmake)
|
||||
write_if_different(args.cmake_out, cmake)
|
||||
|
||||
if args.sysbuild_kconfig_out:
|
||||
with open(args.sysbuild_kconfig_out, 'w', encoding="utf-8") as fp:
|
||||
fp.write(sysbuild_kconfig)
|
||||
write_if_different(args.sysbuild_kconfig_out, sysbuild_kconfig)
|
||||
|
||||
if args.sysbuild_cmake_out:
|
||||
with open(args.sysbuild_cmake_out, 'w', encoding="utf-8") as fp:
|
||||
fp.write(sysbuild_cmake)
|
||||
write_if_different(args.sysbuild_cmake_out, sysbuild_cmake)
|
||||
|
||||
if args.settings_out:
|
||||
with open(args.settings_out, 'w', encoding="utf-8") as fp:
|
||||
fp.write('''\
|
||||
# WARNING. THIS FILE IS AUTO-GENERATED. DO NOT MODIFY!
|
||||
#
|
||||
# This file contains build system settings derived from your modules.
|
||||
#
|
||||
# Modules may be set via ZEPHYR_MODULES, ZEPHYR_EXTRA_MODULES,
|
||||
# and/or the west manifest file.
|
||||
#
|
||||
# See the Modules guide for more information.
|
||||
''')
|
||||
fp.write(settings)
|
||||
write_if_different(args.settings_out, settings)
|
||||
|
||||
if args.twister_out:
|
||||
with open(args.twister_out, 'w', encoding="utf-8") as fp:
|
||||
fp.write(twister)
|
||||
write_if_different(args.twister_out, twister)
|
||||
|
||||
if args.meta_out:
|
||||
meta = process_meta(args.zephyr_base, west_projs, modules,
|
||||
args.extra_modules, args.meta_state_propagate)
|
||||
|
||||
with open(args.meta_out, 'w', encoding="utf-8") as fp:
|
||||
# Ignore references and insert data instead
|
||||
yaml.Dumper.ignore_aliases = lambda self, data: True
|
||||
fp.write(yaml.dump(meta))
|
||||
# Ignore references and insert data instead
|
||||
yaml.Dumper.ignore_aliases = lambda self, data: True
|
||||
write_if_different(args.meta_out, yaml.dump(meta))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user