#include <cstring>
#include <iostream>

#include <llvm/ADT/Triple.h>

using namespace llvm;

static void PrintTriple(Triple &T) {
  std::cout << T.getTriple() << "\n";
}
static void PrintArchName(Triple &T) {
  std::cout << T.getArchTypeName(T.getArch()) << "\n";
}
static void PrintVendorName(Triple &T) {
  std::cout << T.getVendorTypeName(T.getVendor()) << "\n";
}
static void PrintOSName(Triple &T) {
  std::cout << T.getOSTypeName(T.getOS()) << "\n";
}
static void PrintArchTypePrefix(Triple &T) {
  std::cout << T.getArchTypePrefix(T.getArch()) << "\n";
}

struct Option {
  const char *Name;
  void (*Action)(Triple &);
};

static Option Options[] = {
  { "-t", PrintTriple },
  { "-a", PrintArchName },
  { "-v", PrintVendorName },
  { "-o", PrintOSName },
  { "-p", PrintArchTypePrefix },
  { NULL, NULL }
};

int main(int argc, char **argv) {
  Triple T(TARGET_NAME);

  for (int i = 1; i < argc; ++i) {
    bool Found = false;
    for (Option *O = Options; O->Name; ++O)
      if (!strcmp(argv[i], O->Name)) {
        Found = true;
        O->Action(T);
        break;
      }
    if (!Found) {
      std::cerr << "Unknown option \"" << argv[i] << "\"\n";
      std::cerr << "Usage: " << argv[0];
      for (Option *O = Options; O->Name; ++O)
        std::cerr << " " << O->Name;
      std::cerr << "\n";
      return 1;
    }
  }

  return 0;
}
