大規模なソフトウェアシステムの開発は、強力な建設システムと切り離せないものですが、Hongmeng Systemはどのような建設システムを使用していますか?この記事では、OpenHarmoneyのビルドシステムをわかりやすく説明します。
ここで説明するOpenHarmonyシステムのビルドシステムは、Harmonyアプリの開発に使用されるビルドシステム、つまりソースコードからHarmonyシステムイメージをビルドするためのツールではないことを事前に述べておきます。
システム構築の概要
長年にわたる私の開発キャリアの中で、私は多くのソフトウェアビルドシステムと接触してきました。ソフトウェアを開発するためにビルドシステムが必要なのはなぜですか?
プログラミングの学習を始めたばかりであることを思い出してください。通常、コードサイズは比較的小さく、記述されたソースコードはほんの数ファイルです。たとえば、プログラミングエントリの従来のコードは、helloworld.cファイルに書き込みます。このコードをコンパイルするには、次のコマンドを実行するだけです。
gcc helloworld.c
コンパイル後、 a.outの実行可能プログラムが生成されます。プログラムはもう少し複雑です。コマンドラインにいくつかのパラメーターを追加して、プログラムの構築を完了することができます。
ただし、ソフトウェアの規模が徐々に大きくなると、コードは数十のソースコードファイル(Open HarmoneyやAndroidなどの大規模なシステムソフトウェアの場合、ソースコードは100万行にもなる可能性があります)に増加する可能性があります。一部のモジュールは、いくつかの静的ライブラリを動的ライブラリにコンパイルし、最終的に実行可能コードにリンクする必要があります。このとき、コマンドラインメソッドは拡張されています。クロスプラットフォーム開発やシステムカスタマイズなどに関しては、強力なビルドシステムが不可欠です。
ビルドシステムのマスターであるGNUMakeの名前は、だれにも拒否されてはなりません。GNU Makeは、Makefileを介してターゲットの依存関係とコンパイルルールを定義し、スクリプトを呼び出してファイルのコピー、パッケージ化、その他のタスクを完了することもできます。これは非常に強力であり、Unixライクなシステムの主流のソフトウェア構築ツールです。
ただし、GNU Makefileは非常に面倒で、面倒で、エラーが発生しやすくなります。また、マルチプラットフォーム開発に関しては、GNUMakeもやや無能です。たとえば、Windows開発の場合、通常はVisual StudioなどのIDEが使用され、slnやprojなどのプロジェクトファイルが使用されます。
これらの問題を解決するために、 cmake、AutoMakeなどのMakefileを生成するためのツールが登場しました。このビルドシステムは、メタビルドシステムと呼ばれます。
Linuxユーザーの場合、ソースからソフトウェアを構築するための次のプロセスに精通している必要があります。
./configure
make
make install
最初のステップは、AutoToolツールを呼び出して、システム環境に応じてGNU Makefileを生成することです(Linuxには多くのバージョンがあり、ソフトウェア開発キットのインストールも異なります)。2番目のステップはGNUMakeの構築プロセスを開始することであり、3番目のステップはMakefileによって定義されたルールに従ってシステムによって指定されたディレクトリにプログラムをインストールすることです。
AutoToolツールは通常、Linuxのようなシステムでの使用に制限されています。CMakeはさらに一歩進んで、GNU Makefileだけでなく、VSプロジェクトファイルも生成して、クロスプラットフォームソフトウェア開発の問題を解決できます。
ソフトウェアの規模の拡大や要件の複雑化に伴い、建設システムは徐々に発展してきており、主要なソフトウェア開発チームもさまざまな建設システムを開発しており、その中でもGoogleのエンジニアが最も多く取り組んでいます。
Androidシステムは初期にはGNUMakeビルドシステムを使用していましたが、Googleエンジニアの優れたスキルにより、Android.mkの記述が大幅に簡素化されました。Android.mkだけを見ると、GNUMakefileを書いていることに気付かないかもしれません。しかし、Android 7.0(Nougat)から、Soongビルドシステムが導入されました。
ブラウザエンジンプロジェクトChromiumは、別のビルドシステムを使用しています。
クロムオープンソースプロジェクトへの私の初期の露出では、クロムはメタビルドシステムでもあるGYP(Generate Your Projects)ビルドシステムを使用していました。ソフトウェアエンジニアは、GYPルールに従って建設プロジェクトファイル(通常はgyp、gypiの接尾辞)を作成し、GYPツールはgypファイルに基づいてGNUMakefileを生成します。
その後、chromiumプロジェクトがNinjaビルドシステムを構築しましたが、このNinjaはGYPの代わりに使用されるのではなく、GNU makeの代わりに使用されます。Googleの公式声明によると、速度は数倍向上しています。開発者にとっては、NinjaやGNU Makefileのようなビルドシステムに入る必要はありません。これは、単なる中間出力だからです。
その後、GoogleはGYPに移行し、GNビルドシステムに置き換えました。GNビルドシステムは、Ninjaビルドファイルをすばやく生成するためのメタビルドシステムです。
GNビルドシステムのソースコードはhttps://gn.googlesource.com/gnにあり、壁を越えてアクセスする必要があります。ソフトウェアのみをビルドする場合は、GNやNinjaなどのビルドツールの完全なセットを含むdepot_toolsをダウンロードできます。
Hongmengのビルドシステム
数日前、Open Harmony 2.0のソースコードのシステムコンパイルについて話をしましたが、ちなみにOpen Harmonyの構築システムを調べてみたところ、おなじみの古くからの友人でした。はい、HongmengシステムはGoogleが開発したGNビルドシステムを使用しています。なぜGNビルドシステムを選ぶのですか?Googleの公式ウェブサイトによると、GNビルドシステムには次の利点があります。
読みやすさが向上し、書き込みと保守が容易になります。
より速く、Googleの公式データは20倍高速です。
GNファイルを変更した後、忍者ビルドが実行されると、忍者ビルドファイルが自動的に更新されます。
より単純なモジュール依存関係、public_deps、data_depsなどを提供します。
モジュール依存関係グラフを照会するためのより優れたツールを提供します。
より良いデバッグサポート。
HongmengがGNビルドシステムを採用するのは賢明な選択です。このビルドシステムは、クロムなどの大規模なソフトウェアシステム(コードスケールはAndroidシステムのコードスケール以上)によって検証されており、信頼性が高く、高速で、柔軟性があり、簡単に記述できます。ソフトウェア開発の世界では有名なことわざがあります。車輪の再発明をしないでください。すべてをゼロから開発する必要はありません。
もちろん、Open Harmony 2.0のビルドスクリプトを注意深く分析すると、Bashスクリプト、Pythonスクリプト、およびGNビルドシステムが混在していることがわかります。ソフトウェア開発に関しては、手元にあるツールが何であれ、それを使用するだけで、実用性が最優先されます。
現在、GNビルドシステムに関する情報はほとんどありません。次のドキュメントを参照できます。
クロムのGNビルドシステム
GNクイックスタートガイド
GNの言語と操作
GNファイルの作成は実際には複雑ではありません。既存のGNファイルを参照することで、すばやく習得できます。ここでは拡張しません。
後の記事で、GNビルドファイルの作成について詳しく説明しますので、しばらくお待ちください。