RK356X Android.bp添加宏控制

我是从android7 直接跳到android11的,所以有很多配置文件不太熟悉,比如说Android.mk bp 替换了android.mk,这让我很不适应,之前mk文件中定义宏很简单

ifeq ($(strip $(TARGET_BOARD_PRODUCT_NAME)),XX)
LOCAL_CFLAGS += -DXXXXXXXXX
endif

但是bp文件中没有ifeq语句,所以参考了下hardware文件夹下其他模块的定义方法,例如librga、weaver等,是利用go语言实现了不同情况下宏的定义,直接上关键代码

1、在对应项目上新建Android.go文件

package XXXXX
import (
        "android/soong/android"
        "android/soong/cc"
        "fmt"
        "strings"
)
func init() {
    // for DEBUG
    fmt.Println("init start")
    android.RegisterModuleType("AAAAA", DefaultsFactory)
}
func DefaultsFactory() (android.Module) {
    module := cc.DefaultsFactory()
    android.AddLoadHook(module, Defaults)
    return module
}
func Defaults(ctx android.LoadHookContext) {
    type props struct {
        Cflags []string
    }
    p := &props{}
    p.Cflags = globalDefaults(ctx)
    ctx.AppendProperties(p)
}
func globalDefaults(ctx android.BaseContext) ([]string) {
    var cppflags []string
    fmt.Println("ZZZZZ:",
        ctx.AConfig().Getenv("ZZZZZ"))
    if strings.EqualFold(ctx.AConfig().Getenv("ZZZZZ"),"XX") {
          cppflags = append(cppflags,
                         "-DXXXXX=1")
    }else{
          cppflags = append(cppflags,
                         "-DXXXXX=0") 
    }
    return cppflags
}

通过ZZZZZ宏来控制XXXXX的值,注意android.RegisterModuleType("AAAAA", DefaultsFactory)

AAAAA的值在android.bp里面会引入,

2、android.bp项目中引入Android.go文件

//add by lllll
bootstrap_go_package {
    name: "soong-init",
    pkgPath: "android/soong/init",
    deps: [
        "blueprint",
        "blueprint-pathtools",
        "soong",
        "soong-android",
        "soong-cc",
        "soong-genrule",
    ],
    srcs: [
          "Android.go",
    ],
    pluginFor: ["soong_build"],
}
AAAAA{
   name: "BBBBB"
}

AAAAA和Android.gp里面定义的AAAAA保持一致,AAAAA中的name属性和cc_defaults中的defaults属性名字一致,如果cc_defaults没有defaults属性那就添加下,格式如下

 defaults: [
        "BBBBB"
    ],

3、代码中用法

定义过的宏在c或cpp里面的用法很简单,就是个简单的if语句

if(XXXXX){//XXXXX代表Android.go里面定义的宏

}else{

}

以上两步骤后就添加完成,不过我编译了下发现XXXXX定义的值总是0,应该是ZZZZZ宏的值没有取到,我参考了下其他代码发现在build/make/envsetup.sh 有很多这样的定义

    unset TARGET_RK_GRALLOC_VERSION
    export TARGET_RK_GRALLOC_VERSION=$(get_build_var TARGET_RK_GRALLOC_VERSION)

    unset TARGET_BOARD_PLATFORM_EBOOK
    export TARGET_BOARD_PLATFORM_EBOOK=$(get_build_var BUILD_WITH_RK_EBOOK)

 那也就明白了 需要把ZZZZZ的值设置到环境变量里面,才能获取到ZZZZZ的值,可以依葫芦画瓢

    unset ZZZZZ
    export ZZZZZ=$(get_build_var ZZZZZ)

重新编译后OK,可以不同项目不同控制。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开开心心everyday

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值