Есть ли способ создать список 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 не будет существовать во время фазы загрузки и анализа. Вам нужно будет запустить инструмент перед загрузкой / анализом, может быть, как правило хранилища?

Я вижу, что это действия для запуска команд оболочки, но я полагаю, что это происходит после создания графика зависимости.

Правильный. На этапе анализа создается настроенный целевой граф и преобразуется в граф действий (команды оболочки, артефакты и т. Д.) Для фазы выполнения.

Другие вопросы по тегам