自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

OpenHarmony 2.0 Canary 標(biāo)準(zhǔn)系統(tǒng)的編譯流程

系統(tǒng)
打開(kāi)preloader.py腳本看一下,描述的是如何根據(jù)上面的顯式參數(shù),以及各種隱式的環(huán)境變量參數(shù)等,經(jīng)過(guò)判斷和組合,一步步生成out/build_configs/目錄下的各個(gè)配置文件,這些配置文件將作為后繼編譯步驟的基礎(chǔ)參數(shù)被使用。

[[424363]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

標(biāo)準(zhǔn)系統(tǒng)的編譯入口是代碼根目錄下的build.sh,指令是:

./build.sh --product-name Hi3516DV300 --ccache

【1】打開(kāi)build.sh腳本查看

  1. source_root_dir="${script_path}" 
  2.  
  3. while [[ ! -f "${source_root_dir}/.gn" ]]; do 

這一小段是在build.sh腳本所在目錄下找到.gn文件,將其內(nèi)容添加到當(dāng)前的編譯環(huán)境中。

接下來(lái)執(zhí)行tools_checker.py腳本,檢查操作系統(tǒng)以及編譯依賴(lài)工具是否滿(mǎn)足需要。

再帶參數(shù)執(zhí)行preloader.py腳本:

  1. ${PYTHON3} ${source_root_dir}/build/loader/preloader/preloader.py \ 
  2.  
  3.   --product-name ${product_name} \ 
  4.  
  5.   --source-root-dir ${source_root_dir} \ 
  6.  
  7.   --products-config-dir "productdefine/common/products" \ 
  8.  
  9.   --preloader-output-root-dir "out/build_configs" 

前兩個(gè)參數(shù)分別是產(chǎn)品名字“Hi3516DV300 ”和源代碼根目錄,第三個(gè)參數(shù),是預(yù)定義的產(chǎn)品配置表Hi3516DV300.json的存放路徑,第四個(gè)參數(shù)是preloader.py腳本執(zhí)行的輸出目錄。

打開(kāi)preloader.py腳本看一下,描述的是如何根據(jù)上面的顯式參數(shù),以及各種隱式的環(huán)境變量參數(shù)等,經(jīng)過(guò)判斷和組合,一步步生成out/build_configs/目錄下的各個(gè)配置文件,這些配置文件將作為后繼編譯步驟的基礎(chǔ)參數(shù)被使用。

再接下來(lái)就是帶參數(shù)執(zhí)行build_standard.sh開(kāi)始正式編譯了

  1. ${source_root_dir}/build/build_scripts/build_${system_type}.sh \ 
  2.  
  3.   --product-name ${product_name} \ 
  4.  
  5.   --device-name ${device_name} \ 
  6.  
  7.   --target-os ${target_os} \ 
  8.  
  9.   --target-cpu ${target_cpu} \ 
  10.  
  11.   ${build_params} 

build_standard.sh執(zhí)行完了,要么編譯成功,要么編譯失敗。

【2】打開(kāi)build_standard.sh腳本查看

  1. source ${script_path}/parse_params.sh 
  2.  
  3. system_type="standard" 
  4.  
  5. source ${script_path}/build_common.sh 
  6.  
  7. do_make_ohos 

分別是用parse_params.sh分析參數(shù),將build_common.sh引入并執(zhí)行其中的do_make_ohos()函數(shù)。

【3】打開(kāi)build_common.sh查看do_make_ohos()

也只做了一件事,為build_ohos.sh收集一組參數(shù),最后執(zhí)行build_ohos.sh:

  1. build_ohos_cmd: build/build_scripts/build_ohos.sh product_name=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true build_target=images 

【4】打開(kāi)build_ohos.sh查看

  1. source ${BUILD_SCRIPT_DIR}/pre_process.sh 
  2.  
  3.    pre_process "$@" 
  4.  
  5.    source ${BUILD_SCRIPT_DIR}/make_main.sh 
  6.  
  7.    do_make "$@" 
  8.  
  9.    source ${BUILD_SCRIPT_DIR}/post_process.sh 
  10.  
  11.    post_process "$@" 

分三步走:

【4.1】引入//build/core/build_scripts/pre_process.sh并執(zhí)行pre_process(),主要是參數(shù)的分析和處理。

【4.2】引入//build/core/build_scripts/make_main.sh并執(zhí)行do_make(),這里才是真正的編譯主體,包括了生成build.log、gn、ninja等具體的編譯步驟。

【4.3】引入//build/core/build_scripts/post_process.sh并執(zhí)行post_process(),這是完成編譯后的收尾處理,或者操作“CTRL+C”中斷編譯的后期處理,包括了計(jì)算編譯時(shí)間,更新pycache/ccache狀態(tài),統(tǒng)計(jì)并打印編譯數(shù)據(jù)等。

【5】打開(kāi)make_main.sh查看,也可分為三步:

【5.1】生成build.log文件

  1. prepare to save build log 
  2.  
  3. LOG_FILE=${TARGET_OUT_DIR}/build.log 
  4.  
  5. log_prepare $LOG_FILE 
  6.  
  7. log "$@" 

這里生成out/ohos-arm-release/build.log文件,這個(gè)文件第一句話(huà)就是log "$@"打印出來(lái)的執(zhí)行參數(shù):

  1. product_name=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true build_target=images 

在此之前,所有腳本的執(zhí)行信息,都是echo到終端上顯示而已,并不會(huì)記錄到這個(gè)log中。

【5.2】接下來(lái)引入get_gn_parameters.sh并執(zhí)行g(shù)et_gn_parameters()來(lái)收集一組參數(shù),并執(zhí)行g(shù)n gen命令:

  1. source ${BUILD_SCRIPT_DIR}/get_gn_parameters.sh 
  2.  
  3.  get_gn_parameters 
  4.  
  5.  
  6.  
  7.  if [ "${SKIP_GN_PARSE}"x = falsex ]; then 
  8.  
  9.      ${BUILD_TOOLS_DIR}/gn gen ${TARGET_OUT_DIR} \ 
  10.  
  11.          --args="target_os=\"${TARGET_OS}\" target_cpu=\"${TARGET_ARCH}\" is_debug=false \ 
  12.  
  13.          product_name=\"${PRODUCT_NAME}\" \ 
  14.  
  15.          is_component_build=true \ 
  16.  
  17.          ${GN_ARGS} ${TEST_BUILD_PARA_STRING}  ${IS_ASAN} \ 
  18.  
  19.          release_test_suite=${RELEASE_TEST_SUITE}" 2>&1 | tee -a $log 
  20.  
  21.  fi 

執(zhí)行g(shù)n gen命令,將會(huì)按.gn文件的root = "//build/core/gn" 參數(shù),將//build/core/gn/BUILD.gn文件作為編譯入口,從此開(kāi)始進(jìn)入相關(guān)依賴(lài)關(guān)系的遞歸查找和執(zhí)行BUILD.gn,最終在out目錄相應(yīng)的地方生成ninja文件。

//build/core/gn/BUILD.gn 引入load.py并執(zhí)行它,做了非常多的重要工作,生成//out/ohos-arm-release/build_configs/ 目錄下的所有內(nèi)容,詳情請(qǐng)自行跟蹤和分析一下。

  1. build_loader_script = rebase_path("//build/loader/load.py"
  2.  
  3. load_result = exec_script(build_loader_script, arguments, "string"

【5.3】接下來(lái)收集ninja的編譯參數(shù),并運(yùn)行ninja開(kāi)始編譯,根據(jù)編譯規(guī)則生成中間文件和最終的燒錄鏡像文件,編譯過(guò)程也全部記錄在log中。

  1.   ninja_build_args="--source-root-dir ${BASE_HOME} --root-build-dir ${TARGET_OUT_DIR} \ 
  2.  
  3.             --build-target-name ${BUILD_TARGET_NAME}" 
  4.  
  5.     if [ "${TARGET_PLATFORM}" != "" ];then 
  6.  
  7.         ninja_build_args="$ninja_build_args --target-platform ${TARGET_PLATFORM}" 
  8.  
  9.     fi 
  10.  
  11.     real_build_target=$(python ${BASE_HOME}/build/scripts/build_target_handler.py $ninja_build_args) 
  12.  
  13. ${BUILD_TOOLS_DIR}/ninja -d keepdepfile -C ${TARGET_OUT_DIR} ${real_build_target} ${NINJA_ARGS} 2>&1 | tee -a $log 

Ninja執(zhí)行完畢,編譯也就完成了,執(zhí)行【4.3】//build/core/build_scripts/post_process.sh完成編譯的后期處理。

【附件是經(jīng)過(guò)處理的部分編譯的log】

https://harmonyos.51cto.com/resource/1204

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2021-06-28 09:38:50

鴻蒙HarmonyOS應(yīng)用

2021-07-02 14:16:04

鴻蒙HarmonyOS應(yīng)用

2023-02-01 16:28:30

Linux內(nèi)核鴻蒙

2021-07-19 15:34:05

鴻蒙HarmonyOS應(yīng)用

2021-08-06 15:09:22

鴻蒙HarmonyOS應(yīng)用

2022-04-02 20:45:04

Hi3516開(kāi)發(fā)板操作系統(tǒng)鴻蒙

2022-10-12 15:14:08

開(kāi)機(jī)動(dòng)畫(huà)鴻蒙

2022-09-15 14:56:12

GDB調(diào)試鴻蒙

2021-11-08 07:19:45

鴻蒙HarmonyOS應(yīng)用

2021-10-09 10:12:39

鴻蒙HarmonyOS應(yīng)用

2023-12-29 08:45:40

Python3.8鴻蒙解釋器

2022-06-10 14:37:24

鴻蒙操作系統(tǒng)

2022-09-13 16:10:15

鴻蒙操作系統(tǒng)

2022-09-07 15:08:58

操作系統(tǒng)鴻蒙

2022-09-16 15:01:37

操作系統(tǒng)技術(shù)鴻蒙

2022-09-06 15:46:52

speexdsp鴻蒙

2021-08-13 10:09:36

鴻蒙HarmonyOS應(yīng)用

2023-06-27 15:12:46

C++三方庫(kù)移植

2022-09-14 15:28:19

操作系統(tǒng)鴻蒙

2022-09-15 15:21:22

操作系統(tǒng)鴻蒙
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)