[test-suite] r365783 - Fix support for user mode emulation when using cmake/lit.

Kristof Beyls via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 11 07:29:58 PDT 2019


Author: kbeyls
Date: Thu Jul 11 07:29:58 2019
New Revision: 365783

URL: http://llvm.org/viewvc/llvm-project?rev=365783&view=rev
Log:
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
versions.

Running under user mode emulation had been broken for a while,
presumably since https://reviews.llvm.org/rT341257

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 RunSafely.sh 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, RunSafely.sh) 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: https://reviews.llvm.org/D61597


Modified:
    test-suite/trunk/CMakeLists.txt
    test-suite/trunk/cmake/modules/TestSuite.cmake
    test-suite/trunk/lit.site.cfg.in
    test-suite/trunk/litsupport/modules/timeit.py
    test-suite/trunk/tools/CMakeLists.txt

Modified: test-suite/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/CMakeLists.txt?rev=365783&r1=365782&r2=365783&view=diff
==============================================================================
--- test-suite/trunk/CMakeLists.txt (original)
+++ test-suite/trunk/CMakeLists.txt Thu Jul 11 07:29:58 2019
@@ -77,6 +77,18 @@ endif()
 # Run Under configuration for RunSafely.sh (will be set in lit.site.cfg)
 set(TEST_SUITE_RUN_UNDER "" CACHE STRING "RunSafely.sh run-under (-u) parameter")
 
+# User mode emulation configuration (e.g. running under qemu)
+# (will be set in lit.site.cfg)
+set(TEST_SUITE_USER_MODE_EMULATION NO CACHE BOOL
+    "RUN_UNDER is used to run tests under emulation.")
+# Set value to python style True/False
+if (TEST_SUITE_USER_MODE_EMULATION)
+  set(TEST_SUITE_USER_MODE_EMULATION "True")
+else()
+  set(TEST_SUITE_USER_MODE_EMULATION "False")
+endif()
+
+
 # run type/benchmark size configuration (mostly for SPEC at the moment)
 set(TEST_SUITE_RUN_TYPE "train" CACHE STRING
     "Type of benchmark inputs (may be test,train or ref)")
@@ -220,7 +232,10 @@ mark_as_advanced(TEST_SUITE_LIT)
 
 add_subdirectory(tools)
 # Shortcut for the path to the fpcmp executable
-set(FPCMP ${CMAKE_BINARY_DIR}/tools/fpcmp)
+set(FPCMP ${CMAKE_BINARY_DIR}/tools/fpcmp-target)
+if (TEST_SUITE_USER_MODE_EMULATION)
+  set(FPCMP ${CMAKE_BINARY_DIR}/tools/fpcmp)
+endif()
 
 option(TEST_SUITE_COLLECT_COMPILE_TIME
        "Measure compile time by wrapping compiler invocations in timeit" ON)

Modified: test-suite/trunk/cmake/modules/TestSuite.cmake
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/cmake/modules/TestSuite.cmake?rev=365783&r1=365782&r2=365783&view=diff
==============================================================================
--- test-suite/trunk/cmake/modules/TestSuite.cmake (original)
+++ test-suite/trunk/cmake/modules/TestSuite.cmake Thu Jul 11 07:29:58 2019
@@ -99,7 +99,8 @@ function(test_suite_add_build_dependenci
     build-HashProgramOutput.sh
     build-timeit
     build-timeit-target
-    fpcmp
+    build-fpcmp
+    build-fpcmp-target
   )
 endfunction()
 

Modified: test-suite/trunk/lit.site.cfg.in
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/lit.site.cfg.in?rev=365783&r1=365782&r2=365783&view=diff
==============================================================================
--- test-suite/trunk/lit.site.cfg.in (original)
+++ test-suite/trunk/lit.site.cfg.in Thu Jul 11 07:29:58 2019
@@ -5,6 +5,7 @@ config.test_exec_root = "@CMAKE_BINARY_D
 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@"

Modified: test-suite/trunk/litsupport/modules/timeit.py
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/litsupport/modules/timeit.py?rev=365783&r1=365782&r2=365783&view=diff
==============================================================================
--- test-suite/trunk/litsupport/modules/timeit.py (original)
+++ test-suite/trunk/litsupport/modules/timeit.py Thu Jul 11 07:29:58 2019
@@ -9,7 +9,14 @@ def _mutateCommandLine(context, commandl
     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"]

Modified: test-suite/trunk/tools/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/tools/CMakeLists.txt?rev=365783&r1=365782&r2=365783&view=diff
==============================================================================
--- test-suite/trunk/tools/CMakeLists.txt (original)
+++ test-suite/trunk/tools/CMakeLists.txt Thu Jul 11 07:29:58 2019
@@ -7,7 +7,9 @@
 
 include(Host)
 
-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)
 
 add_custom_command(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/HashProgramOutput.sh




More information about the llvm-commits mailing list