OpenHarmony向けビルドシステムの構造と仕組み

OpenHarmonyのビルド基盤は、GNとNinjaを中核に据え、コンポーネント単位での柔軟な構成やモジュール拡張を実現するフレームワークです。このシステムは以下のような機能を提供します:

  • 最小単位として「コンポーネント」を扱い、製品構成や個別ビルドを可能にする。
  • 軽量・小型・標準の3種類のシステム向けにソリューションレベルのビルドをサポートし、IDE開発用SDKの生成にも対応。
  • チップベンダーによるカスタマイズや独立ビルドを柔軟に許容。

構成要素と関係性

ビルドシステムは「モジュール」「コンポーネント」「サブシステム」「製品」の4層で構成され、それぞれ次のように関連付けられます:

  • サブシステムは特定ディレクトリ配下のコンポーネント群であり、1コンポーネントは1サブシステムにのみ所属可能。
  • コンポーネントは複数のモジュールを束ねたもので、1モジュールは1コンポーネントに帰属。
  • 製品設定ファイルで必要なコンポーネント群を指定。同じコンポーネントでも製品ごとに機能差分(variant/feature)を適用可能。
  • モジュールは実際のビルドターゲット。コンポーネント自体もターゲットとして扱える。

ディレクトリ構成の概要

build/
├── build_scripts/          # ビルド補助Pythonスクリプト群
├── config/                 # コンパイルオプション等の設定
├── core/
│   ├── build_scripts/
│   └── gn/                 # メインビルド定義 BUILD.gn
├── lite/                   # hbおよびpreloaderエントリポイント
├── ohos.gni                # 共通gni定義の一括インポート用
├── templates/              # C/C++ビルドテンプレート
├── toolchain/              # ツールチェーン設定
├── tools/                  # ユーティリティ集
└── version.gni             # バージョン管理用定義

ビルドフロー

製品・コンポーネント・モジュールはビルド可能だが、サブシステム単体のビルドは不可。基本手順は以下の2ステップ:

  1. hb set:ターゲット製品を選択。
  2. hb build:選択した製品やボードをビルド。内部では:
    • 開発ボードのconfig.gniを読み込み、ツールチェーンやリンクオプションを設定。
    • gn genでoutディレクトリとNinjaファイルを生成。
    • ninja -C out/board/productで実コンパイルを実行。
    • 成果物をパッケージ化し、ファイルシステムイメージを生成。

環境セットアップとビルド操作

前提環境の整備

必要なパッケージを一括インストール:

./build/build_scripts/env_setup.sh

hbが正常に動作しない場合の再インストール手順:

# インストール
python3 -m pip install --user build/hb
# PATH追加: ~/.bashrc に export PATH=~/.local/bin:$PATH を記述
# アンインストール
python3 -m pip uninstall ohos-build

事前ビルド処理

コンパイラやバイナリツールをダウンロード:

bash build/prebuilts_download.sh

ビルド実行方法

シェルスクリプト方式

リリース版:

./build.sh --product-name {製品名}

デバッグ版:

./build.sh --product-name {製品名} --gn-args is_debug=true --build-target {ターゲット名}
hbコマンド方式

hb set:製品選択
hb set → 対話形式で設定
hb set -root dir → ルートパス直接指定
hb set -p → 製品名指定

hb env:現在の設定内容を表示

hb build:ビルド実行
hb build → 前回設定に基づき継続ビルド
hb build -f → clean + build 相当
hb build {コンポーネント名} → 単体コンポーネントビルド (例: hb build kv_store)
hb build -p ipcamera@hisilicon → set不要で直接製品ビルド

hb clean:outディレクトリ内の該当製品成果物を削除(args.gnとbuild.logは保持)
hb clean out/board/product → 特定パスを指定してクリーン

設定ルールの設計思想

チップソリューションや製品構成がOpenHarmony本体と疎結合かつプラグイン可能なように、各レイヤー(サブシステム/製品/コンポーネント/モジュール/feature/capability)には明確な設定規約が設けられています。詳細なルールや新規追加手順については公式ドキュメントをご参照ください。

タグ: OpenHarmony gn ninja hb ビルドシステム

7月22日 02:14 投稿