Как объединить аспекты базеля и cc_library

Я хочу создать правило, очень похожее на cc_proto_library. Ключевые особенности заключаются в том, что он применяет аспект ко всем транзитивным proto_library зависимостям и генерирует файлы .cc и .h для всех зависимостей. Вдобавок он генерирует действия, которые компилируют их в объектные файлы.

Хотя я понимаю, как я могу создать файл, я не понимаю, как легко создать объект. Модуль native недоступен для правила (или аспекта), и я не могу использовать макрос поверх аспекта, поскольку мне нужно, чтобы объектные файлы создавались в том же пакете, что и proto_library, чтобы он создавался только один раз.

cc_proto_library, я считаю, может это сделать, потому что он написан не на Skylark и, следовательно, имеет доступ к большему количеству примитивов. Есть ли способ сделать это только с Скайларком?


person Eric Dobson    schedule 09.09.2017    source источник
comment
Я попросил нашего специалиста по Skylark + C ++ прокомментировать создание действий компиляции C ++ из Skylark, но просто быстрый ответ - если вы когда-нибудь будете использовать native.cc_proto_library в одном проекте, позаботьтесь о том, чтобы ваше правило генерировало разные имена файлов и разные символы. В противном случае вы столкнетесь с конфликтами выходных файлов и ошибками компоновщика.   -  person user1071136    schedule 25.09.2017


Ответы (1)


К сожалению, в настоящее время это невозможно. Для правил / действий C ++ нет API Skylark (то, что мы называем бутерброд C ++). У нас есть планы реализовать это в первом квартале 2018 года. Есть много проблем с отслеживанием, наиболее актуальной выглядит эта: https://github.com/bazelbuild/bazel/issues/2163.

person hlopko    schedule 25.09.2017