<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>