summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMasaki Muranaka <[email protected]>2013-04-07 01:06:50 +0900
committerMasaki Muranaka <[email protected]>2013-04-07 01:06:50 +0900
commit6e28c0eb28811a06ca90b38d6b448d785f52b50a (patch)
treeb94c6af9efa5334ee72578579a88ab16da7f36bd
parente885e59d4537f164b600d2fc579cc195cc8df76f (diff)
downloadmruby-6e28c0eb28811a06ca90b38d6b448d785f52b50a.tar.gz
mruby-6e28c0eb28811a06ca90b38d6b448d785f52b50a.zip
Add "test runner" support for cross builds.
"test runner" means target simulator like QEmu, GDB sim, and so on. Also "test runner" might be debug agents for real targets. If you do not setup test_runner, Rake will work same as before.
-rw-r--r--build_config.rb3
-rw-r--r--tasks/mruby_build.rake15
-rw-r--r--tasks/mruby_build_commands.rake20
3 files changed, 36 insertions, 2 deletions
diff --git a/build_config.rb b/build_config.rb
index 5ea4aad4f..670721ee3 100644
--- a/build_config.rb
+++ b/build_config.rb
@@ -114,4 +114,7 @@ end
# conf.build_mrbtest_lib_only
#
# conf.gem 'examples/mrbgems/c_and_ruby_extension_example'
+#
+# conf.test_runner.command = 'env'
+#
# end
diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake
index e24a8ac61..dcb557bfd 100644
--- a/tasks/mruby_build.rake
+++ b/tasks/mruby_build.rake
@@ -194,10 +194,21 @@ module MRuby
end # Build
class CrossBuild < Build
+ attr_block %w(test_runner)
+
+ def initialize(name, &block)
+ @test_runner = Command::CrossTestRunner.new(self)
+ super
+ end
+
def run_test
mrbtest = exefile("#{build_dir}/test/mrbtest")
- puts "You should run #{mrbtest} on target device."
- puts
+ if (@test_runner.command == nil)
+ puts "You should run #{mrbtest} on target device."
+ puts
+ else
+ @test_runner.run(mrbtest)
+ end
end
end # CrossBuild
end # MRuby
diff --git a/tasks/mruby_build_commands.rake b/tasks/mruby_build_commands.rake
index b647ccf98..b968d07be 100644
--- a/tasks/mruby_build_commands.rake
+++ b/tasks/mruby_build_commands.rake
@@ -259,4 +259,24 @@ module MRuby
end
end
end
+
+ class Command::CrossTestRunner < Command
+ attr_accessor :runner_options
+ attr_accessor :verbose_flag
+ attr_accessor :flags
+
+ def initialize(build)
+ super
+ @command = nil
+ @runner_options = '%{flags} %{infile}'
+ @verbose_flag = ''
+ @flags = []
+ end
+
+ def run(testbinfile)
+ puts "TEST for " + @build.name
+ _run runner_options, { :flags => [flags, verbose_flag].flatten.join(' '), :infile => testbinfile }
+ end
+ end
+
end