在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何讓OpenHarmony編譯速度“狂飆”

OpenHarmony技術社區 ? 來源:OST開源開發者 ? 作者:OST開源開發者 ? 2023-02-14 09:31 ? 次閱讀

OpenHarmony 有兩種編譯方式,一種是通過 hb 工具編譯,一種是通過 build.sh 腳本編譯。本文筆者將提升 build.sh 方式編譯速度的方法整理分享給大家。

因為筆者只用 build.sh 腳本編譯,沒用過 hb 工具,好像下面的選項也可以用于 hb 工具。

在 OpenHarmony 源碼中執行 ./build.sh --h,會打印出 ./build.sh 中可以添加的所有選項。

$./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 編譯速度的選項

build.sh 腳本編譯 rk3568 方式命令如下:

./build.sh--product-namerk3568--ccache
通過在該命令后添加如下選項提升編譯速度。

①添加 --disable-post-build 參數

取消 Postbuild 過程,最后的 ninja trace 解析、每個子系統(不包括源碼中的 third_party 部分)的 rom size 統計等動作會沒有(每個子系統部件描述文件名稱為 bundle.json,里面定義了子系統的名稱。)

提供支持 disable post build 參數是怎么做的:

https://gitee.com/openharmony/build/issues/I5MT9X
./build.sh--product-namerk3568--disable-post-build

e6831752-ab9b-11ed-bfe3-dac502259ad0.png

②添加 --disable-package-image 參數

取消最后所有的 image 鏡像文件壓縮成 tar 包的動作,tar 包位置 out k3568images.tar.gz。

./build.sh--product-namerk3568--disable-package-image

③添加 --ccache 參數

ccache 會緩存 c/c++ 編譯的編譯輸出,下一次在編譯輸入不變的情況下,直接復用緩存的產物。用來緩存編譯過的 .o 文件等。

執行 sudo apt-get install ccache 命令安裝 ccache。

再在 --ccache 后添加 export CCACHE_NOHASHDIR=“true” 和 export CCACHE_SLOPPINESS=“include_file_ctime”(設置 ccache 在做 hash 的時候不 hash 路徑、不檢查文件的 change time)

./build.sh--product-namerk3568--ccacheexportCCACHE_NOHASHDIR="true"exportCCACHE_SLOPPINESS="include_file_ctime"
e6af5128-ab9b-11ed-bfe3-dac502259ad0.png

④添加 --fast-rebuild 參數

編譯流程主要分為:preloader->loader->gn->ninja 這四個過程,添加后直接基于已有 out/rk3568/build.ninja 直接執行編譯鏈接步驟,跳過前面的產品配置解析和 gn 解析,在 gn 相關腳本沒有發生改變的前提下使用。

./build.sh--product-namerk3568--fast-rebuild
e6c9b388-ab9b-11ed-bfe3-dac502259ad0.jpg

⑤添加 --gn-args enable_notice_collection=false 參數

notice file 的搜集用于產品化的 LICENSE 生成,取消收集開源 notice 的過程,在非產品化場景開發態可關閉,提升編譯速度,節省編譯~7% 時間。

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 參數

重新執行 Preloader、loader、gn,不進行最后的編譯動作。

編譯流程主要分為:preloader->loader->gn->ninja 這四個過程,標準系統的編譯構建過程請參考:

https://ost.51cto.com/posts/13594

⑦添加 --build-target 參數

該參數用于指定編譯模塊。

如何找模塊的名字:

相關倉下 BUILD.gn 中關注 group、ohos_shared_library、ohos_executable 等關鍵字。

./build.sh --product-name 產品名 --build-target 模塊名 --build-only-gn 生成 build.ninja,然后去該文件中查找相關模塊名。

⑧添加 --gn-args enable_lto_O0=true 參數

