Компания Apple открыла код сборочной системы Swift Build

Компания Apple объявила об открытии исходного кода сборочной системы Swift Build, применявшейся в проприетарных интегрированных средах разработки Xcode и Swift Playground. Система оптимизирована для сборки проектов на языках Swift, C и Objective-C, но может применяться и с другими языками. Для пакетного менеджера Swift Package Manager подготовлен экспериментальный модуль (“–build-system swiftbuild”), позволяющий использовать Swift Build в качестве альтернативного движка для сборки пакетов. Код Swift Build написан на языке Swift и открыт под лицензией Apache 2.0. Поддерживается сборка проектов для Linux, macOS, iOS, Android, QNX и Windows.

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

Система реализована в виде надстройки над набором библиотек llbuild (low-level build), реализующих низкоуровневые примитивы для работы с графом зависимостей, определения формата правил сборки, отслеживания пересобираемых объектов и создания манифестов для инструментария Ninja. Из расширенных возможностей
Swift Build отмечается: поддержка интеграции с компилятором Swift для эффективной координации сборка проектов на языке Swift; поддержка сборки различных типов продуктов, включая утилиты командной строки, GUI-приложения и библиотеки; оптимизации сборочного графа для повшения эффективности распараллеливания процессов сборки кода на языках Swift и C.

Основу Swift Build составляет процесс SWBBuildService, который запускается после инициирования сборки клиентом, которым может выступать утилита swbuild, среда разработки Xcode или пакетный менеджер Swift Package Manager. Взаимодействие между сборочным сервисом SWBBuildService и клиентским процессом осуществляется через отправку сериализированных сообщений поверх неименованного потока (pipe). На стороне клиента взаимодействие со сборочной системой осуществляется через API SwiftBuild или через утилиту командной строки swbuild.

Функциональность Swift Build определяет набор фреймворков, таких как:

  • SWBLLBuild – надстройка для доступа к функциональности llbuild;
  • SWBUtil – вспомогательные функции, такие как реализация упорядоченных списков;
  • SWBCSupport – поддержка кода на C и Objective-C;
  • SWBCore – движки для обработки макросов, настроек, модели проекта, спецификаций, платформ;
  • SWBTaskConstruction – логика формирования задач;
  • SWBTaskExecution – организация выполнения сборочных задач;
  • SWBBuildSystem – построение и планирования сборочных операций, управление созданием и выполнением задач.

Release. Ссылка here.