Google、Android 用 Soong モジュール式アセンブリ システムを開発

Googleはビルドシステムを開発中 スン、make ユーティリティの使用に基づいて、Android プラットフォームの古いビルド スクリプトを置き換えるように設計されています。 Soong 氏は、単純な宣言型を使用することを提案しています。 説明 モジュールを組み立てるルール、 与えられた 拡張子「.bp」のファイル(ブループリント)。 ファイル形式は JSON に近く、可能であればアセンブリ ファイルの構文とセマンティクスを繰り返します。 Bazel。 コードは Go で書かれており、Apache 2.0 ライセンスに基づいて配布されています。

Soong ビルド ファイルは条件文や分岐式をサポートしていませんが、ビルド時に使用されるプロジェクト構造、モジュール、依存関係のみを記述します。 ビルドされるファイルはマスクを使用して記述され、パッケージにグループ化されます。各パッケージは、関連する依存関係を持つファイルのコレクションです。 変数を定義することが可能です。 変数とプロパティは厳密に型指定されます (変数の型は最初の代入時に動的に選択され、プロパティの場合はモジュールの型に応じて静的に選択されます)。 アセンブリ ロジックの複雑な要素はハンドラーに移動され、 書かれた Go言語で。

Soong はより大きなプロジェクトと絡み合っています 青写真この中では、Android に関連付けられていないメタアセンブリ システムが開発されており、宣言的なモジュール記述を含むファイルに基づいて、アセンブリ スクリプトが生成されます。 忍者 (make の代替)、ビルドするために実行する必要があるコマンドと依存関係について説明します。 複雑なルールやドメイン固有の言語を使用してビルド ロジックを定義する代わりに、Blueprint は Go 言語のプロジェクト固有のハンドラーを使用します (Soong は本質的に Android 用の同様のハンドラーのセットです)。

このアプローチにより、Android などの大規模で異種混合プロジェクトでは、単純な宣言構文を使用してアセンブリ構成やプロジェクト構造に関連するモジュールを変更する機能を維持しながら、アセンブリ ロジックの複雑な要素を高水準プログラミング言語のコードに実装できます。 。 たとえば、Soong では、コンパイラ フラグの選択はハンドラによって行われます。 llvm.go、ハードウェア アーキテクチャに固有の設定の適用はハンドラーによって実行されます。 アートゴーですが、コードファイルのリンクは「.bp」ファイル内で行われます。

cc_ライブラリ {
...
srcs: ["generic.cpp"],
アーチ: {
腕: {
srcs: ["arm.cpp"]、
},
x86: {
srcs: ["x86.cpp"]、
},
},
}

出所: オープンネット.ru

コメントを追加します