Как создать структуру каталогов в Базеле - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу создать следующую структуру в bazel.

dir1
   |_ file1
   |_ file2
   |_ dir2
         |_file3

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

makedir(
  name = "dir1",
  path = "dir1",
)

makedir(
  name = "dir2",
  path = "dir1/dir2",
  deps = [":dir1"],
)

Что я пробовал:

  • Я мог бы создать макрос с помощью скрипта Python, но хотел бы что-нибудь чище.
  • Я пыталсясоздание genrule с mkdir -p path/to/directoy, который не работал

EDIT :

Вариант использования: я хочу создать squashfs с использованием bazel.

Важно отметить, что Bazel предоставляет некоторые функции упаковки .

Для создания команды squashfs , командатребуется структура каталогов, заполненная артефактами.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы всегда можете создать цель genrule или цель shell_binary , которая будет выполнять команду bash или сценарий оболочки (соответственно), который создает эти каталоги.

сgenrule вы можете использовать bazel $(location), который будет гарантировать, что созданная вами структура dir будет находиться под выходным путем, который находится внутри среды sandbox bazel.Пример genrule показывает, как именно его использовать.

Здесь вы можете найти более подробную информацию о предопределенных путях вывода.

0 голосов
/ 20 февраля 2019

В моем случае я хочу создать структуру каталогов и запустить mksquashfs для создания файла squashfs.

Для этого я в итоге изменил базовый пример из документов Базеля на упаковке .

load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")

genrule(
    name = "file1",
    outs = ["file1.txt"],
    cmd = "echo exampleText > $@",
)

pkg_tar(
    name = "dir1",
    strip_prefix = ".",
    package_dir = "/usr/bin",
    srcs = [":file1"],
    mode = "0755",
)

pkg_tar(
    name = "dir2",
    strip_prefix = ".",
    package_dir = "/usr/share",
    srcs = ["//main:file2.txt", "//main:file3.txt"],
    mode = "0644",
)

pkg_tar(
    name = "pkg",
    extension = "tar.gz",
    deps = [
        ":dir1",
        ":dir2",
    ],
)

Если есть более простой способ создания tar или структуры каталогов без необходимости использования промежуточных tars, я сделаю этот главный ответ.

...