gpt4 book ai didi

android - 什么是 art.go?为什么它被认为是一种在 bp 文件中编写条件的方法?

转载 作者:搜寻专家 更新时间:2023-11-01 09:20:18 28 4
gpt4 key购买 nike

我正在尝试找到一种在 .bp 文件中编写条件的方法。

我在这里找到了文档:https://android.googlesource.com/platform/build/soong/+/HEAD/README.md

它有一个“我如何写条件?”部分,指向 art.go: https://android.googlesource.com/platform/art/+/master/build/art.go

这很难回答上述问题。它需要比简单链接更多的说明。

我的 Android.bp 中有我开发的模块 (HAL) 的 cc_binary。

cc_binary {
name: "name",
init_rc: ["script.rc"],
vintf_fragments: ["fragments.xml"],
relative_install_path: "path",
srcs: ["src1.cpp", "src2.cpp", ...],
shared_libs: ["sh_lib1", "sh_lib2", ...],
tstic_libs: ["lib1", "lib2", ...],
}

我想添加一个条件 cflag (-DCONDITIONAL),如果环境变量 SOME_ENV_VAR 等于“some_value”,它将被设置为 1。

我在 AOSP 中找到了很多类似 *.go 文件的例子,但结果证明它们对我没有用,因为我不能简单地将那里描述的做法应用到我的案例中。我也没有找到任何关于 *.go 文件的文档,它描述了如何使用它们来做事。我什至找不到像“最简单的用法示例”这样的东西。

有谁知道我在这里尝试做的事情是否有可能?

最佳答案

在您的项目文件夹中,创建一个“my_defaults.go”文件,您可以在其中定义根据环境变量或其他条件添加自定义构建标志的逻辑(这基本上是 art.go 中给出的内容一个例子)。

package my_defaults

import (
"android/soong/android"
"android/soong/cc"
)

func globalFlags(ctx android.BaseContext) []string {
var cflags []string

if ctx.AConfig().Getenv("SOME_ENV_VAR") == "some_value" {
cflags = append(cflags, "-DCONDITIONAL")
}

return cflags
}

func deviceFlags(ctx android.BaseContext) []string {
var cflags []string

return cflags
}

func hostFlags(ctx android.BaseContext) []string {
var cflags []string

return cflags
}

func myDefaults(ctx android.LoadHookContext) {
type props struct {
Target struct {
Android struct {
Cflags []string
Enabled *bool
}
Host struct {
Enabled *bool
}
Linux struct {
Cflags []string
}
Darwin struct {
Cflags []string
}
}
Cflags []string
}

p := &props{}
p.Cflags = globalFlags(ctx)
p.Target.Android.Cflags = deviceFlags(ctx)
h := hostFlags(ctx)
p.Target.Linux.Cflags = h
p.Target.Darwin.Cflags = h

ctx.AppendProperties(p)
}

func init() {
android.RegisterModuleType("my_defaults", myDefaultsFactory)
}

func myDefaultsFactory() android.Module {
module := cc.DefaultsFactory()
android.AddLoadHook(module, myDefaults)

return module
}

在您的 Android.bp 中,声明以下模块:

bootstrap_go_package {
name: "soong-my_defaults",
pkgPath: "android/soong/my/defaults",
deps: [
"soong",
"soong-android",
"soong-cc"
],
srcs: [
"my_defaults.go"
],
pluginFor: ["soong_build"]
}

然后您可以在 Android.bp 中使用“my_defaults”而不是通常的“cc_defaults”,例如

my_defaults {
name: "my-defaults-instance"
// Set some additional non-conditional cflags ...
}

cc_binary {
name: "my_binary",
defaults: ["my-defaults-instance"]
}

关于android - 什么是 art.go?为什么它被认为是一种在 bp 文件中编写条件的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56602427/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com