-
_target_generate()
源码:
def _target_generate(self):
self._run_phase(BuildPhase.TARGET_GENERATE)
if self.args_dict.get('fast_rebuild', None) and not self.args_dict.get("fast_rebuild").arg_value:
self.target_generator.run()
调用_run_phase()解析TARGET_GENERATE阶段的参数。
如果存在fast_rebuild参数,则跳过随后的target_generator过程。
执行target_generator的run()。
TARGET_GENERATE阶段的参数如下:
参数名称 | 说明 | 默认值 |
build-type | 指定编译发布或调试版本 | release |
log-level | 日志级别,可选info或debug,在调试模式下,显示所有构建命令,包括cxx、、link、solink等 | info |
export-para | 废弃 | 空 |
test | 选择测试类型,比如xts | 空 |
gn-args | 指定gn构建参数。例如is_debug=true | 空 |
gn-flags | 指定gn构建标志。例如"--export-compile-commands" | 空 |
compiler | 废弃 | clang |
fast-rebuild | 是否跳过准备阶段,当gn脚本未修改时使用可加快编译速度 | false |
runtime-mode | 运行时模式,可选release、debug、profile | release |
-
-
参数解析
-
-
-
build-type:resolve_build_type()
-
如果类型是debug,则target_generator添加is_debug=true参数
如果类型是profile,则target_generator添加is_profile=true参数
-
-
-
log-level:resolve_log_level()
-
-
如果level是debug,则target_generator添加-v、--tracelog、--ide三个参数,target_compiler添加-v参数。
-
-
-
export-para:resolve_export_para()
-
-
废弃
-
-
- test:resolve_test()
-
target_generator注册ohos_xts_test_args或ohos_test_args参数
-
-
-
gn-args:resolve_gn_args()
-
-
解析传入参数,target_generator注册对应的参数
-
-
- gn-flags:resolve_gn_flags()
-
target_generator注册gn_flags参数
-
-
-
compiler:resolve_compiler()
-
-
空
-
-
-
fast-rebuild:resolve_fast_rebuild()
-
-
空
-
-
-
runtime-mode:resolve_runtime_mode()
-
-
target_generator注册runtime_mode参数
-
-
服务
-
调用target_generator.run()
def run(self):
self.execute_gn_cmd(CMDTYPE.GEN)
源码build/hb/services/gn.py,执行gn gen命令:
prebuilts/build-tools/linux-x86/bin/gn gen --args="......" out/rk3568
其中--args中包含有全部参数的值。完整命令如下:
/home/pan/work/40release/prebuilts/build-tools/linux-x86/bin/gn gen --args="product_name=\"rk3568\" product_path=\"/home/pan/work/40release/vendor/hihope/rk3568\" product_config_path=\"/home/pan/work/40release/vendor/hihope/rk3568\" device_name=\"rk3568\" device_path=\"/home/pan/work/40release/device/board/rockchip/rk3568\" device_company=\"rockchip\" device_config_path=\"/home/pan/work/40release/device/board/rockchip/rk3568\" target_cpu=\"arm\" is_standard_system=true ohos_build_compiler_specified=\"\" ohos_build_time=1713944488022 ohos_build_datetime=\"2024-04-24 23:41:28\" ace_engine_feature_enable_accessibility=true ace_engine_feature_enable_web=true datamgr_service_udmf=true enable_ohos_startup_init_feature_ab_partition=true enable_ohos_startup_init_feature_loader=true dsoftbus_feature_conn_p2p=true dsoftbus_feature_disc_ble=true dsoftbus_feature_conn_br=true dsoftbus_feature_conn_ble=true dsoftbus_feature_trans_udp_stream=true wifi_feature_non_seperate_p2p=true wifi_feature_non_hdf_driver=true graphic_2d_feature_rs_enable_eglimage=true audio_framework_feature_dtmf_tone=true audio_framework_feature_opensl_es=true input_feature_combination_key=true input_feature_pointer_drawing=true input_feature_interceptor=true input_feature_monitor=true input_feature_keyboard=true input_feature_mouse=true input_feature_touchscreen=true input_feature_input_device=true wpa_supplicant_driver_nl80211=true memmgr_purgeable_memory=true fusion_interaction_coordination=false hdf_core_platform_test_support=true drivers_peripheral_input_feature_model=true drivers_peripheral_display_community=true drivers_peripheral_wlan_feature_enable_HDF_NL80211=true drivers_peripheral_wlan_feature_enable_HDF_UT=false drivers_peripheral_sensor_feature_model=true drivers_peripheral_audio_feature_full_test_suite=true drivers_peripheral_audio_feature_alsa_lib=false drivers_peripheral_audio_feature_effect=true drivers_peripheral_light_feature_model=true drivers_peripheral_vibrator_feature_model=true drivers_peripheral_codec_feature_support_omx_extend_test=true drivers_peripheral_codec_feature_support_hdi_v1=true use_ffrt=true ohos_build_enable_ccache=true ohos_build_type=\"debug\" device_type=\"default\" build_variant=\"root\" runtime_mode=\"release\"" /home/pan/work/40release/out/rk3568
gn命令执行时间较长,执行完毕后,生成了大量文件,主要的文件或目录如下:
./out/rk3568
├── args.gn #编译参数
├── build.ninja #ninja编译规则脚本
├── build.ninja.d #文件依赖关系
├── clang_x64 #clang编译x64架构输出文件
├── gen #生成的源文件、配置等
├── mingw_x86_64 #mingw编译输出文件
├── module_list_files #各子系统部件的mlf文件
├── obj #各子系统部件的子ninja文件
└── toolchain.ninja #编译工具链
-
_post_target_generate()
源码:
def _post_target_generate(self):
self._run_phase(BuildPhase.POST_TARGET_GENERATE)
无参数解析
-
_pre_target_compilation()
源码:
def _pre_target_compilation(self):
self._run_phase(BuildPhase.PRE_TARGET_COMPILATION)
无参数解析