From 62291efcfdfbef76be063f1fc1ff65bf13a7f86c Mon Sep 17 00:00:00 2001 From: Daco Harkes Date: Tue, 28 Jan 2020 08:44:07 +0000 Subject: [PATCH] [test_runner] Support for arm32 VM in JIT mode on x64 via QEMU Using QEMU in AOT mode is still pending. Issue: https://github.com/dart-lang/sdk/issues/40337 Change-Id: Idf68f5420eee91048eeca01534954f26ddba11ac Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133231 Reviewed-by: Alexander Thomas Commit-Queue: Daco Harkes --- pkg/test_runner/lib/src/configuration.dart | 4 +++- pkg/test_runner/lib/src/options.dart | 5 ++++- pkg/test_runner/lib/src/runtime_configuration.dart | 4 ++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/pkg/test_runner/lib/src/configuration.dart b/pkg/test_runner/lib/src/configuration.dart index 6c413d7981d..ba2f2da7ec1 100644 --- a/pkg/test_runner/lib/src/configuration.dart +++ b/pkg/test_runner/lib/src/configuration.dart @@ -68,7 +68,8 @@ class TestConfiguration { this.outputDirectory, this.reproducingArguments, this.fastTestsOnly, - this.printPassingStdout}) + this.printPassingStdout, + this.useQemu}) : _packages = packages; final Map selectors; @@ -97,6 +98,7 @@ class TestConfiguration { final bool writeResults; final bool writeLogs; final bool printPassingStdout; + final bool useQemu; Architecture get architecture => configuration.architecture; Compiler get compiler => configuration.compiler; diff --git a/pkg/test_runner/lib/src/options.dart b/pkg/test_runner/lib/src/options.dart index a9707d5d030..cedfc85ac9d 100644 --- a/pkg/test_runner/lib/src/options.dart +++ b/pkg/test_runner/lib/src/options.dart @@ -188,6 +188,8 @@ test options, specifying how tests should be run.''', _Option.bool('use_elf', 'Directly generate an ELF shared libraries for precompilation.', hide: true), + _Option.bool('use_qemu', 'Use qemu to test arm32 on x64 host machines.', + hide: true), _Option.bool('keep_generated_files', 'Keep any generated files.', abbr: 'k'), _Option.int('timeout', 'Timeout in seconds.', abbr: 't'), @@ -749,7 +751,8 @@ compiler.''', reproducingArguments: _reproducingCommand(data, namedConfiguration != null), fastTestsOnly: data["fast_tests"] as bool, - printPassingStdout: data["print_passing_stdout"] as bool); + printPassingStdout: data["print_passing_stdout"] as bool, + useQemu: data["use_qemu"] as bool); if (configuration.validate()) { result.add(configuration); diff --git a/pkg/test_runner/lib/src/runtime_configuration.dart b/pkg/test_runner/lib/src/runtime_configuration.dart index 78bfe6b08a3..b377f637bb6 100644 --- a/pkg/test_runner/lib/src/runtime_configuration.dart +++ b/pkg/test_runner/lib/src/runtime_configuration.dart @@ -273,6 +273,10 @@ class StandaloneDartRuntimeConfiguration extends DartVmRuntimeConfiguration { if (type == 'application/kernel-ir-fully-linked') { executable = dartVmExecutableFileName; } + if (_configuration.useQemu) { + arguments.insertAll(0, ['-L', '/usr/arm-linux-gnueabihf/', executable]); + executable = 'qemu-arm'; + } return [VMCommand(executable, arguments, environmentOverrides)]; } }