From 9ac26d8387a9f4bed97caa322e2fd85e949f5564 Mon Sep 17 00:00:00 2001 From: David Spickett Date: Fri, 5 Jan 2024 09:49:03 +0000 Subject: [PATCH] [libcxx] Require qemu-system-arm for armv7m builder And add a check in the python script that the binary given to `--qemu` actually exists. Otherwise you get a generic Python error: ``` # .---command stderr------------ # | Traceback (most recent call last): # | File "/home/david.spickett/modules-llvm-project/libcxx/utils/qemu_baremetal.py", line 70, in # | exit(main()) # | File "/home/david.spickett/modules-llvm-project/libcxx/utils/qemu_baremetal.py", line 66, in main # | os.execvp(qemu_commandline[0], qemu_commandline) # | File "/usr/lib/python3.8/os.py", line 568, in execvp # | _execvpe(file, args) # | File "/usr/lib/python3.8/os.py", line 610, in _execvpe # | raise last_exc # | File "/usr/lib/python3.8/os.py", line 601, in _execvpe # | exec_func(fullname, *argrest) # | FileNotFoundError: [Errno 2] No such file or directory # `----------------------------- # error: command failed with exit status: 1 ``` When it tries to run the entire command later. For the builder, it's only ever going to use qemu-system-arm so error at config time if it's not there. --- libcxx/cmake/caches/Armv7M-picolibc.cmake | 2 +- libcxx/utils/qemu_baremetal.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libcxx/cmake/caches/Armv7M-picolibc.cmake b/libcxx/cmake/caches/Armv7M-picolibc.cmake index 91cc32fd376e3..3ab80b960ed44 100644 --- a/libcxx/cmake/caches/Armv7M-picolibc.cmake +++ b/libcxx/cmake/caches/Armv7M-picolibc.cmake @@ -39,4 +39,4 @@ set(LIBUNWIND_ENABLE_THREADS OFF CACHE BOOL "") set(LIBUNWIND_IS_BAREMETAL ON CACHE BOOL "") set(LIBUNWIND_REMEMBER_HEAP_ALLOC ON CACHE BOOL "") set(LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") -find_program(QEMU_SYSTEM_ARM qemu-system-arm) +find_program(QEMU_SYSTEM_ARM qemu-system-arm REQUIRED) diff --git a/libcxx/utils/qemu_baremetal.py b/libcxx/utils/qemu_baremetal.py index aaf5b84489066..126031bbb19c4 100755 --- a/libcxx/utils/qemu_baremetal.py +++ b/libcxx/utils/qemu_baremetal.py @@ -16,6 +16,7 @@ import argparse import os import sys +import shutil def main(): @@ -32,8 +33,13 @@ def main(): parser.add_argument("test_binary") parser.add_argument("test_args", nargs=argparse.ZERO_OR_MORE, default=[]) args = parser.parse_args() + + if not shutil.which(args.qemu): + sys.exit(f"Failed to find QEMU binary from --qemu value: '{args.qemu}'") + if not os.path.exists(args.test_binary): sys.exit(f"Expected argument to be a test executable: '{args.test_binary}'") + qemu_commandline = [ args.qemu, "-chardev",