Я хочу определить свою собственную цепочку инструментов C ++ на основе двоичных файлов LLVM для Linux.
Такая цепочка инструментов имеет некоторые обязательные части:
http_archive()
с моим файлом BUILD ( только один файл). - какое-то настраиваемое правило конфигурации в качестве
CcToolchainConfigInfo
провайдера.
И я уже не знаю, как их объединить.
Пользовательское правило требует определенной функции в качестве реализации, но функции не могут быть определены в файлах BUILD - только в файлах .bzl
. Поскольку репозиторий http_archive()
позволяет добавлять только один файл BUILD (не так ли?), Функция .bzl
with переходит в основной репозиторий.
И это порождает еще одну проблему с tool_path()
, которая не ' t принимать метки как пути. Возможно, есть способ перевести пути из http_archive()
меток репозитория, например filegroup()
, в строковые пути относительно основного репозитория.
Также я нашел два примера с разными подходами к проблеме, но оба выглядят больше похоже на обходные пути, чем на правильные решения.
- https://github.com/grailbio/bazel-toolchain - используются шаблоны с заменами траекторий инструмента.
- https://github.com/vsco/bazel-toolchains - использует обертки для всех инструментов.