Исходя из последовавшего обсуждения, я вижу, что немного неправильно понял формулировку проблемы. Вы, вероятно, все еще хотите рассмотреть обработку этого тарбола (и всей его обработки) как внешнюю зависимость и repository_rule
, но для вашей непосредственной проблемы необходимости промежуточного filegroup
.
Если вы заметили, вы Вы определили как srcs
, так и data
, чтобы они указывали на вашу метку media
, и это именно тот недостающий бит, который должен иметь данные, доступные для выполнения вашего правила *_binary
. Потому что правило untar
вернуло depset
из files
, но те, которые при использовании data
напрямую, разрешат быть пустыми.
Если вы замените эту строку в своем определении правила:
return [DefaultInfo(files = depset([tree]))]
с:
return [DefaultInfo(runfiles = ctx.runfiles([tree]))]
Затем вы можете в своем файле BUILD
сказать:
cc_binary(
name = "main",
srcs = ["main.cpp"],
data = [":media"],
)
Поскольку правило untar
теперь обеспечивает runfiles
из DefaultInfo
. Это filegroup
обертывание и добавление media
через его свойство data
сделали это.