1# HB构建工具使用指导<a name="ZH-CN_TOPIC_0000001130006475"></a> 2 3- [简介](#section11660541593) 4- [说明](#section1312121216216) 5 - [使用说明](#section129654513264) 6 7- [相关仓](#section1371113476307) 8 9## 简介<a name="section11660541593"></a> 10 11在开发编译构建前,应了解如下基本概念: 12 13- hb 14 15 一款基于python开发的编译构建脚本工具,提供了编译环境检查与依赖安装、图形化界面编译引导、编译目标依赖检查、编译产物清理等特性。 16 17- gn 18 19 Generate ninja的缩写,一种元构建系统,用于产生ninja文件。 20 21- ninja 22 23 ninja是一个专注于速度的小型构建系统。 24 25- 部件 26 27 可复用的软件单元,它可包含源码、配置文件、资源文件和编译脚本等。 28 29 30使用hb启动编译构建任务流程如下: 31 321. hb set: 设置源码目录和要编译的产品。 332. hb build: 编译产品、开发板或者组件。解决方案编译实现如下: 34 - 读取开发板配置:主要包括开发板使用的编译工具链、编译链接命令和选项等。 35 - 调用gn: 调用gn gen命令,读取产品配置\(主要包括开发板、内核、选择的组件等\)生成解决方案out目录和ninja文件。 36 - 调用ninja:调用ninja -C out/company/product启动编译。 37 - 系统镜像打包:将组件编译产物打包,制作文件系统镜像。 38 39 40## 说明<a name="section1312121216216"></a> 41 42### 使用说明<a name="section129654513264"></a> 43 441. **前提条件** 45 - Linux服务器,Ubuntu16.04及以上64位系统版本。 46 - Python 3.7.4及以上。 47 - 源码下载成功。 48 492. **安装hb** 50 - 在源码根目录下执行: 51 52 ``` 53 python3 -m pip install --user build/hb 54 ``` 55 56 - 执行hb help有相关帮助信息,有打印信息即表示安装成功,当前hb 主要提供了hb set,hb build,hb tool,hb env,hb clean五个选项。 57 58 59 - 卸载方法: 60 61 ``` 62 python3 -m pip uninstall ohos-build 63 ``` 64 65 663. **编译命令** 67 1. **hb set** 68 69 ``` 70 hb set -h 71 usage: hb set [option] 72 73 options: 74 -h, --help show this help message and exit 75 -p PRODUCT_NAME, --product-name PRODUCT_NAME 76 Default:''. Help:Build a specified product. You could use this option like this: 1.'hb set --product-name rk3568@hihope' 2.'hb set'[graphical ui] 77 --all Default:False. Help:Use a graphical interface to customize most compile-time parameters 78 ``` 79 80 - hb set 后无参数,进入默认设置流程 81 - hb set -root \[ROOT\_PATH\] 直接设置代码根目录 82 - hb set -p --product 设置要编译的产品 83 - hb set --all 选择自定义的产品配置,如产品芯片架构、release/debug版本、日志级别等 84 85 2. **hb env** 86 87 提供编译环境依赖检查和安装 88 89 ``` 90 hb env -h 91 usage: hb env [option] 92 93 options: 94 -h, --help show this help message and exit 95 --check Default:True. Help:check that the current running environment contains all dependencies 96 --install Default:False. Help:install all dependent software for compiling products 97 ``` 98 99 3. **hb build** 100 101 ``` 102 hb build -h 103 usage: hb build [option] 104 options: 105 -h, --help show this help message and exit 106 -p PRODUCT_NAME, --product-name PRODUCT_NAME 107 Default:''. Help:Build a specified product. If you have executed 'hb set', execute 'hb build' directly. Or you could use this option like this: 1.'hb build --product-name rk3568@hihope' 2.'hb build --product-name rk3568' 108 --target-cpu {arm,arm64,x86_64,x64} 109 Default:''. Help:Specifies the desired cpu architecture for the build, each may support different cpu architectures, run 'hb set --all' to list product all supported cpu 110 architectures 111 --rename-last-log {True,False,true,false} 112 Default:True. Help:You can use it to decide whether to keep the last build log 113 --ccache Default:True. Help:Enable ccache, this option could improve compilation speed. --stat-ccache can summary the cache data 114 --enable-pycache {True,False,true,false} 115 Default:False. Help:Enable pycache, This option can improve the execution speed of python files 116 --jobs JOBS Deprecated, please do not use this option 117 --disable-part-of-post-build [DISABLE_PART_OF_POST_BUILD ...] 118 Deprecated, please do not use this option 119 --build-target [BUILD_TARGET ...] 120 Default:[]. Help:You use this option to specify a single compilation target, and use 'hb tool --ls' to list all build target 121 --ninja-args [NINJA_ARGS ...] 122 Default:[]. Help:You can use it to pass parameters for the ninja phase, but you need to follow the specified command format. eg. --ninja-args=-dkeeprsp 123 -f, --full-compilation 124 Default:[]. Help:You can use it to start full code compilation. The default compilation target is images. Use this option to add 'make_all' and 'make_test' to the build 125 process. 126 --strict-mode {True,False,true,false} 127 Default:False. Help:Check all produce of each phase to early terminates a potentially problematic compilation. 128 --scalable-build {True,False,true,false} 129 Default:False. Help:Select whether to read information from parts.json generate by preload 130 --build-example {True,False,true,false} 131 Default:False. Help:Select whether to read information from subsystem_config_example.json 132 --build-platform-name BUILD_PLATFORM_NAME 133 Default:'phone'. Help:Name of the compilation platform. The current optional value is 'phone' 134 --build-xts {True,False,true,false} 135 Default:False. Help:Select whether to load the components included in the subsystem xts 136 --ignore-api-check [IGNORE_API_CHECK ...] 137 Default:[]. Help:Skip the check of some subsystems 138 --load-test-config {True,False,true,false} 139 Default:True. Help:Select whether to load the test field in bundle.json, that is, whether to call the test case 140 --build-type {release,debug} 141 Default:'release'. Help:Specify compile release or debug version 142 --log-level {info,debug} 143 Default:'INFO'. Help:Specify the log level during compilation. you can select two levels: debug, info. In debug mode, it show all command lines while building, including 144 cxx, link, solink, etc. 145 --export-para [EXPORT_PARA ...] 146 Deprecated, please do not use this option 147 --test [TEST ...] Default:[]. Help:You can use it to choose test type. eg. --test xts 148 --gn-args [GN_ARGS ...] 149 Default:[]. Help:Specify gn build arguments, you could use this option like this 'hb build --gn-args is_debug=true' 150 -c COMPILER, --compiler COMPILER 151 Deprecated, please do not use this option 152 --fast-rebuild Default:False. Help:You can use it to skip prepare, preloader, gn_gen steps so we can enable it only when there is no change for gn related script 153 --keep-ninja-going Default:False. Help:When you need to debug one specific target, you can use this option to keep ninja going to skip some possible error until 1000000 jobs fail 154 --build-only-gn Default:False. Help:Stop build until gn phase ends 155 --build-variant {user,root} 156 Default:'root'. Help:specifies device operating mode 157 --device-type DEVICE_TYPE 158 Default:'default'. Help:specifies device type 159 --disable-package-image 160 deprecated, please do not use this option 161 --archive-image Default:False. Help:archive image when build product complete 162 --rom-size-statistics 163 Default:False. Help:statistics on the actual rom size for each compiled component 164 --stat-ccache Default:True. Help:summary ccache hitrate, and generate ccache.log in ${HOME}/.ccache dir 165 --get-warning-list Default:True. Help:You can use it to collect the build warning and generate WarningList.txt in output dir 166 --generate-ninja-trace {True,False,true,false} 167 Default:True. Help:Count the duration of each ninja thread and generate the ninja trace file(build.trace.gz) 168 --compute-overlap-rate 169 Default:True. Help:Compute overlap rate during the post build 170 --clean-args Default:True. Help:clean all args that generated by this compilation while compilation finished 171 --deps-guard Default:True. Help:simplify code, remove concise dependency analysis, and speed up rule checking 172 --skip-partlist-check Default:False. Help:Skip the subsystem and component check in partlist file 173 174 ``` 175 176 - hb build后无参数,会按照设置好的代码路径、产品进行编译,编译选项使用与之前保持一致。 177 - hb build component:基于设置好的产品对应的单板、内核,单独编译组件(e.g.:hb build kv\_store\)。 178 - hb build component_test: 基于设置好的产品对应的单板、内核,单独编译组件的测试用例。 179 - hb build -p PRODUCT:免set编译产品,该命令可以跳过set步骤,直接编译产品。 180 - 在device/device\_company/board下单独执行hb build会进入内核选择界面,选择完成后会根据当前路径的单板、选择的内核编译出仅包含内核、驱动的镜像。 181 - hb build在部件目录下执行,会检测当前目录下是否存在bundle.json,如果存在,则会将当前部件作为编译目标单独编译,而无须切换至源码根目录下执行。 182 183 4. **hb clean** 184 185 清除out目录对应产品的编译产物,仅剩下args.gn、build.log。清除指定路径可输入路径参数:hb clean xxx/out/xxx,否则将清除hb set的产品对应out路径 186 187 ``` 188 hb clean -h 189 usage: hb clean [option] 190 191 options: 192 -h, --help show this help message and exit 193 --clean-all Default:False. Help:clean all producer 194 --clean-args Default:True. Help:clean all args that generated by last compilation 195 --clean-out-product Default:False. Help:clean out/{product} directory that generated by last compilation 196 --clean-ccache Default:False. Help:clean .ccache directory which is in OHOS root 197 ``` 198 199 5. **hb tool** 200 201 该选项可以用于: 202 1. 查看所有构建目标; 203 2. .gn文件格式化; 204 3. 查看构建目标之间的依赖关系路径; 205 4. gn构建文件清理。 206 ``` 207 hb tool -h 208 usage: hb tool [option] 209 210 options: 211 -h, --help show this help message and exit 212 --ls [LS ...] Default:[]. Help:Lists all targets matching the given pattern for the given build directory. You could use this option like this: 1.'hb tool --ls <out_dir> [<label_pattern>] 213 [<options>]' 214 --desc [DESC ...] Default:[]. Help:Displays information about a given target or config. You could use this option like this: 1.'hb tool --desc <out_dir> <component_module> [<what to show>] 215 [<options>]' 216 --path [PATH ...] Default:[]. Help:Finds paths of dependencies between two targets. You could use this option like this: 1.'hb tool --path <out_dir> <component1_module1> <component2_module2> 217 [<options>]' 218 --refs [REFS ...] Default:[]. Help:Finds reverse dependencies (which targets reference something). You could use this option like this: 1.'hb tool --refs <out_dir> [<component_module>|<file>] 219 [<options>]' 220 --format [FORMAT ...] 221 Default:[]. Help:Formats .gn file to a standard format. You could use this option like this: 1.'hb tool --format /abspath/some/BUILD.gn [<options>]' 222 --clean CLEAN Default:[]. Help:Deletes the contents of the output directory except for args.gn. You could use this option like this: 1.'hb tool --clean <out_dir>' 223 ``` 224 225 226## 相关仓<a name="section1371113476307"></a> 227**[编译构建子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/编译构建子系统.md)** 228