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ステップ:
hb set:ターゲット製品を選択。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)には明確な設定規約が設けられています。詳細なルールや新規追加手順については公式ドキュメントをご参照ください。