OpenHarmony 有兩種編譯方式,一種是通過 hb 工具編譯,一種是通過 build.sh 腳本編譯。本文筆者將提升 build.sh 方式編譯速度的方法整理分享給大家。
因?yàn)楣P者只用 build.sh 腳本編譯,沒用過 hb 工具,好像下面的選項(xiàng)也可以用于 hb 工具。
在 OpenHarmony 源碼中執(zhí)行 ./build.sh --h,會(huì)打印出 ./build.sh 中可以添加的所有選項(xiàng)。
$./build.sh-h ++++++++++++++++++++++++++++++++++++++++ Thesystemshellisbash4.4.20(1)-release ++++++++++++++++++++++++++++++++++++++++ 2023-02-0712:58:04 -h Usage:entry.py[options] Options: -h,--helpshowthishelpmessageandexit --source-root-dir=SOURCE_ROOT_DIR --product-name=PRODUCT_NAME --device-name=DEVICE_NAME --target-cpu=TARGET_CPU --target-os=TARGET_OS --compile-config=COMPILE_CONFIG -TBUILD_TARGET,--build-target=BUILD_TARGET --gn-args=GN_ARGS --ninja-args=NINJA_ARGS -v,--verbose --keep-ninja-going --sparse-image --jobs=JOBS --export-para=EXPORT_PARA --build-only-gn --ccache --fast-rebuild --disable-package-image --disable-post-build --disable-part-of-post-build=DISABLE_PART_OF_POST_BUILD --log-level=LOG_LEVEL --device-type=DEVICE_TYPE --build-variant=BUILD_VARIANT --share-ccache=SHARE_CCACHE =====buildsuccessful=====
提升OpenHarmony 編譯速度的選項(xiàng)
build.sh 腳本編譯 rk3568 方式命令如下:
./build.sh--product-namerk3568--ccache通過在該命令后添加如下選項(xiàng)提升編譯速度。
①添加 --disable-post-build 參數(shù)
取消 Postbuild 過程,最后的 ninja trace 解析、每個(gè)子系統(tǒng)(不包括源碼中的 third_party 部分)的 rom size 統(tǒng)計(jì)等動(dòng)作會(huì)沒有(每個(gè)子系統(tǒng)部件描述文件名稱為 bundle.json,里面定義了子系統(tǒng)的名稱。)
提供支持 disable post build 參數(shù)是怎么做的:
https://gitee.com/openharmony/build/issues/I5MT9X
./build.sh--product-namerk3568--disable-post-build
②添加 --disable-package-image 參數(shù)
取消最后所有的 image 鏡像文件壓縮成 tar 包的動(dòng)作,tar 包位置 out k3568images.tar.gz。
./build.sh--product-namerk3568--disable-package-image
③添加 --ccache 參數(shù)
ccache 會(huì)緩存 c/c++ 編譯的編譯輸出,下一次在編譯輸入不變的情況下,直接復(fù)用緩存的產(chǎn)物。用來緩存編譯過的 .o 文件等。
執(zhí)行 sudo apt-get install ccache 命令安裝 ccache。
再在 --ccache 后添加 export CCACHE_NOHASHDIR=“true” 和 export CCACHE_SLOPPINESS=“include_file_ctime”(設(shè)置 ccache 在做 hash 的時(shí)候不 hash 路徑、不檢查文件的 change time)
./build.sh--product-namerk3568--ccacheexportCCACHE_NOHASHDIR="true"exportCCACHE_SLOPPINESS="include_file_ctime"
④添加 --fast-rebuild 參數(shù)
編譯流程主要分為:preloader->loader->gn->ninja 這四個(gè)過程,添加后直接基于已有 out/rk3568/build.ninja 直接執(zhí)行編譯鏈接步驟,跳過前面的產(chǎn)品配置解析和 gn 解析,在 gn 相關(guān)腳本沒有發(fā)生改變的前提下使用。
./build.sh--product-namerk3568--fast-rebuild
⑤添加 --gn-args enable_notice_collection=false 參數(shù)
notice file 的搜集用于產(chǎn)品化的 LICENSE 生成,取消收集開源 notice 的過程,在非產(chǎn)品化場(chǎng)景開發(fā)態(tài)可關(guān)閉,提升編譯速度,節(jié)省編譯~7% 時(shí)間。
OpenHarmony 開源軟件 Notice 收集策略說明:
https://gitee.com/openharmony/build/blob/master/docs/%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6Notice%E6%94%B6%E9%9B%86%E7%AD%96%E7%95%A5%E8%AF%B4%E6%98%8E.md
./build.sh--product-namerk3568--gn-argsenable_notice_collection=false
⑥添加 --build-only-gn 參數(shù)
重新執(zhí)行 Preloader、loader、gn,不進(jìn)行最后的編譯動(dòng)作。
編譯流程主要分為:preloader->loader->gn->ninja 這四個(gè)過程,標(biāo)準(zhǔn)系統(tǒng)的編譯構(gòu)建過程請(qǐng)參考:
https://ost.51cto.com/posts/13594
⑦添加 --build-target 參數(shù)
該參數(shù)用于指定編譯模塊。
如何找模塊的名字:
相關(guān)倉(cāng)下 BUILD.gn 中關(guān)注 group、ohos_shared_library、ohos_executable 等關(guān)鍵字。
./build.sh --product-name 產(chǎn)品名 --build-target 模塊名 --build-only-gn 生成 build.ninja,然后去該文件中查找相關(guān)模塊名。
⑧添加 --gn-args enable_lto_O0=true 參數(shù)
在鏈接的時(shí)候會(huì)減弱優(yōu)化的等級(jí),建議在只考慮編譯是否成功的時(shí)候使用(會(huì)影響最后的 so 的性能和 rom 大小)
⑨添加 --gn-args archive_ndk=false 參數(shù)
編譯 sdk 的時(shí)候不執(zhí)行輸出壓縮包的動(dòng)作。
⑩添加 export NO_DEVTOOL=1 參數(shù)
取消 webpack 打包過程中生成 sourcemap 的動(dòng)作。
?添加 --gn-args skip_generate_module_list_file=true 參數(shù)
跳過為 test 生成記錄文件的過程,節(jié)省 gn 解析的過程,只要不跑 tdd 測(cè)試用例,這個(gè)參數(shù)都可以加上,編譯 tdd 用例也沒關(guān)系。
?添加 -T packages --gn-args skip_gen_module_info=true 參數(shù)
在不編譯 image 的時(shí)候:
-Tpackages--gn-argsskip_gen_module_info=true去掉 gn階段 module info 的生成。
./build.sh--product-namerk3568--build-target模塊名-Tpackages--gn-argsskip_gen_module_info=true
?添加 --gn-args load_test_config=false 參數(shù)
在不編譯 test 用例的時(shí)候加上 --gn-args load_test_config=false,來去掉 gn 階段 test 相關(guān)編譯目標(biāo)的解析。
以上參數(shù)可疊加使用,例如全量編譯,筆者使用下面這條命令編譯速度提升了 120%:
./build.sh--product-namerk3568--disable-post-build--disable-package-image--gn-argsenable_notice_collection=false--gn-argsload_test_config=false
添加 --fast-rebuild 參數(shù),方式等效于執(zhí)行 ninja -C
首先用 ./build.sh 全量編譯,然后在源碼下執(zhí)行 ninja -C out/rk3568 moduleb_lib(編譯對(duì)象模塊)
#例如編譯wukong部件的二進(jìn)制可執(zhí)行文件wukong #將gn和ninja可執(zhí)行文件添加到PATH環(huán)境變量的方法(臨時(shí)改變,只能在當(dāng)前的終端窗口中有效) exportPATH=$PATH:/home/jiajiahao/ohos3.2beta4/sources/prebuilts/build-tools/linux-x86/bin #然后在源碼目錄下執(zhí)行如下語句 ninja-Cout/rk3568wukong
#例如編譯ace_napi部件的動(dòng)態(tài)庫(kù)libace_napi.z.so #將gn和ninja可執(zhí)行文件添加到PATH環(huán)境變量的方法(臨時(shí)改變,只能在當(dāng)前的終端窗口中有效) exportPATH=$PATH:/home/jiajiahao/ohos3.2beta4/sources/prebuilts/build-tools/linux-x86/bin #然后在源碼目錄下執(zhí)行如下語句 ninja-Cout/rk3568ace_napi
將 gn 和 ninja 可執(zhí)行文件添加到 PATH 環(huán)境變量的方法
將 gn 和 ninja 可執(zhí)行文件添加到 PATH 環(huán)境變量的方法(臨時(shí)改變,只能在當(dāng)前的終端窗口中有效)
exportPATH=$PATH:/home/jiajiahao/ohos3.2beta4/sources/prebuilts/build-tools/linux-x86/bin
notice file 是否收集的編譯選項(xiàng)–gn-args enable_notice_collection=false 是如何支持的。
相關(guān) PR:
https://gitee.com/openharmony/build/pulls/772/files指定編譯期間的日志級(jí)別
在 OpenHarmony 的 build.sh 里通過 –log-level 可以指定編譯期間的日志級(jí)別,三個(gè)級(jí)別可選:debug,info 和 error,默認(rèn)值是 info。
./build.sh--product-namerk3568--ccache--log-level=debug
本地打開 ninja trace:解壓 out/rk3568/build.trace.gz,將 build.trace 拖到 chrome 的 trace 鏈接 chrome://tracing/ 打開即可。
-
模塊
+關(guān)注
關(guān)注
7文章
2716瀏覽量
47526 -
參數(shù)
+關(guān)注
關(guān)注
11文章
1838瀏覽量
32261 -
編譯
+關(guān)注
關(guān)注
0文章
659瀏覽量
32890 -
腳本
+關(guān)注
關(guān)注
1文章
390瀏覽量
14880 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3725瀏覽量
16369
原文標(biāo)題:如何讓OpenHarmony編譯速度“狂飆”
文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論