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 ()

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

cmake умеет генерацию RPM, DEB, NSIS, кажется, DMG,

вот прям сам умеет автоматически искаропки? Или таки руками надо это всё описывать?

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

В сабже всё это есть?..

Нет.

Одна из причин - поддержка Java и C++ в одном проекте. IDE такого не умеют. Если научатся, можно попробовать.

Генерацию всяких разных файлов можно сделать расширениями, которых пока нет (поскольку гуглу не было нужно). Если система пойдет в народ, они появятся.

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

Да ну, бред, эта штука вчера релизнулась

Так вчера релизнулась или вчера открыли?

Или как релизнулась, так сразу и открыли?..

на нее через пару месяцев тебе еще не таких правил напишут

Ну вот как напишут, так и посмотрим. Пока меня существующие системы вполне радуют.

Важна только архитектура

Ах, если бы это было так, вендекапец бы давно наступил...

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

никто не заставляет её использовать.

google просто открыл инструмент который делал для себя и затачивал для себя годами. Не хотите - можете зажмуриться и отвернуться

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

например, как паровые автомобили, использовавшиеся на лесозаготовках, всё имеет свою область применения

anonymous ()
Ответ на: комментарий от hobbit

cmake умеет генерацию RPM, DEB

Генерация уровня checkinstall, где нет ни нормальных зависимостей, ни {pre,post}{un,}install скриптов?

файлов проектов для разных ненужно, сейчас можно работать с ненужно

поправил тебя

есть модули для подключения дохрена библиотек

В общем и целом, с какого-то момента «дохрена библиотек» открыли для себя pkg-config, после чего отлично подключаются даже голым make через CFLAGS += $(shell pkg-config --cflags libname)

Лично я не люблю cmake за то, что временами, когда нужно сделать что-то нестандартное, в make это в разы проще. А еще за необходимость запускать cmake заново при переключении бранчей.

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

для небольших проектов с зависимостями из мавена тоже?

уж для него то зачем это?

Deleted ()
Ответ на: комментарий от kawaii_neko

необходимость запускать cmake заново при переключении бранчей

Он сам перезапускается по make.

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

Угу, и потом выяснится что на других проектах с чуть чуть иной архитектурой сливает скрипту в три строчки на баше (утрирую). Если честно, после нескольких заныров в недры дроеда и в то, как он устроен я как-то разочаровался в том, что гугл может что-то сделать архитектурно-красиво... Хотя если это для внутренних нужд, шанс есть.

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

qbs в версии 1.4 уже такое тоже умеет и ещё кучу всего. Скорее всего, к 1.5 он уже точно будет тортом.

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

А еще за необходимость запускать cmake заново при переключении бранчей.

Никогда не нужно было на проектах любой сложности. При обновлении скриптов сборки этап генерации запускается автоматически. Если у вас проблемы при переключении веток, то такие же проблемы будут при обычной локальной правке исходников, а значит где-то в скрипты сборки закрались ошибки.

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

Написано же, то что опенсорснули идет без 100500 модулей, которые написаны внутри компании (и нужны только внутри компании). Сообществу нужно дописать нужные модули

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

В общем и целом, с какого-то момента «дохрена библиотек» открыли для себя pkg-config, после чего отлично подключаются даже голым make через CFLAGS += $(shell pkg-config --cflags libname)

pkg-config это хорошо, но не везде он есть.

dhampire ★★★ ()

У него есть свой репозиторий для зависимостей, как у Maven?

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

Представь дерево с тысячами библиотек, а ты поменял полтора файла в проекте вроде Chromium. Собираешь и у тебя бинарь собирается пару секунд потому что остальные двоичные файлы качнулись с кеша.

При смене полутора файлов cmake ведёт себя также. Правда интересно послушать, как за пару секунд срабатывает линкер в сабже, который по факту не умеет так быстро работать при большой сборке.

Displacer ★★ ()

