Есть ли способ создать список deps для определенных правил?
У меня есть программа, которая может посмотреть исходный файл моего языка и получить правильное значение для deps=[]
значение его правила сборки.
Я ищу способ заменить все мои существующие правила (которые выглядят так):
build_lib(name = "foo", deps = [...])
build_lib(name = "bar", deps = [...])
build_lib(name = "baz", deps = [...])
Вместо этого:
build_lib_new(name = "foo")
build_lib_new(name = "bar")
build_lib_new(name = "baz")
с тем же указанным deps, разрешенным внутренне в правиле путем вызова моей программы.
В идеале, build_lib_new
будет просто правилом обертки вокруг build_lib
:
def derive_deps(name):
deps = []
# call my tool somehow?
return deps
def build_lib_new(name):
deps = derive_deps(name)
build_lib(name,deps)
Теперь я застрял. К сожалению, я думаю, что Базель хочет знать все зависимости заранее как часть фазы анализа. Я вижу, что это действия для запуска команд оболочки, но я полагаю, что это происходит после создания графика зависимости.
Нужно ли запускать внешний инструмент за пределами Bazel, чтобы переписать BUILD
файлы?
1 ответ
Нужно ли запускать внешний инструмент за пределами Bazel, чтобы переписать файлы BUILD?
Короче да. Вот почему существуют такие инструменты, как Газель и Джадеп.
Если ваш инструмент работает как действия во время фазы выполнения, то deps не будет существовать во время фазы загрузки и анализа. Вам нужно будет запустить инструмент перед загрузкой / анализом, может быть, как правило хранилища?
Я вижу, что это действия для запуска команд оболочки, но я полагаю, что это происходит после создания графика зависимости.
Правильный. На этапе анализа создается настроенный целевой граф и преобразуется в граф действий (команды оболочки, артефакты и т. Д.) Для фазы выполнения.