Myhera_L 2023-03-02 11:23 采纳率: 0%
浏览 83
已结题

动态编译android.bp

我想在android.bp中,采用go语言添加条件变量进行动态添加。例如:

art_module_java_defaults {
    name: "art_module_source_build_java_defaults",
    defaults_visibility: [
        "//art:__subpackages__",
        "//libcore:__subpackages__",
        "//libnativehelper:__subpackages__",
    ],
    enabled: false,
    soong_config_variables: {
        source_build: {
            bar{
                  
            }
        },
    },
    target: {
        windows: {
            enabled: false,
        },
    },
}

我想要在bar里面,添加cflags,该如何实现.go语言例子

func init() {
    android.RegisterModuleType("llvm_defaults", llvmDefaultsFactory)
}
func llvmDefaultsFactory() android.Module {
    module := cc.DefaultsFactory()
    android.AddLoadHook(module, llvmDefaults)
    return module
}

func llvmDefaults(ctx android.LoadHookContext) {
    type props struct {
        Target struct {
            Android struct {
                Cflags  []string
                Enabled *bool
            }
            Host struct {
                Enabled *bool
            }
            Not_windows struct {
                Cflags []string
            }
        }
        Cflags []string
    }
    p := &props{}
    p.Cflags = globalFlags(ctx)
    p.Target.Android.Cflags = deviceFlags(ctx)
    // Mingw fails to link binaries with lots of debug information
    p.Target.Not_windows.Cflags = hostFlags(ctx)
    if ctx.Config().IsEnvTrue("DISABLE_LLVM_DEVICE_BUILDS") {
        p.Target.Android.Enabled = proptools.BoolPtr(false)
    }
    ctx.AppendProperties(p)
}

但是这个例子没有bp的,我不知道多级空间里面,是通过什么方法去获取

  • 写回答

11条回答 默认 最新

  • 这我哪会啊 2023-03-02 11:30
    关注

    要在Android.bp中动态添加条件变量,并在bar模块中使用该条件变量添加cflags,可以按照以下步骤进行:
    1、在Android.bp中定义条件变量。例如,可以使用以下代码定义名为my_cflags的条件变量:

    my_cflags {
        bazel_module: {
            name: "my_cflags",
            visibility: ["//visibility:public"],
        },
        default: "",
    }
    

    在需要使用该条件变量的模块(例如bar)中,将该条件变量添加到cflags中。例如,可以使用以下代码将my_cflags添加到bar的cflags中:

    cc_binary {
        name: "bar",
        srcs: ["bar.c"],
        cflags: ["$(my_cflags)"],
    }
    

    3、在需要动态设置该条件变量的地方,例如在Android.bp的某个函数中,使用ctx.VariableFunc来设置该条件变量的值。例如,可以使用以下代码设置my_cflags的值:

    my_cflags_value = func() (string, error) {
        if some_condition {
            return "-DENABLE_FEATURE", nil
        } else {
            return "", nil
        }
    }
    
    my_cflags = ctx.VariableFunc("my_cflags", my_cflags_value)
    

    在这个例子中,如果some_condition为true,则设置my_cflags为"-DENABLE_FEATURE",否则设置为""。

    注意,为了使用ctx.VariableFunc,需要在Android.bp的顶部添加如下的import:

    go_import("android/soong/android")
    

    这些步骤可以在Android.bp的任何位置执行,但最好将它们放在函数中,并在module部分中使用这个函数。这样可以更好地组织代码并使它更易于维护。

    评论

报告相同问题?

问题事件

  • 系统已结题 3月10日
  • 修改了问题 3月2日
  • 赞助了问题酬金15元 3月2日
  • 创建了问题 3月2日

悬赏问题

  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题