Норм выглядит. Гораздо лучше gradle. Глядишь следущее поколение сборщика от гугла дорастет до make

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

Я догадываюсь о причинах, по которым ты так фанатично защищаешь эту систему сборки, но не стоит переусердствовать - чем сильнее кричишь, тем больше кажется, что она НУЖДАЕТСЯ в защите. Кому интересно - тот сам оценит. Тем более очень сомнительное преимущество - предлагать сообществу дописать «100500 модулей», чтобы оно стало пригодным

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

Лучше чем кложурий Leiningen сборщика ещё не придумали.

Чо, леин научился сишные сорцы собирать? :)

А так да, для своих задач прекрасен.

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

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

aidan ★★★★ ()

System Requirements
Java JDK 8 or later

По моему дальше можно было не продолжать. Жабистам оно не нужно, остальным тем более. Оно еще и венду не поддерживает.

Deleted ()

Правильно, чтобы было что закопать, надо сначала что-то написать.

расширен для поддержки других языков

Эталонное не нужно

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

У Лейна ж своя ниша. Народ вон в каментах возмущается, что надо jvm раскочегаривать, чтобы собрать проект на крестах. Поэтому ну его нафиг. Хотя похожая система для сишечки на ней же и написанная была бы за здравь.

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

Оно еще и венду не поддерживает.

И правильно делает.

Hertz ★★★★★ ()

Больше DE, больше, пусть каждый напишет свою DE!!!

Больше плееров, больше - каждый должен написать свой плеер!!!

Больше систем сборки, больше - каждый должен написать свою систему сборки!!!

Бл....ь

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

поддержка Java и C++ в одном проекте. IDE такого не умеют.

В эклипсе уже сейчас можно. Прямо в рамках «почти одного проекта» Другое дело, что в эклипсе поддержка CMake довольно ущербная.

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

Генерация уровня checkinstall, где нет ни нормальных зависимостей, ни {pre,post}{un,}install скриптов?

И скрипты есть (выше по треду ссылка), и зависимости.

Лично я не люблю cmake за то, что временами, когда нужно сделать что-то нестандартное, в make это в разы проще. А еще за необходимость запускать cmake заново при переключении бранчей.

Я не знаю, что у вас за проект, но при наличии нормально прописанных зависимостей (для «обычных» проектов такие зависимости генерятся автоматом), попытка сборки после переключения бранчей автоматом приводит к повторному запуску cmake и генерации всего требуемого сборочного хозяйства. По крайней мере, для связки CMake + Make, как оно с CMake + Ninja сказать не могу, не использовал.

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

а инфраструктуру кеширование оно притащило, судя ж по докладам там же своя FUSE была, на которой много логики?

qnikst ★★★★★ ()

Но я бы поостерёгся им пользоваться, зная гугл. Сегодня открыли, завтра перестали поддерживать, послезавтра переколбасили всё и выкинули обратную совместимость.

GblGbl ★★★★★ ()

теперь нужно всем собраться и выкорчевать оттуда питон, заменив на XML или что-то JVMное

stevejobs ★★★★☆ ()

Вроде неплохо, можно поковырять для общего развития.

anonymous ()
Ответ на: комментарий от Shadow1251

Т.е. чтобы собрать проект на плюсах надо ставить jdk? Ok, Google...

fixed.

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

а можно более развёрнуто? Я, когда читал новость, этого не заметил.

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

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

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

Внутри Google используются большие кластеры сборки, они не входят в открытую версию Bazel, которая работает на локальной машине пользователя.

Локальная машина пользователя, на которую ориентирована открытая версия Bazel - подразумевает, в том числе, и небольшие проекты.

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

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

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

О том и речь, bazel больше ынтырпрайзная система сборки и как замена более компактным cmake или ninja не всегда может рассматриваться.

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

ты щас почти процитировал то, с чем сам же спорил, только другими словами :)

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