Google развивает модульную сборочную систему Soong для Android

Discussion in 'Мировые новости. Обсуждения.' started by Suicide, 29 Oct 2019.

  1. Suicide

    Suicide Super Moderator
    Staff Member

    Joined:
    24 Apr 2009
    Messages:
    2,373
    Likes Received:
    6,619
    Reputations:
    693
    Компания Google развивает сборочную систему Soong, призванную заменить собой старые сценарии сборки платформы Android, основанные на использовании утилиты make. Soong предлагает использовать простые декларативные описания правил сборки модулей, задаваемые в файлах с расширением ".bp" (blueprints). Формат файлов близок к JSON и по возможности повторяет синтаксис и семантику сборочных файлов Bazel. Код написан на языке Go и распространяется под лицензией Apache 2.0.

    Сборочные файлы Soong не поддерживают условных операторов и выражений для ветвления, а только описывают структуру проекта, применяемые при сборке модули и зависимости. Подлежащие сборке файлы описываются при помощи масок и группируются в пакеты, каждый из который представляет собой коллекцию файлов с указанием связанных с ними зависимостей. Возможно определение переменных. Переменные и свойства строго типизированы (тип переменных выбирается динамически при первом присвоении, а для свойств статически в зависимости от типа модуля). Сложные элементы сборочной логики вынесены в обработчики, написанные на языке Go.

    Soong переплетается с более общим проектом Blueprint, в рамках которого развивается не привязанная к Android мета-система сборки, которая на основе файлов с декларативными описаниями модулей, формирует сборочные сценарии Ninja (замена make), описывающие команды, которые необходимо выполнить для сборки, и зависимости. Вместо применения сложных правил или предметно ориентированного языка для определения логики сборки, в Blueprint применяются специфичные для собираемых проектов обработчики на языке Go (Soong является по сути набором подобных обработчиков для Android).

    Подобный подход позволяет для больших и разнородных проектов, таких как Android, реализовать сложные элементы сборочной логики в коде на высокоуровневом языке программирования, при этом сохраняя возможность при помощи простого декларативного синтаксиса вносить в модули изменения, связанные с организацией сборки и структурой проекта. Например, в Soong выбор флагов компилятора производится обработчиком llvm.go, а применение специфичных для аппаратных архитектур настроек производится обработчиком art.go, но привязка файлов с кодом осуществляется в файле ".bp".

    cc_library {
    ...
    srcs: ["generic.cpp"],
    arch: {
    arm: {
    srcs: ["arm.cpp"],
    },
    x86: {
    srcs: ["x86.cpp"],
    },
    },
    }




     
    CKAP, Turanchocks_ and seostock like this.