<div dir="ltr">Ping.<br><br><div class="gmail_quote"><div dir="ltr">On Tue, May 30, 2017 at 9:57 AM NAKAMURA Takumi via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">chapuni created this revision.<br>
Herald added a subscriber: mgorny.<br>
<br>
No behavior is changed if LLVM_TARGET_TRIPLE_ENV is blank or undefined.<br>
<br>
If LLVM_TARGET_TRIPLE_ENV is "TEST_TARGET_TRIPLE" and $TEST_TARGET_TRIPLE is not blank,<br>
llvm::sys::getDefaultTargetTriple() returns $TEST_TARGET_TRIPLE.<br>
Lit resets config.target_triple and config.environment[LLVM_TARGET_TRIPLE_ENV] to change the default target.<br>
<br>
Without changing LLVM_DEFAULT_TARGET_TRIPLE nor rebuilding, lit can be run;<br>
<br>
  TEST_TARGET_TRIPLE=i686-pc-win32 bin/llvm-lit -sv path/to/test/<br>
  TEST_TARGET_TRIPLE=i686-pc-win32 ninja check-clang-tools<br>
<br>
Why I make the name of an environment variable configurable? Because...<br>
<br>
- Let this functionality configurable.<br>
- I'd not like to hear "Why $CLANG_TARGET is unavailable in spite of $LLVM_TARGET there"<br>
<br>
In the future, I am planning to implement running triple matrix in Lit.<br>
For example, running each test for each triple {i686|x86_64}-{mingw32|win32}.<br>
Then, some commands, like FileCheck and commands with an explicit triple, aren't required to run iteratively.<br>
<br>
<br>
Repository:<br>
  rL LLVM<br>
<br>
<a href="https://reviews.llvm.org/D33662" rel="noreferrer" target="_blank">https://reviews.llvm.org/D33662</a><br>
<br>
Files:<br>
  llvm/trunk/CMakeLists.txt<br>
  llvm/trunk/cmake/modules/AddLLVM.cmake<br>
  llvm/trunk/include/llvm/Config/config.h.cmake<br>
  llvm/trunk/lib/Support/Unix/Host.inc<br>
  llvm/trunk/lib/Support/Windows/Host.inc<br>
<br>
<br>
Index: llvm/trunk/lib/Support/Windows/Host.inc<br>
===================================================================<br>
--- llvm/trunk/lib/Support/Windows/Host.inc<br>
+++ llvm/trunk/lib/Support/Windows/Host.inc<br>
@@ -18,5 +18,13 @@<br>
 using namespace llvm;<br>
<br>
 std::string sys::getDefaultTargetTriple() {<br>
-  return Triple::normalize(LLVM_DEFAULT_TARGET_TRIPLE);<br>
+  const char *Triple = LLVM_DEFAULT_TARGET_TRIPLE;<br>
+<br>
+  // Override the default target with an environment variable named by LLVM_TARGET_TRIPLE_ENV.<br>
+#if defined(LLVM_TARGET_TRIPLE_ENV)<br>
+  if (const char *EnvTriple = std::getenv(LLVM_TARGET_TRIPLE_ENV))<br>
+    Triple = EnvTriple;<br>
+#endif<br>
+<br>
+  return Triple::normalize(Triple);<br>
 }<br>
Index: llvm/trunk/lib/Support/Unix/Host.inc<br>
===================================================================<br>
--- llvm/trunk/lib/Support/Unix/Host.inc<br>
+++ llvm/trunk/lib/Support/Unix/Host.inc<br>
@@ -45,5 +45,11 @@<br>
     TargetTripleString += getOSVersion();<br>
   }<br>
<br>
+  // Override the default target with an environment variable named by LLVM_TARGET_TRIPLE_ENV.<br>
+#if defined(LLVM_TARGET_TRIPLE_ENV)<br>
+  if (const char *EnvTriple = std::getenv(LLVM_TARGET_TRIPLE_ENV))<br>
+    TargetTripleString = EnvTriple;<br>
+#endif<br>
+<br>
   return Triple::normalize(TargetTripleString);<br>
 }<br>
Index: llvm/trunk/include/llvm/Config/config.h.cmake<br>
===================================================================<br>
--- llvm/trunk/include/llvm/Config/config.h.cmake<br>
+++ llvm/trunk/include/llvm/Config/config.h.cmake<br>
@@ -377,6 +377,9 @@<br>
 /* Define if this is Win32ish platform */<br>
 #cmakedefine LLVM_ON_WIN32 ${LLVM_ON_WIN32}<br>
<br>
+/* Define if overriding target triple is enabled */<br>
+#cmakedefine LLVM_TARGET_TRIPLE_ENV "${LLVM_TARGET_TRIPLE_ENV}"<br>
+<br>
 /* Define if we have the Intel JIT API runtime support library */<br>
 #cmakedefine01 LLVM_USE_INTEL_JITEVENTS<br>
<br>
Index: llvm/trunk/cmake/modules/AddLLVM.cmake<br>
===================================================================<br>
--- llvm/trunk/cmake/modules/AddLLVM.cmake<br>
+++ llvm/trunk/cmake/modules/AddLLVM.cmake<br>
@@ -1133,6 +1133,19 @@<br>
<br>
   set(LIT_SITE_CFG_IN_HEADER  "## Autogenerated from ${input}\n## Do not edit!")<br>
<br>
+  # Override config_target_triple (and the env)<br>
+  if(LLVM_TARGET_TRIPLE_ENV)<br>
+    # This is expanded into the heading.<br>
+    string(CONCAT LIT_SITE_CFG_IN_HEADER "${LIT_SITE_CFG_IN_HEADER}\n\n"<br>
+      "import os\n"<br>
+      "target_env = \"${LLVM_TARGET_TRIPLE_ENV}\"\n"<br>
+      "config.target_triple = config.environment[target_env] = os.environ.get(target_env, \"${TARGET_TRIPLE}\")\n"<br>
+      )<br>
+<br>
+    # This is expanded to; config.target_triple = ""+config.target_triple+""<br>
+    set(TARGET_TRIPLE "\"+config.target_triple+\"")<br>
+  endif()<br>
+<br>
   configure_file(${input} ${output} @ONLY)<br>
 endfunction()<br>
<br>
Index: llvm/trunk/CMakeLists.txt<br>
===================================================================<br>
--- llvm/trunk/CMakeLists.txt<br>
+++ llvm/trunk/CMakeLists.txt<br>
@@ -569,6 +569,10 @@<br>
   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")<br>
 endif()<br>
<br>
+# Override the default target with an environment variable named by LLVM_TARGET_TRIPLE_ENV.<br>
+set(LLVM_TARGET_TRIPLE_ENV CACHE STRING "The name of environment variable to override default target. Disabled by blank.")<br>
+mark_as_advanced(LLVM_TARGET_TRIPLE_ENV)<br>
+<br>
 # All options referred to from HandleLLVMOptions have to be specified<br>
 # BEFORE this include, otherwise options will not be correctly set on<br>
 # first cmake run<br>
<br>
<br>
</blockquote></div></div>