Есть ли способ создать список deps для определенных правил? - PullRequest
0 голосов
/ 04 июля 2018

У меня есть программа, которая может посмотреть исходный файл моего языка и получить правильное значение для значения 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 Ответ

0 голосов
/ 04 июля 2018

Нужно ли запускать внешний инструмент за пределами bazel для перезаписи файлов BUILD?

Короче да. Вот почему существуют такие инструменты, как Gazelle и Jadep.

Если ваш инструмент работает как действия на этапе выполнения , то задержки будут отсутствовать на этапе загрузки и анализа. Вам нужно будет запустить инструмент до загрузки / анализа, возможно, как правило хранилища ?

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

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

...