|
@@ -23,6 +23,7 @@ import (
|
|
|
_ "android/soong/cc/config"
|
|
|
|
|
|
"github.com/google/blueprint"
|
|
|
+ "github.com/google/blueprint/proptools"
|
|
|
)
|
|
|
|
|
|
func init() {
|
|
@@ -41,6 +42,14 @@ var (
|
|
|
CommandDeps: []string{"$ccCmd"},
|
|
|
},
|
|
|
"ccCmd", "cFlags")
|
|
|
+
|
|
|
+ stripRule = pctx.AndroidStaticRule("stripRule",
|
|
|
+ blueprint.RuleParams{
|
|
|
+ Command: `$stripCmd --strip-unneeded --remove-section=.rel.BTF ` +
|
|
|
+ `--remove-section=.rel.BTF.ext --remove-section=.BTF.ext $in -o $out`,
|
|
|
+ CommandDeps: []string{"$stripCmd"},
|
|
|
+ },
|
|
|
+ "stripCmd")
|
|
|
)
|
|
|
|
|
|
func registerBpfBuildComponents(ctx android.RegistrationContext) {
|
|
@@ -64,6 +73,8 @@ type BpfProperties struct {
|
|
|
Cflags []string
|
|
|
Include_dirs []string
|
|
|
Sub_dir string
|
|
|
+ // If set to true, generate BTF debug info for maps & programs
|
|
|
+ Btf *bool
|
|
|
}
|
|
|
|
|
|
type bpf struct {
|
|
@@ -99,10 +110,14 @@ func (bpf *bpf) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|
|
|
|
|
cflags = append(cflags, bpf.properties.Cflags...)
|
|
|
|
|
|
+ if proptools.Bool(bpf.properties.Btf) {
|
|
|
+ cflags = append(cflags, "-g")
|
|
|
+ }
|
|
|
+
|
|
|
srcs := android.PathsForModuleSrc(ctx, bpf.properties.Srcs)
|
|
|
|
|
|
for _, src := range srcs {
|
|
|
- obj := android.ObjPathWithExt(ctx, "", src, "o")
|
|
|
+ obj := android.ObjPathWithExt(ctx, "unstripped", src, "o")
|
|
|
|
|
|
ctx.Build(pctx, android.BuildParams{
|
|
|
Rule: ccRule,
|
|
@@ -114,7 +129,21 @@ func (bpf *bpf) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|
|
},
|
|
|
})
|
|
|
|
|
|
- bpf.objs = append(bpf.objs, obj.WithoutRel())
|
|
|
+ if proptools.Bool(bpf.properties.Btf) {
|
|
|
+ objStripped := android.ObjPathWithExt(ctx, "", src, "o")
|
|
|
+ ctx.Build(pctx, android.BuildParams{
|
|
|
+ Rule: stripRule,
|
|
|
+ Input: obj,
|
|
|
+ Output: objStripped,
|
|
|
+ Args: map[string]string{
|
|
|
+ "stripCmd": "${config.ClangBin}/llvm-strip",
|
|
|
+ },
|
|
|
+ })
|
|
|
+ bpf.objs = append(bpf.objs, objStripped.WithoutRel())
|
|
|
+ } else {
|
|
|
+ bpf.objs = append(bpf.objs, obj.WithoutRel())
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|