https://github.com/paschalis-mpeis updated https://github.com/llvm/llvm-project/pull/146659
>From 2b5e54e8f3ed5f29a495a92e4e9aaaa3725c74df Mon Sep 17 00:00:00 2001 From: Paschalis Mpeis <paschalis.mp...@arm.com> Date: Fri, 4 Jul 2025 14:54:58 +0100 Subject: [PATCH] [BOLT][NFC] Update nfc-check-setup.py guidance --- bolt/utils/nfc-check-setup.py | 53 ++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/bolt/utils/nfc-check-setup.py b/bolt/utils/nfc-check-setup.py index 18bf7522de17b..d8666e2158499 100755 --- a/bolt/utils/nfc-check-setup.py +++ b/bolt/utils/nfc-check-setup.py @@ -7,6 +7,8 @@ import sys import textwrap +msg_prefix = "\n> NFC-Mode:" + def get_relevant_bolt_changes(dir: str) -> str: # Return a list of bolt source changes that are relevant to testing. all_changes = subprocess.run( @@ -49,7 +51,7 @@ def switch_back( # the HEAD is. Must be called after checking out the previous commit on all # exit paths. if switch_back: - print("Switching back to current revision..") + print(f"{msg_prefix} Switching back to current revision..") if stash: subprocess.run(shlex.split("git stash pop"), cwd=source_dir) subprocess.run(shlex.split(f"git checkout {old_ref}"), cwd=source_dir) @@ -64,8 +66,10 @@ def main(): parser = argparse.ArgumentParser( description=textwrap.dedent( """ - This script builds two versions of BOLT (with the current and - previous revision). + This script builds two versions of BOLT: + llvm-bolt.new, using the current revision, and llvm-bolt.old using + the previous revision. These can be used to check whether the + current revision changes BOLT's functional behavior. """ ) ) @@ -104,7 +108,7 @@ def main(): if not args.create_wrapper and len(wrapper_args) > 0: parser.parse_args() - # find the repo directory + # Find the repo directory. source_dir = None try: CMCacheFilename = f"{args.build_dir}/CMakeCache.txt" @@ -118,13 +122,13 @@ def main(): except Exception as e: sys.exit(e) - # clean the previous llvm-bolt if it exists + # Clean the previous llvm-bolt if it exists. bolt_path = f"{args.build_dir}/bin/llvm-bolt" if os.path.exists(bolt_path): os.remove(bolt_path) - # build the current commit - print("NFC-Setup: Building current revision..") + # Build the current commit. + print(f"{msg_prefix} Building current revision..") subprocess.run( shlex.split("cmake --build . --target llvm-bolt"), cwd=args.build_dir ) @@ -132,9 +136,8 @@ def main(): if not os.path.exists(bolt_path): sys.exit(f"Failed to build the current revision: '{bolt_path}'") - # rename llvm-bolt + # Rename llvm-bolt and memorize the old hash for logging. os.replace(bolt_path, f"{bolt_path}.new") - # memorize the old hash for logging old_ref = get_git_ref_or_rev(source_dir) if args.check_bolt_sources: @@ -147,7 +150,7 @@ def main(): print(f"BOLT source changes were found:\n{file_changes}") open(marker, "a").close() - # determine whether a stash is needed + # Determine whether a stash is needed. stash = subprocess.run( shlex.split("git status --porcelain"), cwd=source_dir, @@ -156,32 +159,33 @@ def main(): text=True, ).stdout if stash: - # save local changes before checkout + # Save local changes before checkout. subprocess.run(shlex.split("git stash push -u"), cwd=source_dir) - # check out the previous/cmp commit + + # Check out the previous/cmp commit and get its commit hash for logging. subprocess.run(shlex.split(f"git checkout -f {args.cmp_rev}"), cwd=source_dir) - # get the parent commit hash for logging new_ref = get_git_ref_or_rev(source_dir) - # build the previous commit - print("NFC-Setup: Building previous revision..") + # Build the previous commit. + print(f"{msg_prefix} Building previous revision..") subprocess.run( shlex.split("cmake --build . --target llvm-bolt"), cwd=args.build_dir ) - # rename llvm-bolt + # Rename llvm-bolt. if not os.path.exists(bolt_path): print(f"Failed to build the previous revision: '{bolt_path}'") switch_back(args.switch_back, stash, source_dir, old_ref, new_ref) sys.exit(1) os.replace(bolt_path, f"{bolt_path}.old") - # symlink llvm-bolt-wrapper + # Symlink llvm-bolt-wrapper if args.create_wrapper: + print(f"{msg_prefix} Creating llvm-bolt wrapper..") script_dir = os.path.dirname(os.path.abspath(__file__)) wrapper_path = f"{script_dir}/llvm-bolt-wrapper.py" try: - # set up llvm-bolt-wrapper.ini + # Set up llvm-bolt-wrapper.ini ini = subprocess.check_output( shlex.split(f"{wrapper_path} {bolt_path}.old {bolt_path}.new") + wrapper_args, @@ -189,7 +193,6 @@ def main(): ) with open(f"{args.build_dir}/bin/llvm-bolt-wrapper.ini", "w") as f: f.write(ini) - # symlink llvm-bolt-wrapper os.symlink(wrapper_path, bolt_path) except Exception as e: print("Failed to create a wrapper:\n" + str(e)) @@ -199,11 +202,17 @@ def main(): switch_back(args.switch_back, stash, source_dir, old_ref, new_ref) print( - f"Build directory {args.build_dir} is ready to run BOLT tests, e.g.\n" - "\tbin/llvm-lit -sv tools/bolt/test\nor\n" - "\tbin/llvm-lit -sv tools/bolttests" + f"{msg_prefix} Completed!\nBuild directory {args.build_dir} is ready for" + " NFC-Mode comparison between the two revisions." ) + if args.create_wrapper: + print( + "Can run BOLT tests using:\n" + "\tbin/llvm-lit -sv tools/bolt/test\nor\n" + "\tbin/llvm-lit -sv tools/bolttests" + ) + if __name__ == "__main__": main() _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits