bpf: support installing to vendor
Bug: 140330870 Test: use bpf{} to install bpf program to vendor and have it successfully loaded and installed by Android's bpfloader. Change-Id: If0aac3098e39498f0238516ec839b6ac910cc61e
This commit is contained in:
parent
3e7f5c411d
commit
606c5e9e99
1 changed files with 47 additions and 5 deletions
52
bpf/bpf.go
52
bpf/bpf.go
|
@ -20,7 +20,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"android/soong/android"
|
"android/soong/android"
|
||||||
_ "android/soong/cc/config"
|
|
||||||
|
|
||||||
"github.com/google/blueprint"
|
"github.com/google/blueprint"
|
||||||
"github.com/google/blueprint/proptools"
|
"github.com/google/blueprint/proptools"
|
||||||
|
@ -74,7 +73,10 @@ type BpfProperties struct {
|
||||||
Include_dirs []string
|
Include_dirs []string
|
||||||
Sub_dir string
|
Sub_dir string
|
||||||
// If set to true, generate BTF debug info for maps & programs
|
// If set to true, generate BTF debug info for maps & programs
|
||||||
Btf *bool
|
Btf *bool
|
||||||
|
Vendor *bool
|
||||||
|
|
||||||
|
VendorInternal bool `blueprint:"mutated"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type bpf struct {
|
type bpf struct {
|
||||||
|
@ -85,6 +87,41 @@ type bpf struct {
|
||||||
objs android.Paths
|
objs android.Paths
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _ android.ImageInterface = (*bpf)(nil)
|
||||||
|
|
||||||
|
func (bpf *bpf) ImageMutatorBegin(ctx android.BaseModuleContext) {}
|
||||||
|
|
||||||
|
func (bpf *bpf) CoreVariantNeeded(ctx android.BaseModuleContext) bool {
|
||||||
|
return !proptools.Bool(bpf.properties.Vendor)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bpf *bpf) RamdiskVariantNeeded(ctx android.BaseModuleContext) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bpf *bpf) VendorRamdiskVariantNeeded(ctx android.BaseModuleContext) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bpf *bpf) DebugRamdiskVariantNeeded(ctx android.BaseModuleContext) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bpf *bpf) RecoveryVariantNeeded(ctx android.BaseModuleContext) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bpf *bpf) ExtraImageVariations(ctx android.BaseModuleContext) []string {
|
||||||
|
if proptools.Bool(bpf.properties.Vendor) {
|
||||||
|
return []string{"vendor"}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bpf *bpf) SetImageVariation(ctx android.BaseModuleContext, variation string, module android.Module) {
|
||||||
|
bpf.properties.VendorInternal = variation == "vendor"
|
||||||
|
}
|
||||||
|
|
||||||
func (bpf *bpf) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
func (bpf *bpf) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
cflags := []string{
|
cflags := []string{
|
||||||
"-nostdlibinc",
|
"-nostdlibinc",
|
||||||
|
@ -132,8 +169,8 @@ func (bpf *bpf) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
if proptools.Bool(bpf.properties.Btf) {
|
if proptools.Bool(bpf.properties.Btf) {
|
||||||
objStripped := android.ObjPathWithExt(ctx, "", src, "o")
|
objStripped := android.ObjPathWithExt(ctx, "", src, "o")
|
||||||
ctx.Build(pctx, android.BuildParams{
|
ctx.Build(pctx, android.BuildParams{
|
||||||
Rule: stripRule,
|
Rule: stripRule,
|
||||||
Input: obj,
|
Input: obj,
|
||||||
Output: objStripped,
|
Output: objStripped,
|
||||||
Args: map[string]string{
|
Args: map[string]string{
|
||||||
"stripCmd": "${config.ClangBin}/llvm-strip",
|
"stripCmd": "${config.ClangBin}/llvm-strip",
|
||||||
|
@ -154,7 +191,12 @@ func (bpf *bpf) AndroidMk() android.AndroidMkData {
|
||||||
fmt.Fprintln(w)
|
fmt.Fprintln(w)
|
||||||
fmt.Fprintln(w, "LOCAL_PATH :=", moduleDir)
|
fmt.Fprintln(w, "LOCAL_PATH :=", moduleDir)
|
||||||
fmt.Fprintln(w)
|
fmt.Fprintln(w)
|
||||||
localModulePath := "LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/bpf"
|
var localModulePath string
|
||||||
|
if bpf.properties.VendorInternal {
|
||||||
|
localModulePath = "LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/bpf"
|
||||||
|
} else {
|
||||||
|
localModulePath = "LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/bpf"
|
||||||
|
}
|
||||||
if len(bpf.properties.Sub_dir) > 0 {
|
if len(bpf.properties.Sub_dir) > 0 {
|
||||||
localModulePath += "/" + bpf.properties.Sub_dir
|
localModulePath += "/" + bpf.properties.Sub_dir
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue