import subprocess
import lit.util

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

elif not ('powerpc' in config.root.host_triple):
    # We need to be running on an PPC 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