在鏈接的時候會減弱優化的等級,建議在只考慮編譯是否成功的時候使用(會影響最后的 so 的性能和 rom 大?。?/p>

⑨添加 --gn-args archive_ndk=false 參數

編譯 sdk 的時候不執行輸出壓縮包的動作。

⑩添加 export NO_DEVTOOL=1 參數

取消 webpack 打包過程中生成 sourcemap 的動作。

?添加 --gn-args skip_generate_module_list_file=true 參數

跳過為 test 生成記錄文件的過程,節省 gn 解析的過程,只要不跑 tdd 測試用例,這個參數都可以加上,編譯 tdd 用例也沒關系。

?添加 -T packages --gn-args skip_gen_module_info=true 參數

在不編譯 image 的時候:

-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 參數

在不編譯 test 用例的時候加上 --gn-args load_test_config=false,來去掉 gn 階段 test 相關編譯目標的解析。

以上參數可疊加使用,例如全量編譯,筆者使用下面這條命令編譯速度提升了 120%:

./build.sh--product-namerk3568--disable-post-build--disable-package-image--gn-argsenable_notice_collection=false--gn-argsload_test_config=false

添加 --fast-rebuild 參數,方式等效于執行 ninja -C

首先用 ./build.sh 全量編譯,然后在源碼下執行 ninja -C out/rk3568 moduleb_lib(編譯對象模塊)

#例如編譯wukong部件的二進制可執行文件wukong
#將gn和ninja可執行文件添加到PATH環境變量的方法(臨時改變,只能在當前的終端窗口中有效)
exportPATH=$PATH:/home/jiajiahao/ohos3.2beta4/sources/prebuilts/build-tools/linux-x86/bin
#然后在源碼目錄下執行如下語句
ninja-Cout/rk3568wukong
e6ff5470-ab9b-11ed-bfe3-dac502259ad0.png
#例如編譯ace_napi部件的動態庫libace_napi.z.so
#將gn和ninja可執行文件添加到PATH環境變量的方法(臨時改變,只能在當前的終端窗口中有效)
exportPATH=$PATH:/home/jiajiahao/ohos3.2beta4/sources/prebuilts/build-tools/linux-x86/bin
#然后在源碼目錄下執行如下語句
ninja-Cout/rk3568ace_napi

e71cb2fe-ab9b-11ed-bfe3-dac502259ad0.png

將 gn 和 ninja 可執行文件添加到 PATH 環境變量的方法

將 gn 和 ninja 可執行文件添加到 PATH 環境變量的方法(臨時改變,只能在當前的終端窗口中有效)

exportPATH=$PATH:/home/jiajiahao/ohos3.2beta4/sources/prebuilts/build-tools/linux-x86/bin

notice file 是否收集的編譯選項–gn-args enable_notice_collection=false 是如何支持的。

相關 PR:

https://gitee.com/openharmony/build/pulls/772/files
指定編譯期間的日志級別

在 OpenHarmony 的 build.sh 里通過 –log-level 可以指定編譯期間的日志級別,三個級別可選:debug,info 和 error,默認值是 info。
./build.sh--product-namerk3568--ccache--log-level=debug

本地打開 ninja trace:解壓 out/rk3568/build.trace.gz,將 build.trace 拖到 chrome 的 trace 鏈接 chrome://tracing/ 打開即可。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2735

    瀏覽量

    47751
  • 參數
    +關注

    關注

    11

    文章

    1860

    瀏覽量

    32428
  • 編譯
    +關注

    關注

    0

    文章

    661

    瀏覽量

    33043
  • 腳本
    +關注

    關注

    1

    文章

    392

    瀏覽量

    14938
  • OpenHarmony
    +關注

    關注

    25

    文章

    3747

    瀏覽量

    16588

原文標題:如何讓OpenHarmony編譯速度“狂飆”

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    鴻蒙OpenHarmony【輕量系統 編譯】 (基于Hi3861開發板)

    OpenHarmony支持hb和build.sh兩種編譯方式。此處介紹hb方式,build.sh腳本編譯方式請參考[使用build.sh腳本編譯源碼]。
    的頭像 發表于 05-14 17:53 ?1416次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b>【輕量系統 <b class='flag-5'>編譯</b>】 (基于Hi3861開發板)

    鴻蒙OpenHarmony【小型系統 編譯】(基于Hi3516開發板)

    OpenHarmony支持hb和build.sh兩種編譯方式。此處介紹hb方式,build.sh腳本編譯方式請參考[使用build.sh腳本編譯源碼]。
    的頭像 發表于 05-10 15:59 ?769次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b>【小型系統 <b class='flag-5'>編譯</b>】(基于Hi3516開發板)

    OpenHarmony 2.0 Canary 編譯的坑

    文章轉載自:liangkz這兩天在嘗鮮OpenHarmony2.0 Canary,根據官方文檔做了相關配置和編譯,確認OK,詳情可見其他人分享的文章,這里我僅對我踩過的幾個坑,做一下簡單的總結。1.
    發表于 04-18 10:06

    OpenHarmony開發——系統源碼編譯

    背景隨著OpenHarmony-v3.1的發布,越來越多的開發者將目光聚焦到OpenHarmony系統開發上。對于首次接觸OpenHarmony的開發者來說,如何進行源碼編譯是一個大難
    發表于 08-30 10:08

    如何OpenHarmony編譯速度狂飆

    OpenHarmony有兩種編譯方式,一種是通過hb工具編譯,一種是通過build.sh腳本編譯。本文筆者將提升build.sh方式編譯
    發表于 02-07 13:06

    Windows搭建OpenHarmony編譯環境

    由于OpenHarmony編譯工具鏈主要是建立在Linux操作系統下,如需要編譯OpenHarony內核則需要搭建虛擬機等工序,相對比較繁瑣。那么,是否可以在Windows操作系統上實現
    發表于 08-16 16:07

    編譯openharmony環境

    OpenHarmony是由開放原子開源基金會(OpenAtom Foundation)孵化及運營的開源項目,當前的OpenHarmony源代碼僅支持在Linux環境下編譯。 開源代碼倉庫地址
    的頭像 發表于 06-23 15:29 ?1424次閱讀
    <b class='flag-5'>編譯</b><b class='flag-5'>openharmony</b>環境

    華為開發者大會openharmony3.0特性ARK3.0編譯及運行

    openharmony3.0重點特性簡介ARK3.0編譯及運行 在2021華為開發者大會上,OpenHarmony分論壇介紹了openharmony3.0重點特性簡介ARK3.0
    的頭像 發表于 10-23 13:16 ?1210次閱讀
    華為開發者大會<b class='flag-5'>openharmony</b>3.0特性ARK3.0<b class='flag-5'>編譯</b>及運行

    openharmony3.0重點特性簡介ARK3.0編譯及運行

    openharmony3.0重點特性簡介ARK3.0編譯及運行 今天的2021華為開發者大會上,OpenHarmony分論壇上展示了openharmony3.0重點特性簡介ARK3.0
    的頭像 發表于 10-23 13:53 ?1557次閱讀
    <b class='flag-5'>openharmony</b>3.0重點特性簡介ARK3.0<b class='flag-5'>編譯</b>及運行

    詳解OpenHarmony編譯和燒錄

    在上一篇【博流 BL-HWC-G1 開發板試用】開箱及編譯燒錄官方程序(BL602 IoT SDK)中,我們講了這塊開發板使用官方SDK進行編譯燒錄,這一篇,我們來講OpenHarmony
    的頭像 發表于 11-08 09:58 ?5640次閱讀
    詳解<b class='flag-5'>OpenHarmony</b>的<b class='flag-5'>編譯</b>和燒錄

    大咖教你如何編譯OpenHarmony并燒錄到開發板

    在上一篇【博流 BL-HWC-G1 開發板試用】開箱及編譯燒錄官方程序(BL602 IoT SDK)中,我們講了這塊開發板使用官方SDK進行編譯燒錄,這一篇,我們來講OpenHarmony
    的頭像 發表于 12-01 16:56 ?3810次閱讀
    大咖教你如何<b class='flag-5'>編譯</b><b class='flag-5'>OpenHarmony</b>并燒錄到開發板

    OpenHarmony應用的編譯構建過程

    2022 年 3 月 31 日發布了最新的 IDE 工具 DevEco Studio 3.0 Beta3,仔細閱讀文檔后發現最新 OpenHarmony 應用的編譯構建過程已經公開。
    的頭像 發表于 04-21 08:13 ?3980次閱讀

    Windows搭建OpenHarmony編譯環境

    由于OpenHarmony編譯工具鏈主要是建立在Linux操作系統下,如需要編譯OpenHarony內核則需要搭建虛擬機等工序,相對比較繁瑣。那么,是否可以在Windows操作系統上實現
    的頭像 發表于 08-09 08:26 ?1702次閱讀
    Windows搭建<b class='flag-5'>OpenHarmony</b><b class='flag-5'>編譯</b>環境

    鴻蒙OpenHarmony【標準系統 編譯】(基于RK3568開發板)

    OpenHarmony支持hb和build.sh兩種編譯方式。此處介紹hb方式,build.sh腳本編譯方式請參考[使用build.sh腳本編譯源碼]。
    的頭像 發表于 05-08 17:37 ?1362次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b>【標準系統 <b class='flag-5'>編譯</b>】(基于RK3568開發板)

    鴻蒙OpenHarmony開發:【編譯構建指導】

    OpenHarmony編譯子系統是以GN和Ninja構建為基座,對構建和配置粒度進行部件化抽象、對內建模塊進行功能增強、對業務模塊進行功能擴展的系統,該系統提供以下基本功能
    的頭像 發表于 05-13 09:31 ?1964次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b>開發:【<b class='flag-5'>編譯</b>構建指導】
    主站蜘蛛池模板: 美女视频网站色软件免费视频 | 九九99久久精品午夜剧场免费 | 亚洲精品九色在线网站 | 伊人99| 大香伊在人线免费 | 免费jlzzjlzz在线播放视频 | 久久精品香蕉视频 | 成人xx视频免费观看 | 亚色在线观看 | 午夜神马福利影院 | 天堂网最新版中文 | 精品久久久久久中文字幕欧美 | 35pao强力 | 色多多福利网站 | 一区二区三区精品视频 | 97一本大道波多野吉衣 | 亚洲国产成人久久精品图片 | 华人黄网站大全 | 国产伦理一区二区三区 | 午夜性 | 日本不卡视频免费 | 欧美性色xo影院永久禁欲 | 久久久噜噜噜 | 久久亚洲成人 | 亚洲性久久久影院 | 欧美激情综合色综合啪啪五月 | 真实偷清晰对白在线视频 | 华人永久免费视频 | 2019偷偷狠狠的日日 | 天堂网www | 久久这里只有精品任你色 | 亚洲深夜 | 美女扒开尿口给男人爽免费视频 | 日本在线一级 | 四虎影视色费永久在线观看 | 精品视频一区二区三区四区五区 | 91在线免费看 | 视频在线免费观看网址 | 女人被狂躁视频免费网站 | 午夜看片影院在线观看 | 午夜黄色在线观看 |