配置完毕产品解决方案、芯片开发板解决方案,就可以执行 hb build进行编译。但是产品解决方案代码是如何被调用编译的?
芯片开发板解决方案代码是如何被调用编译的?内核代码如何被调用编译的?解决了这些疑惑,会对build lite编译构建过程有个更深入的理解。
1、产品解决方案代码是如何被调用编译的
在文件build\lite\BUILD.gn配置文件中的构建目标//build/lite:product的代码片段如下,可以看出产品解决方案是被//build/lite:product调用的。其中⑴处的ohos_build_target,由hb build -T XX 构建参数指定,一般不指定时为空。
group("product") {
deps = []
# build product, skip build single component scenario.
⑴ if (ohos_build_target == "") {
deps += [ "${product_path}" ]
}
}
//build/lite:product 又进一步被什么模块调用?在恒玄的代码配置文件device\soc\bestechnic\bes2600\BUILD.gn中使用了,非恒玄的没有调用//build/lite:product。所以,除了//build/lite:product,还有其他调用编译产品解决方案代码的地方。
以vendor\goodix\gr5515_sk_iotlink_demo为例,来了解下什么地方会调用编译产品解决方案代码。产品解决方案根目录下有文件vendor\goodix\gr5515_sk_iotlink_demo\ohos.build,片段如下。可以看到,有子系统subsystem和部件信息parts。
{
"parts": {
"product_gr5515_sk_iotlink_demo": {
"module_list": [
"//vendor/goodix/gr5515_sk_iotlink_demo:gr5515_sk_iotlink_demo",
"//vendor/goodix/gr5515_sk_iotlink_demo:image"
]
}
},
"subsystem": "product_gr5515_sk_iotlink_demo"
}
在编译构建时,会基于ohos.build文件,解析子系统和部件信息,生成到out\gr5515_sk\gr5515_sk_iotlink_demo\build_configs\parts_info\subsystem_parts.json文件中,片段如下。这些解析出来的子系统和部件信息,编译构建构建hb会组织进行编译构建。
"product_gr5515_sk_iotlink_demo": [
"product_gr5515_sk_iotlink_demo"
],
2、芯片开发板解决方案代码是如何被调用编译的
在文件kernel\liteos_m\BUILD.gn中定义的名为modules构建目标&