diff options
-rw-r--r-- | bpf/bpf.go | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/bpf/bpf.go b/bpf/bpf.go index 187b4db61..a4999e5e4 100644 --- a/bpf/bpf.go +++ b/bpf/bpf.go @@ -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()) + } + } } |