Google открыла внутренную систему сборки -- Bazel

Основные возможности

Поддержка разных языков программирования: Bazel поддерживает Java, Objective-C и C++, а также может быть расширен для поддержки других языков.Высокоуровневый язык конфигурирования сборки: проекты конфигурируются с помощью языка BUILD-файлов, компактном текстовом формате, который описывает проекты как наборы небольших, взаимосвязаных библиотек, исполняемых файлов и тестов. В отличии от Bazel, например Makefile содержат описания конкретных файлов и параметров запуска компилятораПоддержка множества платформ: один и тот же инструмент используется чтобы собирать программное обеспечение для различных архитектур и даже разных платформ. Google использует Bazel для сборки как серверных, так и клиентских приложений на мобильных телефонах.Воспроизводимость результатов: в BUILD файлах каждая библиотека, тест или исполняемій файл прямо указывают свои прямые зависимости. Bazel использует эту информацию чтобы определять как пересобирать двоичные файлы и паралельно выполнять тесты. Это означает что все сборки инкрементальны и приводят к одинаковым результатам.Масштабируемость: Bazel легко справляется с большими сборками. В Google достаточно часто сервеные приложения занимают 100k строк кода и сборки ветки без отличий от кода основного репозитория могут занимать около 200 мс. Почему Google не использует…

Make, Ninja эти приложения дают доступ к очень низкоуровнему контролю над выполнением сборки, но пользователь обязан следить за малейшими нюансами и их обеспечивать их правильность. Пользователи взаимодействуют с Bazel на высоком уровне. Примерами правил являются например «Javа-тест», «исполняемый файл C++», также сущетсвуют понятие «целевая платформа». Эти правила показали себя очень удобными на практике и легкими в использовании.Ant и Maven Ant и Maven в основно используются для Java, в то время как Bazel поддерживает множество языков. Bazel поощряет разделение кодовой базы на мелкие и легко используемые модули и может пересобирать только те модули, которые нуждаются в сборке. Это значительно увеличивает скорость разработки.Gradle конфигурационные файлы Bazel значительно более структурированые, позволяя Bazel делать исключительно то, что описывается в тех правилах, которые он поддерживает. Это улучшает параллелизм и повторяемость результатов сборки.Buck, Pants обе системы сборки были созданы гуглерами, работающими в Twitter и Facebook. Они были основаны на Bazel, но их функциональность так и не смогла сравниться с Bazel, потому они никогда не стали возможными альтернативами для Google.Внутри Google используются большие кластеры сборки, они не входят в открытую версию Bazel, которая работает на локальной машине пользователя. В то же время существует поддержка добавления пользовательских удаленных кластеров сборки или кешей двоичных файлов. Такие системы значительно ускоряют сборку двоичных файлов из исходных кодов, которые незначительно отличаются от огромной кодовой базы в основной ветке.

Пример BUILD-файла, который по настоящему является Python скриптом.

cc_library ( name = «sign-in», srcs = [«sign_in.cc»], hdrs = [«sign_in.h»], deps = [»//external: openssl»], )

java_binary ( name = «java-tool», srcs = [ «RunTool.java», ], )

 google, java, разработка, с++

©  Linux.org.ru