我正在使用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
)
答案 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