The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Компания Google развивает новую открытую систему сборки Bazel

25.03.2015 09:05

Компания Google открыла код сборочного инструментария Bazel, основанного на наработках, используемых для сборки большинства внутренних проектов компании. Bazel обеспечивает сборку проекта, запуская необходимые компиляторы и тесты, выполняя задачи, аналогичные таким системам, как Make, Ant, Gradle, Buck, Pants и Maven. Bazel позволяет собирать проекты на любых языках программирования и отличается сочетанием высокой скорости, надёжности и повторяемости процесса сборки. Код Bazel распространяется под лицензией Apache.

В отличие от Make и Ninja в Bazel применяется более высокоуровневый подход к построению правил сборки, при котором вместо определения привязки команд к собираемым файлам производится применения более абстрактных готовых блоков, таких как "сборка исполняемого файла на языке С++", "сборка библиотеки на C++" или "запуск теста для C++", а также определение целевых и сборочных платформ. Дополнительная функциональность реализуется через механизм подключения расширений.

Для достижения высокой скорости сборки в Bazel активно применяются техники кэширования и распараллеливания процесса сборки. Инструментарий также гарантирует повторяемость сборки, т.е. результат сборки проекта на машине разработчика будет полностью совпадать со сборкой на сторонних системах, таких как серверы непрерывной интеграции. Bazel отлично подходит для сборки очень больших проектов или проектов, содержащих код на нескольких языках программирования, требующих расширенного тестирования или собираемых для нескольких платформ.

Особенности Bazel:

  • Возможность использования для сборки кода, написанного на разных языках программирования. Из коробки поддерживается Java, Objective-C и C++, но через систему расширений возможна поддержка произвольных языков;
  • Высокоуровневый язык задания правил сборки. В текстовом файле BUILD компоненты проекта описываются как связка библиотек, исполняемых файлов и тестов, без детализации на уровне отдельных файлов и команд вызова компилятора;
  • Использование единых инструментов и сборочных файлов для разных платформ и архитектур. Например, один файл сборки без изменений может применяться как для серверной системы, так и для мобильного устройства;
  • Повторяемость сборки. В BUILD-файлах обязательно полностью определены все зависимости, на основе которых принимаются решения по пересборке компонентов после внесения изменений и распараллеливании процесса сборки. Все операции сборки являются инкрементальными и всегда приводят к идентичному результату в любых окружениях;
  • Высокая масштабируемость. В Google Bazel применяется для сборки проектов, которые могут насчитывать сотни тысяч файлов. Сборка проекта, в котором не были изменены файлы, занимает примерно 200мс. Пересборка выполняется только для файлов, которые требуют пересборки. Тесты выполняются только если текущее состояние проекта может привести к изменению результата.

