了解更多开源请访问:开源基础软件社区https://ost.51cto.comOpenHarmony的编译方式有两种,一种是通过hb工具,另一个是build.sh脚本编译的。笔者在这篇文章中整理了提高build.sh编译速度的方法如下:由于笔者只是使用build.sh脚本编译,并没有使用过hb工具,所以貌似下面的选项也可以用于hb工具。在OpenHarmony源码中执行./build.sh--h会打印出./build.sh$中可以添加的所有选项./build.sh-h++++++++++++++++++++++++++++++++++++++系统外壳是bash4.4.20(1)-release+++++++++++++++++++++++++++++++++++++++++2023-02-0712:58:04-hUsage:entry.py[options]Options:-h,--help显示此帮助信息并退出--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=====构建成功=====提高OpenHarmony编译速度构建的选项.sh脚本编译rk3568命令如下:./build.sh--product-namerk3568--ccache可以通过在命令后添加如下选项来提高编译速度。添加--disable-post-build参数以取消Postbuild过程。最后的ninjatrace分析,各子系统的rom大小统计(不包括源码中的third_party部分)等动作都会为No(各子系统组件描述文件名称为bundle.json,定义了子系统的名称。)提供对如何禁用构建后参数的支持https://gitee.com/openharmony/build/issues/I5MT9X。./build.sh--product-namerk3568--disable-post-build添加--disable-package-image参数取消上次将所有image镜像文件压缩成tar包的动作tar包位置out\rk3568\images。tar.gz./build.sh--product-namerk3568--disable-package-image添加--ccache参数ccache会缓存c/c++编译的编译输出,下次编译输入不变时直接复用缓存的产品。用于缓存编译后的.o文件等。执行sudoapt-getinstallccache命令安装ccache然后在--ccache后面加上exportCCACHE_NOHASHDIR="true"和exportCCACHE_SLOPPINESS="include_file_ctime"(做的时候设置ccache不为hashhash路径,不检查文件的变化时间)./build.sh--product-namerk3568--ccacheexportCCACHE_NOHASHDIR="true"exportCCACHE_SLOPPINESS="include_file_ctime"添加--fast-rebuild参数编译过程为主要分为:preloader->loader->gn->ninja这四个过程,添加后直接在已有的out/rk3568/build.ninja基础上执行编译链接步骤,跳过前面的产品配置分析和gn分析,而gn相关的脚本在没有改变的前提下使用。./build.sh--product-namerk3568--fast-rebuildadd--gn-argsenable_notice_collection=false收集参数通知文件用于产品化LICENSE生成,取消收集开源通知的过程,在非生产场景可以关闭开发模式,提高编译速度,节省~7%的编译时间。OpenHarmony开源软件Notice收集政策说明https://gitee.com/openharmony/build/blob/master/docs/开源软件Notice收集政策。./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-argsenable_lto_O0=true参数将削弱链接时的优化级别。建议只考虑编译是否成功时使用(会影响最终so的性能和rom大小)。添加--gn-argsarchive_ndk=false参数,编译sdk时不执行输出压缩包的动作。添加exportNO_DEVTOOL=1参数,取消webpack打包过程中生成sourcemap的动作。添加--gn-argsskip_generate_module_list_file=true参数,跳过生成测试记录文件的过程,保存gn解析过程,只要不运行tdd测试用例,都可以添加该参数,并且编译tdd用例并不重要。不编译镜像时添加-Tpackages--gn-argsskip_gen_module_info=true参数:-Tpackages--gn-argsskip_gen_module_info=true,去掉gn阶段moduleinfo的生成。/build.sh--product-namerk3568--build-targetmodulename-Tpackages--gn-argsskip_gen_module_info=trueadd--gn-argsload_test_config=false参数add--gn-argsload_test_config=false测试用例不编译时去掉在gn阶段解析与测试相关的编译目标。以上参数可以叠加使用,比如全编译。我使用以下命令将编译速度提高了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-Cout/rk3568moduleb_lib(编译目标模块)#例如编译wukong组件wukong的二进制可执行文件#将gn和ninja可执行文件添加到PATH环境变量的方法(临时更改,只在当前终端窗口有效)exportPATH=$PATH:/home/jiajiahao/ohos3.2beta4/sources/prebuilts/build-tools/linux-x86/bin#然后在源码目录执行如下语句ninja-Cout/rk3568wukong#比如编译动态库libace_napi.zace_napi组件.so#将gn和ninja可执行文件加入P的方法ATH环境变量(临时更改,只在当前终端窗口有效)exportPATH=$PATH:/你自己的源码路径/sources/prebuilts/build-tools/linux-x86/bin#然后在源码中执行如下语句codedirectoryninja-Cout/rk3568ace_napi将gn和ninja可执行文件添加到PATH环境变量方法将gn和ninja可执行文件添加到PATH环境变量方法(临时更改,仅在当前终端窗口有效)。#在自己的OpenHarmony源码目录下找到gn和ninja可执行文件的绝对路径,在源码/prebuilts/build-tools/linux-x86/binexportPATH=$PATH:/home/xxx/xxx/sources/下prebuilts/build-tools/linux-x86/bin比如作者的gn和ninja可执行文件的绝对路径。exportPATH=$PATH:/home/jiajiahao/ohos3.2beta4/sources/prebuilts/build-tools/linux-x86/binnoticefile是否收集编译选项–gn-argsenable_notice_collection=false如何支持。相关PRhttps://gitee.com/openharmony/build/pulls/772/files指定编译时的日志级别在OpenHarmony的build.sh中,可以通过–log-level指定编译时的日志级别,三个级别可选:debug、info和error,默认值为info./build.sh--product-namerk3568--ccache--log-level=debug在本地打开ninjatrace:解压出/rk3568/build.trace.gz,build拖拽.trace到chrome的跟踪链接chrome://tracing/打开它。了解更多开源请访问:开源基础软件社区https://ost.51cto.com
