File: iossim_run.py

package info (click to toggle)
llvm-toolchain-15 1%3A15.0.6-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,554,644 kB
  • sloc: cpp: 5,922,452; ansic: 1,012,136; asm: 674,362; python: 191,568; objc: 73,855; f90: 42,327; lisp: 31,913; pascal: 11,973; javascript: 10,144; sh: 9,421; perl: 7,447; ml: 5,527; awk: 3,523; makefile: 2,520; xml: 885; cs: 573; fortran: 567
file content (67 lines) | stat: -rwxr-xr-x 1,997 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/env python3

import glob, os, pipes, sys, subprocess


device_id = os.environ.get('SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER')
iossim_run_verbose = os.environ.get('SANITIZER_IOSSIM_RUN_VERBOSE')
wait_for_debug = os.environ.get('SANITIZER_IOSSIM_RUN_WAIT_FOR_DEBUGGER')

if not device_id:
  raise EnvironmentError("Specify SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER to select which simulator to use.")

for e in [
  "ASAN_OPTIONS",
  "TSAN_OPTIONS",
  "UBSAN_OPTIONS",
  "LSAN_OPTIONS",
  "APPLE_ASAN_INIT_FOR_DLOPEN",
  "ASAN_ACTIVATION_OPTIONS",
  "MallocNanoZone",
]:
  if e in os.environ:
    os.environ["SIMCTL_CHILD_" + e] = os.environ[e]

find_atos_cmd = 'xcrun -sdk iphonesimulator -f atos'
atos_path = subprocess.run(find_atos_cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True).stdout.decode().strip()
for san in ['ASAN', 'TSAN', 'UBSAN', 'LSAN']:
  os.environ[f'SIMCTL_CHILD_{san}_SYMBOLIZER_PATH'] = atos_path

prog = sys.argv[1]
exit_code = None
if prog == 'rm':
  # The simulator and host actually share the same file system so we can just
  # execute directly on the host.
  rm_args = []
  for arg in sys.argv[2:]:
    if '*' in arg or '?' in arg:
      # Don't quote glob pattern
      rm_args.append(arg)
    else:
      # FIXME(dliew): pipes.quote() is deprecated
      rm_args.append(pipes.quote(arg))
  rm_cmd_line = ["/bin/rm"] + rm_args
  rm_cmd_line_str = ' '.join(rm_cmd_line)
  # We use `shell=True` so that any wildcard globs get expanded by the shell.

  if iossim_run_verbose:
    print("RUNNING: \t{}".format(rm_cmd_line_str), flush=True)

  exitcode = subprocess.call(rm_cmd_line_str, shell=True)

else:
  cmd = ["xcrun", "simctl", "spawn", "--standalone"]

  if wait_for_debug:
    cmd.append("--wait-for-debugger")

  cmd.append(device_id)
  cmd += sys.argv[1:]

  if iossim_run_verbose:
    print("RUNNING: \t{}".format(" ".join(cmd)), flush=True)

  exitcode = subprocess.call(cmd)
if exitcode > 125:
  exitcode = 126
sys.exit(exitcode)