From d5b2834f58e11b59c640f00f3f2ca2fb85d3a48c Mon Sep 17 00:00:00 2001 From: Marc Herbert Date: Fri, 15 Feb 2019 18:56:57 -0800 Subject: [PATCH] scripts/*syscalls.py: sort os.walk() for a more deterministic build Found by "disordered --shuffle-dirents=yes". Sorting os.walk() in scripts/subfolder_list.py removes the randomness in the following files: build/zephyr/misc/generated/syscalls_subdirs.txt build/zephyr/CMakeFiles/syscall_list_h_target.dir/ or build.ninja Sorting os.walk() in scripts/parse_syscalls.py removes the randomness in: build/zephyr/misc/generated/syscalls.json build/zephyr/include/generated/syscall_dispatch.c build/zephyr/include/generated/syscall_list.h Note my (limited so far) testing did *not* observe any randomness in any object file that this would address; the main purpose here is to remove a very large amount of noise in diffoscope. Signed-off-by: Marc Herbert --- scripts/parse_syscalls.py | 8 ++++++-- scripts/subfolder_list.py | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/scripts/parse_syscalls.py b/scripts/parse_syscalls.py index 462989d89ee..bd712a50bd7 100644 --- a/scripts/parse_syscalls.py +++ b/scripts/parse_syscalls.py @@ -23,7 +23,9 @@ def analyze_headers(multiple_directories): ret = [] for base_path in multiple_directories: - for root, dirs, files in os.walk(base_path): + for root, dirs, files in os.walk(base_path, topdown=True): + dirs.sort() + files.sort() for fn in files: # toolchain/common.h has the definition of __syscall which we @@ -52,7 +54,9 @@ def parse_args(): formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument("-i", "--include", required=True, action='append', - help="Base include directory") + help='''include directories recursively scanned + for .h files. Can be specified multiple times: + -i topdir1 -i topdir2 ...''') parser.add_argument( "-j", "--json-file", required=True, help="Write system call prototype information as json to file") diff --git a/scripts/subfolder_list.py b/scripts/subfolder_list.py index 7c71c681308..c593d525a79 100644 --- a/scripts/subfolder_list.py +++ b/scripts/subfolder_list.py @@ -45,7 +45,8 @@ def main(): else: dirlist.extend(args.directory) dirlist.extend(os.linesep) - for root, dirs, files in os.walk(args.directory): + for root, dirs, _ in os.walk(args.directory, topdown=True): + dirs.sort() for subdir in dirs: if(args.create_links is not None): directory = os.path.join(root, subdir)