成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

系統 OpenHarmony
OpenHarmony有兩種編譯方式,一種是通過hb工具編譯,一種是通過build.sh腳本編譯。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

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

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

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

$ ./build.sh -h
++++++++++++++++++++++++++++++++++++++++
The system shell is bash 4.4.20(1)-release
++++++++++++++++++++++++++++++++++++++++
2023-02-07 12:58:04
-h
Usage: entry.py [options]
Options:
-h, --help show this help message and exit
--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
-T BUILD_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
=====build successful=====

提升OpenHarmony編譯速度的選項

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

./build.sh --product-name rk3568 --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-name rk3568 --disable-post-build

如何讓OpenHarmony編譯速度“狂飆”-開源基礎軟件社區

添加 --disable-package-image參數

取消最后所有的image鏡像文件壓縮成tar包的動作

tar包位置 out\rk3568\images.tar.gz

./build.sh --product-name rk3568 --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-name rk3568 --ccache export CCACHE_NOHASHDIR="true" 
export CCACHE_SLOPPINESS="include_file_ctime"

如何讓OpenHarmony編譯速度“狂飆”-開源基礎軟件社區

添加 --fast-rebuild參數

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

./build.sh --product-name rk3568 --fast-rebuild

如何讓OpenHarmony編譯速度“狂飆”-開源基礎軟件社區

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

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

OpenHarmony開源軟件Notice收集策略說明 https://gitee.com/openharmony/build/blob/master/docs/開源軟件Notice收集策。

./build.sh --product-name rk3568 --gn-args enable_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大小)

添加 --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的時候:-T packages --gn-args skip_gen_module_info=true,去掉gn階段module info的生成

./build.sh --product-name rk3568 --build-target 模塊名 -T packages --gn-args 
skip_gen_module_info=true

添加 --gn-args load_test_config=false參數

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

以上參數可疊加使用

例如全量編譯,筆者使用下面這條命令編譯速度提升了120%:

./build.sh --product-name rk3568 --disable-post-build --disable-package-image 
--gn-args enable_notice_collection=false --gn-args load_test_config=false

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

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

# 例如編譯wukong部件的二進制可執行文件wukong
# 將gn和ninja可執行文件添加到PATH環境變量的方法(臨時改變,只能在當前的終端窗口中有效)
export
PATH=$PATH:/home/jiajiahao/ohos3.2beta4/sources/prebuilts/build-tools/linux-x86/bin
# 然后在源碼目錄下執行如下語句
ninja -C out/rk3568 wukong

如何讓OpenHarmony編譯速度“狂飆”-開源基礎軟件社區

# 例如編譯ace_napi部件的動態庫libace_napi.z.so
# 將gn和ninja可執行文件添加到PATH環境變量的方法(臨時改變,只能在當前的終端窗口中有效)
export PATH=$PATH:/你自己的源碼路徑/sources/prebuilts/build-tools/linux-x86/bin
# 然后在源碼目錄下執行如下語句
ninja -C out/rk3568 ace_napi

如何讓OpenHarmony編譯速度“狂飆”-開源基礎軟件社區

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

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

# 
找到讀者你自己的OpenHarmony源碼目錄下的gn和ninja可執行文件絕對路徑,在源碼下/prebuilts/build-tools/linux-x86/bin
export
PATH=$PATH:/home/xxx/xxx/sources/prebuilts/build-tools/linux-x86/bin

例如筆者的gn和ninja可執行文件絕對路徑。

export 
PATH=$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-name rk3568 --ccache --log-level=debug

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

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2023-07-27 14:38:33

開源鴻蒙

2024-07-26 16:39:33

鴻蒙系統開源構建系統

2023-08-09 07:04:17

清華微軟LLM

2022-04-27 09:24:22

前端代碼速度

2019-12-23 08:57:50

Python代碼單線程

2022-01-11 15:41:18

鴻蒙HarmonyOS應用

2023-08-11 14:06:58

鴻蒙Windows

2025-01-13 12:30:00

C++開發編譯

2023-12-11 17:30:52

預安裝應用鴻蒙Launcher

2023-12-11 17:26:21

Launcher鴻蒙預安裝應用

2023-08-28 08:40:23

Sonic開發JSON

2025-06-16 09:13:00

2022-05-07 16:13:59

DevEcoTool鴻蒙

2021-12-02 10:05:01

鴻蒙HarmonyOS應用

2022-05-27 15:04:53

鴻蒙操作系統

2016-03-02 17:55:03

app用戶加載

2023-03-13 16:00:05

訓練模型

2023-02-01 16:28:30

Linux內核鴻蒙

2013-06-13 10:02:36

JavaScriptJavaScript編

2021-02-25 21:37:48

iOS應用系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美中文日韩在线v日本 | 国产精品国色综合久久 | 亚洲成人福利视频 | 日本三级在线 | 日本精品久久久久 | 精品久久久久久久久久久久 | 日韩在线小视频 | 怡红院怡春院一级毛片 | 国产在线1区 | 久久久久久国产精品免费免费 | 视频在线一区二区 | 欧美成视频 | 夜夜草导航 | 成人教育av | 91爱啪啪| 国产91久久久久蜜臀青青天草二 | 人人做人人澡人人爽欧美 | 亚洲精品区 | 国产视频在线一区二区 | 日本视频在线播放 | 人妖av | 国产精品久久久99 | 一区日韩 | 亚洲成人精选 | 久久亚洲国产 | 欧美性生活免费 | 久久99久久 | 日韩精品久久久 | 成年人黄色免费视频 | 色婷婷久久久亚洲一区二区三区 | 成人av在线大片 | 91网站在线观看视频 | 中文字幕在线视频精品 | 国产精品久久久久久久7777 | 成年人在线观看视频 | 97超碰成人 | 久夜精品 | 中文字幕一区二区三区四区 | 欧美性久久久 | 久久免费精品 | 亚洲欧美国产精品一区二区 |