Fix support for user mode emulation when using cmake/lit.

When using user mode emulation, i.e. cross-compiling programs for a
different target and running them on a host under qemu user mode
emulation, timeit and fpcmp should have host versions, not target

Running under user mode emulation had been broken for a while,
presumably since

I first tried an alternative approach where fpcmp would be run under qemu user
mode emulation too.  That in itself worked, but if going for that approach, for
orthogonality reasons, we probably should also run the other helper programs as
if they were running on the target, i.e. also under qemu user mode emulation.
I ran into issues with running timeit under qemu user mode emulation and also
running under user mode emulation doesn't seem trivial.

In the end, it seemed better to me to explicitly add a cmake option to mark
that we're running under qemu user mode emulation, and in that mode, only aim
to run the test/benchmark under qemu user mode emulation, rather than also all
the helper programs (such as fpcmp, timeit, under it (which is
what would be needed if we just kept on using only the RUN_UNDER option for
qemu user mode emulation.

Differential Revision:

git-svn-id: 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2385fc3..2d05877 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -77,6 +77,18 @@
 # Run Under configuration for (will be set in
 set(TEST_SUITE_RUN_UNDER "" CACHE STRING " run-under (-u) parameter")
+# User mode emulation configuration (e.g. running under qemu)
+# (will be set in
+    "RUN_UNDER is used to run tests under emulation.")
+# Set value to python style True/False
 # run type/benchmark size configuration (mostly for SPEC at the moment)
     "Type of benchmark inputs (may be test,train or ref)")
@@ -220,7 +232,10 @@
 # Shortcut for the path to the fpcmp executable
-set(FPCMP ${CMAKE_BINARY_DIR}/tools/fpcmp)
+set(FPCMP ${CMAKE_BINARY_DIR}/tools/fpcmp-target)
+  set(FPCMP ${CMAKE_BINARY_DIR}/tools/fpcmp)
        "Measure compile time by wrapping compiler invocations in timeit" ON)
diff --git a/cmake/modules/TestSuite.cmake b/cmake/modules/TestSuite.cmake
index 194e57a..b87a06c 100644
--- a/cmake/modules/TestSuite.cmake
+++ b/cmake/modules/TestSuite.cmake
@@ -99,7 +99,8 @@
-    fpcmp
+    build-fpcmp
+    build-fpcmp-target
diff --git a/ b/
index 0e2819a..ddbaeb7 100644
--- a/
+++ b/
@@ -5,6 +5,7 @@
 config.remote_client = "@TEST_SUITE_REMOTE_CLIENT@"
 config.remote_host = "@TEST_SUITE_REMOTE_HOST@"
 config.run_under = "@TEST_SUITE_RUN_UNDER@"
+config.user_mode_emulation = @TEST_SUITE_USER_MODE_EMULATION@
 config.strip_tool = "@CMAKE_STRIP@"
 config.profile_generate = @TEST_SUITE_PROFILE_GENERATE@
 config.llvm_profdata = "@TEST_SUITE_LLVM_PROFDATA@"
diff --git a/litsupport/modules/ b/litsupport/modules/
index c6725a2..26b119d 100644
--- a/litsupport/modules/
+++ b/litsupport/modules/
@@ -9,7 +9,14 @@
     config = context.config
     cmd = shellcommand.parse(commandline)
-    timeit = "%s/tools/timeit-target" % config.test_source_root
+    if config.user_mode_emulation:
+        # user_mode_emulation should be true if tests are being run via
+        # user-mode emulation (e.g. Qemu) and thus the host version of timeit
+        # should be used.
+        timeit_name = "timeit"
+    else:
+        timeit_name = "timeit-target"
+    timeit = "%s/tools/%s" % (config.test_source_root, timeit_name)
     args = ["--limit-core", "0"]
     args += ["--limit-cpu", "7200"]
     args += ["--timeout", "7200"]
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index a791a80..20f35a7 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -7,7 +7,9 @@
-add_executable(fpcmp fpcmp.c)
+add_executable(fpcmp-target ${CMAKE_CURRENT_SOURCE_DIR}/fpcmp.c)
+add_executable(build-fpcmp-target ALIAS fpcmp-target)
+llvm_add_host_executable(build-fpcmp fpcmp fpcmp.c)