独立编译
简介
独立编译是相对全量源码编译的另一个编译方式,在全量源码编译中,需要准备好编译环境、下载全量源码、执行预编译后才能进行编译,独立编译则不依赖全量源码,独立编译只依赖build仓的源码,以及需要进行独立编译的代码仓的源码,所涉及的对其他部件的依赖,则会以二进制包的形式下载下来,编译时直接进行链接
独立编译时的代码目录结构如下:
├──.repo # 编译构建主目录
├── build
├── foundation\graphic\graphic_2d(这里以graphic_2d部件为例)
├── prebuilts # 执行独立编译预下载后自动生成
下载的二进制包本地存放路径:
~/.hpm
二进制包远程仓库:
repo.harmonyos.com
二进制包依赖定义:
独立编译依赖的二进制项在bundle.json中component->deps字段中定义
机制简介
-
根据依赖配置下载二进制包
-
将external_deps解析成对二进制包的依赖
-
-i 选项的编译入口是在bundle.json的build字段中,除test字段外定义的所有构建目标
-
-t 选项的编译入口是build->test字段中定义的构建目标
编译环境准备
准备开发环境
ubuntu版本至少为22.04
安装库和工具集
安装hb工具
# 若hb工具安装出现问题可尝试如下步骤:
# 首先需要保证python以及python3均指向大于等于python3.8的版本
# 删除旧的hb:
rm -rf ~/.local/lib/python{版本号}/site-packages/hb
rm -rf ~/.local/bin/hb
# 安装修的hb:
python3 -m pip install --default-timeout=300 --user build/hb --index-url https://mirrors.huaweicloud.com/repository/pypi/simple
python3 -m pip install jinja2 --index-url https://mirrors.huaweicloud.com/repository/pypi/simple
# 配置环境变量:
# 在~/.bashrc添加PATH=~/.local/bin:$PATH
source ~/.bashrc
独立编译示例
以syscap_codec部件为例,进行独立编译,执行如下步骤
初始化repo
mkdir code
cd code
repo init -u https://gitcode.com/openharmony/manifest.git -b master --no-repo-verify
拉build仓
repo sync -c build
拉编译仓
repo sync -c developtools_syscap_codec
执行独立编译预下载
bash build/prebuilts_config.sh --download-sdk
进行独立编译
hb build syscap_codec -i
独立编译常用参数
-t ---只编译bundle.json中声明的测试项
-i ---编译bundle.json中声明的除测试项外其他所有项
--build-target ---指定构建目标编译,若在bundle.json中声明的,可以直接指定目标名,否则需要指定路径(相对源码根目录的路径或者gn路径)
--skip-download ---跳过二进制包下载
--keep-ninja-going ---编译报错后继续编译,直至完成
--gn-flags=--export-compile-commands ---生成compile_command.json文件
其他更多请通过hb help命令查询usage: hb indep_build [option]中的内容