Как сделать правильный cc_toolchain () из архива в Базеле? - PullRequest
0 голосов
/ 18 июня 2020

Я хочу определить свою собственную цепочку инструментов C ++ на основе двоичных файлов LLVM для Linux.

Такая цепочка инструментов имеет некоторые обязательные части:

  • http_archive() с моим файлом BUILD ( только один файл).
  • какое-то настраиваемое правило конфигурации в качестве CcToolchainConfigInfo провайдера.

И я уже не знаю, как их объединить.

Пользовательское правило требует определенной функции в качестве реализации, но функции не могут быть определены в файлах BUILD - только в файлах .bzl. Поскольку репозиторий http_archive() позволяет добавлять только один файл BUILD (не так ли?), Функция .bzl with переходит в основной репозиторий.

И это порождает еще одну проблему с tool_path(), которая не ' t принимать метки как пути. Возможно, есть способ перевести пути из http_archive() меток репозитория, например filegroup(), в строковые пути относительно основного репозитория.

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

  1. https://github.com/grailbio/bazel-toolchain - используются шаблоны с заменами траекторий инструмента.
  2. https://github.com/vsco/bazel-toolchains - использует обертки для всех инструментов.
...