Базель: запустить команду без вывода
Я использую Базель для создания голых программ. Я хотел бы запустить модульные тесты, сгенерированные bazel на qemu.
qemu-system-* -some_args -kernel bazel-bin/whatever/generated.elf
Я попытался запустить их, создав собственное правило в файле.bzl, но кажется, что выходные данные являются обязательными для всех действий правила. Обратите внимание, что мне нужно вызывать разные команды qemu с разными аргументами в зависимости от целевой архитектуры. Я хотел бы передать эти правила.
Есть ли способ вызвать команду оболочки без каких-либо выходов?
Заранее спасибо!
При необходимости, это то, что у меня есть (но я не уверен, какие части верны, когда Bazel останавливается на этапе анализа):
# 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
)
И мой BUILD-файл:
# BUILD
=======
load("//make:run_tests.bzl", "run_tests")
run_tests(
name = "portos",
qemu = "qemu-system-arm",
machine = "realview-pbx-a9",
cpu = "cortex-a9",
target = ":test_portos.elf"
)
cc_binary(
name = "test_portos.elf",
srcs = glob(["*.cc"]),
deps = ["//src:portos",
"@unity//:unity"],
copts = ["-Isrc",
"-Iexternal/unity/src",
"-Iexternal/unity/extras/fixture/src"]
)
2 ответа
Skylark поддерживает написание правил тестирования. В основном вместо установки executable = True
, вы бы установили test = True
, а затем ваше правило будет создавать исполняемый файл, который является тестом, а затем установить ctx.outputs.executable
на этот исполняемый файл. Тогда вы можете использовать bazel test
Команда с вашим правилом.
Увидеть:
документы: https://docs.bazel.build/versions/master/skylark/rules.html
пример: https://github.com/bazelbuild/examples/tree/master/rules/test_rule
rule.test: https://docs.bazel.build/versions/master/skylark/lib/globals.html
Вы почти на месте: да, вам нужны выходы, иначе Базель не имеет ничего общего. Для вывода правила вам, вероятно, нужны журналы тестов или результаты тестов.