Как вы объединяете вместе артефакты сборки Bazel, созданные с разными конфигурациями? - PullRequest
1 голос
/ 01 апреля 2020

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

Изначально я попытался написать genrule, чтобы сделать это, добавив каждое двоичное правило в srcs и затем запустите zip для них, сославшись на $(location :binary-target).

. Проблема с этим способом заключается в том, что сам genrule может быть собран только с одной указанной c конфигурацией, что означает, что несколько :some-binary-target srcs используют разные конфиги не могут быть успешно собраны вместе.

Есть ли способ сослаться на сборку артефакт правила в конфигурации, отличной от правила, запрашивающего указанный артефакт?

1 Ответ

3 голосов
/ 02 апреля 2020

Это может быть немного сложным, в зависимости от того, что именно вам нужно сделать.

Здесь вам нужно правило Starlark, которое имеет атрибут с «переходом с разделенной конфигурацией». При таком переходе цели в этом атрибуте могут оцениваться в некоторых других конфигурациях или конфигурациях. Таким образом, вы можете иметь

some_rule(
  name = "foo",
  deps = [":dep1", ":dep2"]
)

, где атрибут deps имеет переход, который идет от конфигурации «a» (конфигурации, в которой оценивается foo) к «b» и «c», и foo получает две версии dep1, одну из конфигурации b и другую из c, а также две версии dep2. Затем foo может делать с ними то, что нужно, например, помещать их в zip-файл.

Здесь многое объясняется:
https://docs.bazel.build/versions/master/skylark/config.html

в частности:
https://docs.bazel.build/versions/master/skylark/config.html#user -defined-transitions

Здесь есть нить, в которой есть пример, как сделать большинство из этого:
https://groups.google.com/d/topic/bazel-discuss/H8lS3JL2jt8/discussion

В этом потоке упоминается недостающий фрагмент "как получить доступ к информации о конфигурации различных версий каждого депо", который может вам понадобиться в зависимости от того, что вам нужно сделать. Над этим активно ведутся работы, и, вероятно, он будет доступен в следующем выпуске Bazel (что бы ни появилось после 3.0.0, особенно, когда это откат )

...