Fix for llvm::sys::getHostTriple on Windows. Instead of relying on the triple
authorChad Rosier <mcrosier@apple.com>
Sat, 15 Oct 2011 02:10:06 +0000 (02:10 +0000)
committerChad Rosier <mcrosier@apple.com>
Sat, 15 Oct 2011 02:10:06 +0000 (02:10 +0000)
from config.h, it discovers the triple based on the execution environment.

Patch by Aaron Ballman <aaron@aaronballman.com>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142046 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/Windows/Host.inc

index 733830e82f08e69e80722a4ed39c1e849b0c4996..6d4803f3b8dbeee458f2fa32e4f9bd3521ae7b96 100644 (file)
 //===----------------------------------------------------------------------===//
 
 #include "Windows.h"
-#include <cstdio>
-#include <string>
+#include "llvm/ADT/Twine.h"
 
 using namespace llvm;
 
 std::string sys::getHostTriple() {
-  // FIXME: Adapt to running version.
-  return LLVM_HOSTTRIPLE;
+  // Get the execution environment, not the native environment.
+  SYSTEM_INFO info;
+  ::GetSystemInfo(&info);
+
+  Twine ret;
+  switch (info.wProcessorArchitecture) {
+  // If we don't know what the processor architecture is, or it is not one
+  // we currently support, then we should fall back on something reasonable.
+  case PROCESSOR_ARCHITECTURE_IA64:
+  default: return LLVM_HOSTTRIPLE;
+
+  case PROCESSOR_ARCHITECTURE_INTEL:
+    // We need to figure out what kind of x86 it is (possible values are
+    // i386 through i986).
+    ret = Twine("i").concat(Twine(info.wProcessorLevel)).concat("86");
+    break;
+  case PROCESSOR_ARCHITECTURE_AMD64:
+    ret = "amd64";
+       break;
+  case PROCESSOR_ARCHITECTURE_MIPS:
+    ret = "mips";
+    break;
+  case PROCESSOR_ARCHITECTURE_ARM:
+    ret = "arm";
+    break;
+  case PROCESSOR_ARCHITECTURE_PPC:
+    ret = "ppc";
+    break;
+  case PROCESSOR_ARCHITECTURE_ALPHA:
+    ret = "alpha";
+    break;
+  }
+
+  // Since we're on Windows, we're always on pc-win32.
+  return ret.concat("-pc-win32").str();
 }