Создать и прочитать временный файл с помощью Bazel

Я пытаюсь настроить свою собственную систему сборки для TensorFlow с помощью Bazel. Мне нужно создать временный файл на этапе настройки, который я буду использовать в качестве кеша на этапе сборки. Мне удалось создать его в моем файле .bzl с помощью:

repository_ctx.file(filename)

И после настройки я вижу, что это внутри папки:

$HOME/.cache/bazel/_bazel_$USERNAME/%MD5%/external/%repository_name%

где имя_позитория на самом деле repository_ctx.name

Но я не могу получить доступ к этому пути из моего сценария .tpl во время сборки. Я хотел отправить его из сценария .bzl с заменой repository_ctx.template, но даже здесь я не нашел, как найти этот путь!

Не похоже, что я могу получить доступ к этой папке, используя символические ссылки, такие как bazel-out или bazel-genfiles (что звучит очень многообещающе, но не ...). Мне также не удалось создать файл вне этой папки.

Это очень простая проблема, и я просто не могу поверить, что нет другого способа, кроме как жестко закодировать путь или find его ...


person Zakor    schedule 17.04.2017    source источник


Ответы (1)


Я предполагаю, что проблема в том, что вы не открываете файл в файле BUILD репозитория, чтобы ваша сборка могла его использовать. Вам нужно сделать что-то вроде:

repository_ctx.file('whatever')
repository_ctx.file('BUILD', 'exports_files(["whatever"])')

Затем вы можете использовать @repository_name//:whatever в любом другом файле BUILD.

exports_files позволяет пакетам зависеть от исходных файлов из других пакеты.

Затем в файл .bzl, который вы загружаете во время сборки, добавьте файл в качестве атрибута, например,

attrs = {
    '_my_external_src' : attr.label(
        default = Label('@my_repository//:whatever'),
        allow_single_file = True,
    ),
},

Затем в реализации правила вы можете получить к нему доступ через контекст:

def _impl(ctx):
    print(ctx.file._my_external_src.path)

.path получает путь к файлу.

person kristina    schedule 17.04.2017
comment
Хм, я понимаю. Итак, мне нужно найти способ отправить этот @repository_name//:whatever из файла BUILD в файл tpl. Думаю, я принимаю ваш ответ, спасибо! - person Zakor; 18.04.2017
comment
Без проблем! Добавил, как получить к нему доступ из вашего .bzl файла. - person kristina; 18.04.2017