Пример сборочного файла:



   package(default_visibility = ["//visibility:public"])
   cc_library(
      name = "hello-lib",
      srcs = ["hello-lib.cc"],
      hdrs = ["hello-lib.h"],
   )
   cc_binary(
      name = "hello-world",
      srcs = ["hello-world.cc"],
      deps = [":hello-lib"],
   )
   cc_test(
      name = "hello-success_test",
      srcs = ["hello-world.cc"],
      deps = [":hello-lib"],
   )



  1. Главная ссылка к новости (http://www.reddit.com/r/progra...)
  2. OpenNews: Выпуск системы сборки CMake 3.1.0
  3. OpenNews: Выпуск системы сборки GNU Make 4.1
  4. OpenNews: Разработчики из компании Google открыли код системы сборки Ninja
  5. OpenNews: Для GNOME-приложений представлена новая экспериментальная система сборки BuilDj
  6. OpenNews: Выпуск сборочного инструментария qbs 1.3.0, развиваемого проектом Qt
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/41908-build
Ключевые слова: build, bazel
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (60) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, _yurkis_ (ok), 11:05, 25/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Если там Java в жестких зависимостях то ИМХО проекты на плюсах пользовать почти не будут :(
     
     
  • 2.7, Аноним (-), 12:15, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Да нафига им этот баян? У плюсовиков теперь есть qbs.
     
     
  • 3.13, Аноним (-), 12:48, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    В qbs сложно добавить поддержку компилятора, про который он не знает? У меня тут с CMake траблы, ищу куда перекатиться.
     
     
  • 4.14, anonymous (??), 13:01, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • –2 +/
    я на scons перебежал
     
     
  • 5.15, Аноним (-), 13:28, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И как оно? подойдет ли для сложного Qt'го кроссплатформенного проекта, где и Андроид, и Шиндовс, и чего только не надо собирать.
     
  • 5.56, Аноним (-), 16:49, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > я на scons перебежал

    Нашел на что перебежать. Головняк с питоном на половине платформ - гарантирован. Впрочем, питон головняк сам по себе из-за кучи несовместимостей.

     
  • 5.74, Филипп Филиппович (ok), 05:29, 26/03/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Scons радует вменяемым скриптовым языком (то, что сделано в CMake, языком назвать трудно, в 21 веке такого быть не должно). Но он, как показала практика, не очень быстр для очень больших проектов. У нас есть большие проекты и на том, и на том. Увы, о scons сильно жалеем. Удивительно, но в огромных проектах на нём именно внутренняя логика сборки начинает съедать время, почти сопоставимое со сборкой. Постоянное перечитывание всего и вся до добра не доводит.

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

     
     
  • 6.84, Аноним (-), 17:38, 26/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Удивительно, но в огромных проектах на нём именно внутренняя логика сборки
    > начинает съедать время,

    "Питон не тормозит!!!11111"

     
     
  • 7.85, Филипп Филиппович (ok), 19:18, 26/03/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Питон-то причём? Тут проблемы реализации.
     
  • 4.68, ваноним (?), 20:49, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > У меня тут с CMake траблы

    а что за траблы? ман курить не пробовали? :)

     
     
  • 5.71, Аноним (-), 22:09, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > а что за траблы? ман курить не пробовали? :)

    Компилятор, требующий танцев с бубном даже без CMake. А ман... ну все мы знаем, какой у CMake хороший ман.


     
     
  • 6.72, ваноним (?), 23:26, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Компилятор, требующий танцев с бубном даже без CMake

    тогда проблема не в cmake ;)

     
     
  • 7.73, Xasd (ok), 23:41, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > тогда проблема не в cmake ;)

    ды проблема-то может быть хоть где угодно...

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

    (а иначе зачем тогда вообще нужен сборочный инструментарий, если он не решает проблемы?)

     
  • 4.78, Олег (??), 12:14, 26/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    А можно подробнее про проблемы с CMake?
     
     
  • 5.86, vdb (?), 21:17, 26/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Когда я с ним работал (версии 2.x):

    1. Уродский синтаксис языка. Отсутствие функций и выражений.
    2. Отсутствие внятной документации.
    3. Невозможность использовать в одном проекте несколько компиляторов одного и того же языка.

     
  • 3.53, Аноним (-), 16:00, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • –2 +/
    qbs не взлетит из-за завязки на qt. Сейчас есть только cmake.
     
     
  • 4.55, _yurkis_ (ok), 16:47, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну почему же только cmake? Для тонких ценителей и любителей в гамаках полноценно на лыжах трахаться (что не плохо вобщем-то) есть еще scons
     
     
  • 5.69, ваноним (?), 20:51, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Для тонких ценителей и любителей в гамаках  полноценно на лыжах трахаться есть еще scons

    а для любителей потрахаться по-настоящему есть bjam.

     
  • 3.64, D (?), 18:48, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    qbs уже не взлетел. и вряд ли взлетит,к сожалению.
     

  • 1.2, A.Stahl (ok), 11:06, 25/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    >Код Bazel, который написан на языках Java и C++

    Ну и нахрена было городить такую дикую смесь? Ну спасибо что хоть Go не обмазали...

     
     
  • 2.3, Аноним (-), 11:39, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • –7 +/
    а в чем проблема? реально не понимаю. работает - гугл тестил.
    или место надо экономить? вроде нет
     
     
  • 3.8, Аноним (-), 12:19, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    fixed: "а в чем проблема? реально не понимаю. тормозит - гугл тестил.
    или место надо экономить? вроде нет"
    Эклипсерам должно понравиться.
     
  • 2.4, Andrey Mitrofanov (?), 11:45, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +6 +/
    >>Код Bazel, который написан на языках Java и C++
    > Ну и нахрена было городить такую дикую смесь?

    Корпорация добра наносит ответный удар по мс-бильду. Сокрушительный удар.

    > Ну спасибо что хоть Go не обмазали...

    "Мы ж не звери."

     
     
  • 3.52, adolfus (ok), 15:50, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • –5 +/
    > Корпорация добра наносит ответный удар по мс-бильду. Сокрушительный удар.

    С таким же успехом можно сказать, что "наносит ответный удар по gcc". msbuild -- всего лишь эквивалент gcc для вантуза от MS. Он представляет собой набор компайлеров, компоновщик, несколько утилит и пару скриптов, устанавливающих переменные среды. Да, конечно же и хидеры

     
  • 3.57, Аноним (-), 16:50, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Ну спасибо что хоть Go не обмазали...
    > "Мы ж не звери."

    С явой то в обязательных зависимостях? За кадром слышен конский топот плюсовиков, побежавших ставить себе 100 метров рантайма ради кaлa^W среды сборки.

     
     
  • 4.67, Аноним (-), 20:19, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Для билд фермы совсем не проблема поставить один раз рантайм.
    А вот если вас это значимый блоккер, то сабж не под ваши нужды - только и всего.
     
     
  • 5.88, Аноним (-), 03:56, 27/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Для билд фермы совсем не проблема поставить один раз рантайм.

    Ну да, если некто корпораха размером с гугл - они это конечно поставят. Вот только 99.9% разработчиков такой инфраструктурой не обладают :)

    > А вот если вас это значимый блоккер, то сабж не под ваши
    > нужды - только и всего.

    Ну понятно - фиговина будет обладать популярностью сравнимой с IBMовскими майнфреймами, по поводу чего через 5-10 лет гугл пульнет очередной анонс про шатдаун проекта :)

     
  • 4.83, Филипп Филиппович (ok), 16:53, 26/03/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Для проектов-гигантов совершенно неважно, нужно ли JRE. Если в проекте 100 МБ исходников, а в собранном виде он занимает гигабайты, всем будет абсолютно всё равно, ставить ли CMake или что-то там с JRE. Если учесть, что под ограниченные в ресурсах платформы всё равно всё кросс-компилируют, так это вообще никого не будет волновать.

    Просто понятно, что маленькие проектики -- не целевая аудитория этой штуки.

     
     
  • 5.89, Аноним (-), 03:57, 27/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Просто понятно, что маленькие проектики -- не целевая аудитория этой штуки.

    Ну вон линуксное ядро - какой проект? А для сборки минимум зависимостей. Была б ему нужна ява для сборки - у него програмеров было бы в разы меньше. Потому что половине бы проблевалсь еще до того как смогли это скомпилить.

     
     
  • 6.90, Филипп Филиппович (ok), 10:45, 27/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    И что У нас тоже есть большущие проекты на CMake Может, не ядро, но тоже очень... большой текст свёрнут, показать
     
  • 2.5, длолдодлолдо (?), 11:49, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Да пофиг, все равно через несколько лет, по традиции, закроет проект
     
  • 2.6, Anons (?), 11:54, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Для Go хотя бы jvm не нужна
     
  • 2.10, sdasdfasdf (?), 12:33, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Да потому что с++ это трах на хадулях и пишут на нем только от безвыходности, попробуй налобать на нем что нибудь подобное gradle и развивать его и расширять с такой же скоростью, а не раз в 100500 лет по одной плюшке.
     
     
  • 3.58, Аноним (-), 16:51, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > и развивать его и расширять с такой же скоростью, а не
    > раз в 100500 лет по одной плюшке.

    Лучше попробуй на яве написать игру с нормальной графикой. И чтоб не тормозило и не клинило на полчаса пока GC мусор собирает. И чтоб 100 метров рантайма бонусом качать не надо.

     
  • 2.11, Аноним (-), 12:38, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Лучше б на go написали вместо этих двух. На rust не рассчитываю, ибо NIH.
     
     
  • 3.16, Аноним (-), 13:34, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Rust еще не стабилизирован, поэтому (пока) никто не будет использовать его в продакшне.

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

     
     
  • 4.18, Аноним (-), 13:38, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > И дело тут даже не в слишком умных указателях, а в страшной стандартной библиотеке, страшной документации, отсутствии тулинга и очень неторопливом компиляторе.

    Ну с С++ понятно, а на rust-то почему сложно?

     
     
  • 5.51, Аноним (-), 15:24, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Синдром утёнка же.
     
  • 4.60, Аноним (-), 17:10, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > А еще на нем писать в 2 раза сложнее чем на С++.

    Да ладно, не сложнее чем на плюсах с темплейтами.

     

  • 1.9, sdasdfasdf (?), 12:30, 25/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    И чем это лучше Gradle?
     
  • 1.17, Аноним (-), 13:35, 25/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Bazel Frog (c) Без вины виноватый
     
  • 1.20, Аноним (-), 14:04, 25/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Растёт замена emerge.
     
     
  • 2.22, Аноним (-), 14:22, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Берите выше: это растёт новая замена средства размножения человеков.
    Чё уж там мелочиться?
     

  • 1.21, vitalif (ok), 14:12, 25/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Боже мой. В линуксе острая нехватка систем сборки?
     
     
  • 2.62, Аноним (-), 18:05, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    ну так, не хватает сборки от гугла ))
     
     
  • 3.75, Товарищ Майор (?), 07:54, 26/03/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На движке гугл хром.
     
  • 2.63, Аноним (-), 18:46, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Боже мой. В линуксе острая нехватка систем сборки?

    Нужно больше минералов, милорд!

     
  • 2.70, Аноним (-), 21:40, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Острая нехватка *вменяемых* систем сборки. GNU Make — штука хорошая, конечно, но явно не достаточная.
     
     
  • 3.79, правдоруб (?), 13:28, 26/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    У меня есть пример достаточности:

    simplelp генерирует несколько файлов, причём новое содержимое файлов сравнивается со старым и запись происходит только при несовпадении. Make делает лишнюю работу даже без "-j".

    Какие системы сборки тут могут помочь?

     
     
  • 4.80, правдоруб (?), 15:22, 26/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    недостаточности, конечно
     

  • 1.54, Аноним (-), 16:47, 25/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    System Requirements
      Supported platforms:
        Ubuntu Linux
        Mac OS X

      Java:
        Java JDK 8 or later

    Основной язык программирования:
    Java 94.9%

     
     
  • 2.59, Аноним (-), 16:53, 25/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, чего, очередная система сборки от хипстоты для хипстоты. И да, она завершает сборку за 200 миллисекунд. При условии что вы развернете парк серверов как у гугли ;]
     

  • 1.61, Аноним (-), 18:05, 25/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    makefile наше все!
     
     
  • 2.81, правдоруб (?), 15:25, 26/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Для мелочей однозначно, для KDE/Firefox/Libreoffice/Kernel уже какая-то совсем невообразимая портянка.
     

  • 1.65, Аноним (-), 19:05, 25/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Исходники в гугль шлет?
     
  • 1.66, Дмитрий (??), 19:22, 25/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Работал в гугле. Система крутая, подтверждаю. Правда, результирующий собранный артефакт не особо закастомайзишь, но гуглю это и не надо было, там стандартизированный жесткий формат отлично принимался везде где надо.
    Особый кайф - это что сборка распараллелена на Клауда, не больше минуты на сборку гигантских проектов.
     
  • 1.76, Аноним (-), 08:56, 26/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Базельский мир
    Базельский комитет по банковскому надзору
    Базель 1
    Базель 2
    Базель 3
    Игра в БИСЕР - Базельский игрок - :) ага, теперь Google скрывать нечего...

    И что он вам откомпилирует по Базелю :) ?

     
  • 1.77, yet another anonymous (?), 09:49, 26/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Че-то гугель заметался: то gradle в андроидную сборку притянет, то bazel 'развивает'...
     
  • 1.82, Аноним (-), 16:17, 26/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как он резолвит зависимости типа include в C++?
     
     
  • 2.87, yet another anonymous (?), 21:17, 26/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Обычно хреновины такого рода имеют собственный препроцессор а-ля C++ (...). (поэтому использование неожиданного для таких хреновин компилятора может лажать в вычислении зависимостей).
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру