Bazel:运行没有输出的命令

时间:2017-12-03 10:57:51

标签: qemu bazel

我正在使用bazel来建造裸机程序。我想在qemu上运行bazel生成的单元测试。

new RegExp()

我试图通过在'.bzl'文件中创建自己的规则来运行它们,但似乎输出对于所有规则操作都是必需的。注意,我需要根据目标体系结构调用具有不同参数的不同qemu命令。我想通过这些规则。

有没有办法在没有任何输出的情况下调用shell命令?

如果需要,这是我到目前为止(但我不确定哪个部分是正确的,因为bazel在分析阶段停止):

qemu-system-* -some_args -kernel bazel-bin/whatever/generated.elf

我的BUILD-File:

# run_tests.bzl
===============
def _impl(ctx):
  qemu = ctx.attr.qemu
  machine = ctx.attr.machine
  cpu = ctx.attr.cpu
  target = ctx.attr.target
  # The command may only access files declared in inputs.
  ctx.actions.run_shell(
      arguments = [qemu, machine, cpu, target],
      command="$1 -M $2 -cpu $3 -nographic -monitor null -serial null -semihosting -kernel $4")

run_tests = rule(
    implementation=_impl,
    attrs = {"qemu" : attr.string(),
             "machine" : attr.string(),
             "cpu" : attr.string(),
             "target" : attr.string(),},
    executable = True
)

2 个答案:

答案 0 :(得分:4)

你几乎就在那里:是的,你需要输出,否则bazel无所事事。对于规则输出,您可能需要测试日志或测试结果。

答案 1 :(得分:1)

Skylark支持编写测试规则。基本上不是设置executable = True,而是设置test = True,然后您的规则会创建一个可执行的测试,然后将ctx.outputs.executable设置为该可执行文件。然后,您可以在您的规则中使用bazel test命令。

请参阅:

docs:https://docs.bazel.build/versions/master/skylark/rules.html#test-rules

示例:https://github.com/bazelbuild/examples/tree/master/rules/test_rule

rule.test:https://docs.bazel.build/versions/master/skylark/lib/globals.html#rule.test