import subprocess
import lit.util

if not ('AArch64' in config.root.targets):
    # We need support for AArch64.
    config.unsupported = True

elif not ('aarch64' in config.root.host_triple):
    # We need to be running on an AArch64 host.
    config.unsupported = True

else:
    # We need libpfm to be installed and allow reading perf counters. We can
    # only know that at runtime, so we try to measure the latency of an empty
    # code snippet and bail out on error.
    llvm_exegesis_exe = lit.util.which('llvm-exegesis', config.llvm_tools_dir)
    if not llvm_exegesis_exe:
        print('llvm-exegesis not found')
        config.unsupported = True
    else:
      try:
          with open(os.devnull, 'w') as quiet:
              check_llvm_exegesis_result = subprocess.call(
                [llvm_exegesis_exe, '-mode', 'latency', '-snippets-file', '/dev/null'], stdout=quiet, stderr=quiet)
      except OSError:
          print('could not exec llvm-exegesis')
          config.unsupported = True
      if not check_llvm_exegesis_result == 0:
        config.unsupported = True
