当前位置: 首页 > 科技观察

鸿蒙标准系统3.1的编译构建简单解读

时间:2023-03-21 17:55:47 科技观察

鸿蒙标准体系编译构建简单解读3.1Prebuilts下载阶段./build/prebuilts_download.sh该命令主要是在构建前下载一些依赖的工具包或者二进制文件,查看源码同级目录下文件夹OpenHarmony_2.0_canary_prebuilts代码。2.脚本简明编译过程下图为除GNbuild之外的脚本全局构建过程:3.Preloader阶段的子系统配置文件包括以下三个文件,分别定义了脚本的名称和路径子系统。子系统配置文件://build/subsystem_config.json,主要包括子系统名称和路径信息。产品配置文件:productdefine/common/products/{产品名称}.json,该配置文件主要包括产品名称、产品制造商、产品设备名称、产品类型、产品对应子系统的路径、包含的组件等信息在产品中。设备配置文件:productdefine/common/device/{产品设备名称}.json,该配置文件主要包括设备的设备名称、设备厂商、目标os和目标cpu等信息,以及对应子系统的路径装置。在preloader阶段会加载以上三个文件,通过提取不同字段的信息对多个配置文件进行分类。以上工作主要由脚本build/lite/hb_internal/preloader/preloader.py完成,在**out/preloader/{产品名称}**目录下输出配置文件扫描对应的子系统配置文件对于加载程序阶段。准备工作,具体对应关系如下:4.GN/NinjaBuild阶段鸿蒙编译构建子系统提供了基于Gn和ninja的编译构建框架。根据产品配置,编译生成相应的镜像包。编译构建过程为:使用Gn配置构建目标。gn运行后会生成ninja文件。编译任务通过运行ninja来执行。1、触发GN构建Preloader阶段后,//build/lite/hb_internal/build/build_process.py.gn_build开始触发构建。以产品Hi3516DV300为例,命令及参数如下:gngen--args=ohos_build_compiler_specified="clang"ohos_build_compiler_dir="//prebuilts/clang/ohos/linux-x86_64/llvm"product_path="/home/osm/Work/openharmony/openharmony_3.1/code/productdefine/common/products"product_name="Hi3516DV300"device_name="hi3516dv300"target_cpu="arm"target_os="ohos"is_standard_system=truedevice_path="device/board/hisilicon/hispark_taurus/linux"ohos_kernel_type="linux"common_feature_verify=trueohos_build_type="debug"ohos_build_time="1651857930667"ohos_build_datetime="2022-05-0603:25:30"ohos_build_enable_ccache=true','/home/osm/Work/openharmony/openharmony_3.1/code/out/hi3516dv300'2.GN构建过程GN的主入口:build/core/gn/BUILD.gn。(1)Loader阶段GN构建的第一步是进入Loader阶段。该阶段主要是通过Preloader阶段集成的配置信息将buildconfigs加载到out/{productname}/build_configs目录。这项工作由脚本//build/loader/load.py完成:1.根据out/preloader/{productname}/subsystem_config中的子系统名称和路径信息扫描该路径下的子系??统配置文件。json文件,并与bundle.json和ohos兼容。建造。2.加载平台配置:根据out/preloader/{产品名称}/platforms.build加载平台配置信息,在out/{产品名称}/build_configs/platform_list目录下生成文件。3、根据1得到的bundle.json/ohos.build,解析出/{产品名}/build_configs/{子系统}/{part}/BUILD.gn,out/{产品名}/build_configs/parts_info/,out/{产品名}/build_configs/*.gni和out/{产品名}/build_configs/**.json等,将编译好的入口模板build/loader/build_gn.template复制到out/{产品名}/build_configs/BUILD.gn,从而在out/{产品名称}/build_configs目录下构建整个项目gn脚本的完整依赖。(2)makeinner_kitsinner_kits是组件提供给其他组件的接口,其他组件会依赖它,所以先编译这部分。具体构建目标见out/{产品名称}/build_configs/inner_kits_list.gni(3)packages阶段该阶段主要包括版本打包和处理程序,输出目录主要在out/{产品名称}/packages/phone目录下,package流程如下:(4)images阶段images阶段主要是根据packages阶段生成的系统模块配置文件制作系统文件和升级镜像。输出目录主要在out/{产品名称}/packages/phone/{image_name}和out/{产品名称}/packages/phone/images目录下,主要流程如下:3.NinjaBuild以上是GN的配置和构建过程。GN命令只是用来生成ninja中间文件,真正的构建任务会在运行ninja后开始。以产品Hi3516DV300为例,命令及参数如下:ninja-wdupbuild=warn-C/home/osm/Work/openharmony/openharmony_3.1/code/out/hi3516dv300images以上命令会在编译过程中生成或者在命令执行之后。进程中的输出文件或图像文件。5.PostBuild这个阶段主要做一些收尾工作,内容如下:1.stat_ccache()统计ccache信息,输出根目录下的ccache.log文件。2.generate_ninja_trace()备份之前的build.trace.gz,并在文件名上打上时间戳,生成新的build.trace.gz和sorted_action_duration.txt。3.get_warning_list()根据生成的out/{产品名称}/build.log提取所有警告并统计到out/{产品名称}/packages/warning_list.txt。4.compute_overlap_rate()根据build/subsystem_config.json计算C的重复率,打印到终端。了解更多开源信息,请访问:51CTO开源基础软件社区https://ost.51cto.com。