LINUX.ORG.RU

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

 , , ,


4

4

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

  • Поддержка разных языков программирования: Bazel поддерживает Java, Objective-C и C++, а также может быть расширен для поддержки других языков.
  • Высокоуровневый язык конфигурирования сборки: проекты конфигурируются с помощью языка BUILD-файлов, в компактном текстовом формате, который описывает проекты как наборы небольших, взаимосвязанных библиотек, исполняемых файлов и тестов. В отличии от Bazel, Makefile, например, содержат описания конкретных файлов и параметров запуска компилятора.
  • Поддержка множества платформ: один и тот же инструмент используется для сборки ПО для различных архитектур и даже разных платформ. Google использует Bazel для сборки как серверного ПО, так и клиентских приложений на мобильных телефонах.
  • Воспроизводимость результатов: в BUILD файлах каждая библиотека, тест или исполняемый файл прямо указывают свои непосредственные зависимости. Bazel использует эту информацию, чтобы определять, как пересобирать двоичные файлы и параллельно выполнять тесты. Это означает, что все сборки инкрементальны и приводят к одинаковым результатам.
  • Масштабируемость: Bazel легко справляется с большими сборками. В Google достаточно часто серверные приложения занимают 100k строк кода и сборки ветки без отличий от кода основного репозитория могут занимать около 200 мс.
  • Make, Ninja? Эти приложения дают доступ к очень низкоуровневому контролю над выполнением сборки, но пользователь обязан следить за малейшими нюансами и их обеспечивать их правильность. Пользователи взаимодействуют с Bazel на высоком уровне. Примерами правил являются «Javа-тест», «исполняемый файл C++», также существует понятие «целевая платформа». Эти правила показали себя очень удобными на практике и легкими в использовании.
  • Ant и Maven? Ant и Maven в основном используются для Java, в то время как Bazel поддерживает множество языков. Bazel поощряет разделение кодовой базы на мелкие и легко используемые модули и может пересобирать только те модули, которые нуждаются в сборке. Это значительно увеличивает скорость разработки.
  • Gradle? Конфигурационные файлы Bazel значительно более структурированы, позволяя Bazel делать исключительно то, что описывается в тех правилах, которые он поддерживает. Это улучшает параллелизм и повторяемость результатов сборки.
  • Buck, Pants? Обе эти системы сборки были созданы бывшими сотрудниками Google, работающими в Twitter и Facebook. Они были основаны на 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",
    ],
)

>>> Подробности

★★★★☆

Проверено: leave ()

Ответ на: комментарий от waker

Я и не спорил :) Просто в описании сравнения с другими системами сборки выглядят как: «а вот гугл отлил серебряную пулю».

Shadow1251 ()
Последнее исправление: Shadow1251 (всего исправлений: 1)
Ответ на: комментарий от Shadow1251

bazel больше ынтырпрайзная система сборки и как замена более компактным cmake

А чем cmake то так плох, что Google создал Bazel? Или тут та же история что и с Wayland/Mir, Upstart/Systemd - просто борьба за контроль над нишей, т.е. создали Bazel не потому что cmake плох или хоть в чём то уступает, а только потому что cmake не контролируется Google. Та же песня и с системой сборки от MSBuild от Microsoft, её как и Bazel ждёт судьба Mir.

anonymous ()

который на самом деле является скриптом на Python.

И результат будет как у scons'а - т.е. сугубо нишевой, для любителей тонких извращений.

Хотя думаю всё-равно побольше чем у недавно открытого изделия мелкомягких.
PS. Кто следующий откроет свою посконную, с игрищами и блудницами, систему сборки.

WatchCat ★★★★★ ()
Последнее исправление: WatchCat (всего исправлений: 1)
Ответ на: комментарий от anonymous

Это нормально, когда крупные компании пилят свои внутренние тулзы под свои нужды и специфику. Меня и cmake во всем устраивает, но я и билдфермы не использую пока что.

Shadow1251 ()

Таакк... Ну здравствуй, новая мода! После систем контроля версий начали плодить системы сборки. Растет народ над собой!

Ждем автоматизированных систем тестирования и Continuous Integration...

gns ★★★★ ()
Ответ на: комментарий от halyavin

Хорошее объяснение, спасибо. Когда я последний раз смотрел на gn оффтопик он еще не научился. Сейчас со скрипом пытаемся перевести сборку с gyp на gn...

alex_ac ()

И чем оно лучше того же CMake, если рассматривать сборку С/С++?

kkk ★★ ()
Ответ на: комментарий от hc

Прямо отдышка так стараюсь, написал статью пока сидел в скучной очереди и оставил пару комментов

vertexua ★★★★☆ ()
Ответ на: комментарий от no-dashi

Больше тебе работы по закапыванию незнакомого?

vertexua ★★★★☆ ()
Ответ на: комментарий от chkalov

Я не об этом, а о семантике конфига, очень низкоуровневые команды

vertexua ★★★★☆ ()
Ответ на: комментарий от gns

После систем контроля версий

Точно! А я-то думаю, что это всё мне напоминает.

WatchCat ★★★★★ ()

Я так понимаю с:

cc_library(
...
    deps = ["//external:openssl"],
)
Начинаются танцы с бубном вокруг подключения новых библиотек и их компонентов.

AlexVR ★★★★★ ()
Ответ на: комментарий от WatchCat

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

Профессиональная деформация — Для человека, делающего лопаты, весть мир состоит из земли, которую надо копать. :)

gns ★★★★ ()
Ответ на: комментарий от Displacer

открыли только из-за микрософта, который еще одну свою NIH систему сборки только что опубликовал под свободной лицензией.

открыли, чтобы можно было не изобретать велосипед а использовать его для сборки других опенсорсных проектов гугла — хрома и андроида например. ведь сейчас их приходится собирать нестандартным для гугла способом. а в более мелких опенсорсных проетках приходится поддерживать две системы сборки: внутреннюю на blaze и что- то еще для внешнего мира.

val-amart ★★★★★ ()
Ответ на: комментарий от aidan

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

а ты поверь =)

все общеупотребительное — не модуль и уже там есть.

val-amart ★★★★★ ()
Ответ на: комментарий от val-amart

открыли, чтобы можно было не изобретать велосипед а использовать его для сборки других опенсорсных проектов гугла — хрома и андроида например. ведь сейчас их приходится собирать нестандартным для гугла способом. а в более мелких опенсорсных проетках приходится поддерживать две системы сборки: внутреннюю на blaze и что- то еще для внешнего мира.

То есть для сборки хрома нужна будет жава? :) Замечательное решение.

Displacer ★★ ()
Ответ на: комментарий от Displacer

Вроде для сборки частей ядра был нужен хаскелль когда-то

vertexua ★★★★☆ ()
Ответ на: комментарий от vertexua

Вроде для сборки частей ядра был нужен хаскелль когда-то

пруф?

Displacer ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.