import subprocess
import lit.util

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

elif not ('x86_64' in config.root.host_triple):
    # We need to be running on an X86 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_uops_result = subprocess.call(
                [llvm_exegesis_exe, '-mode', 'uops', '-snippets-file', '/dev/null'], stdout=quiet, stderr=quiet)
              check_llvm_exegesis_latency_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_uops_result == 0:
        config.unsupported = True
      if not check_llvm_exegesis_latency_result == 0:
        config.unsupported = True
