当前位置: 首页 > news >正文

[Android soong构建系统]实例:定制化编译某个模块

背景描述:

假设有一个Android15系统在维护,HAL层为共仓,device有高低配各对应一个分支。那么如何实现共仓HAL根据device仓实现对应的高低配置版本编译打包呢?

这里我们引入一个定制化soong变量用于标识device是高配版本还是低配版本,通过这个soong定制变量HAL层判断按高配版本编译打包还是按低配编译打包,最终实现差异化编译打包。

这里引入的定制化soong变量类似于soong系统默认定义的arch变量。

思路描述:

具体思路如下,

1.Camera HAL Android.bp中自定义一个string类型soong变量,假设变量名为oo_target,取值为:oo_high(高配),oo_low(低配)。

2.Camera HAL Android.bp中自定义一个模块类型,这个自定义模块类型根据自定义oo_target变量取值情况来设置模块的属性,假设这里设置cflags,srcs,shared_libs。

3.device仓打包脚本device.mk中设置这个定义变量oo_target为不同的值,高配产品将oo_target设置为oo_high,低配产品将oo_target设置为oo_low。

4.Camera HAL Android.bp和源码中整合公共部分和差异部分进行编译和打包。

具体实现:

这里基于google参考实现。

1.定义soong变量

//hardware/google/camera/device/EmulatedCamera/hwl/Android.bp
soong_config_string_variable {name: "oo_target",values: ["oo_high", "oo_low"],
}

2.定义自定义模块类型,根据取值设置模块属性

//hardware/google/camera/device/EmulatedCamera/hwl/Android.bp
soong_config_module_type {name: "oocamerahal",module_type: "cc_defaults",config_namespace: "oocamerahal",variables: ["oo_target",],properties: ["srcs","cflags","shared_libs",],
}oocamerahal {name: "camerahwl_nodes",defaults: ["camerahwl_nodes_common"],proprietary: true,soong_config_variables: {oo_target: {oo_high: {srcs: [feature/featureA.cppfeature/featureB.cpp],cflags: ["-DFeatureA","-DFeatureB",],shared_libs: ["libFeatureADep","libFeatureBDep",],},oo_low: {},},}
}

3.设置自定义变量oo_target

//device/xx/oo/device.mk
$(call soong_config_set, oocamerahal, oo_target, oo_high)

4.整合公共部分和差异部分

源码中使用#ifdef FeatureA和FeatureB的定义情况,选择性编译。

Android.bp中通过defaults属性实现对公共部分的"继承",如下:

//hardware/google/camera/device/EmulatedCamera/hwl/Android.bp
cc_defaults {name: "liboocamerahwl_impl_defaults",owner: "oo_oo",proprietary: true,defaults: ["camerahwl_nodes"],srcs: ["CameraProviderHWLImpl.cpp","CameraDeviceInfo.cpp","CameraDeviceHWLImpl.cpp","CameraDeviceSessionHWLImpl.cpp","LogicalRequestState.cpp","RequestProcessor.cpp","RequestState.cpp","TorchState.cpp","GrallocSensorBuffer.cpp",],cflags: ["-Werror","-Wextra","-Wall",],shared_libs: [...],...
}

http://www.dtcms.com/a/470454.html

相关文章:

  • 学院网站建设实例做厨具公司网站
  • ceph 数据落盘异常问题分析
  • 福州网站搭建aws 高可用 WordPress
  • 微网站开发方案wordpress英文博客模板下载
  • 为什么很多公司没自己的网站php网站在线打包源码
  • 厚街做网站的公司wordpress新闻
  • 肖特基二极管作用及应用
  • Debezium系列之:SQL Server 事务日志
  • 建设网站源码高权重网站代做排名
  • C++:set和map详解版
  • 【Docker】docker存储配置与管理
  • 网站设计结果怎么做电视台网站
  • 廉江网站制作制作静态网站制作
  • 纯知识干货vue2学习之问答六
  • dnf做心悦宠物的网站官方模板关键字生成的代码添加在网站的什么地方?
  • 主流视频各种压缩码对比
  • 如何确定网站栏目静态网站开发工具有哪些
  • commons-collections4
  • (13)100天python从入门到拿捏《目录操作》
  • SRC漏洞挖掘
  • Kettle作业并行设置及多前置任务同时运行完成才执行后续节点的方案
  • 如何给网站做301重定向网站集约化建设通知
  • PS基本教学(一)——认识Photoshop软件
  • Java中数据驱动测试的多接口关联处理
  • 用 TypeScript进行Hardhat测试
  • 淘宝网站建设那么便宜营销型网站开发 语言选择
  • ps做网站尺寸多少像素深圳网站建设团队
  • 做私房蛋糕在哪些网站写东西wordpress 文章 pin
  • 【ProtoBuf】快速上手
  • DAC1282寄存器介绍以及模式操作介绍