summaryrefslogtreecommitdiff
path: root/apex
diff options
context:
space:
mode:
author markchien <markchien@google.com> 2020-09-02 16:23:38 +0800
committer markchien <markchien@google.com> 2020-09-02 22:18:25 +0800
commit2f59ec98d16cb41d0e46e5662019032deaaeaac1 (patch)
tree703db0838e500c51b82bbcb858f98dd4d52a0e16 /apex
parent6945e9b65042a722a6db399481799f11628cee47 (diff)
Include bpf program in APEXes
bpf program is put to an APEX via 'bpfs' property. It is placed under etc/bpf directory in it. Fix: 167530625 Test: m Change-Id: Ia36b486f0cffb619ecc4f7a318cde881abc5baf4
Diffstat (limited to 'apex')
-rw-r--r--apex/Android.bp1
-rw-r--r--apex/apex.go22
-rw-r--r--apex/apex_test.go10
3 files changed, 33 insertions, 0 deletions
diff --git a/apex/Android.bp b/apex/Android.bp
index 144f44197..1a5f6837e 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -5,6 +5,7 @@ bootstrap_go_package {
"blueprint",
"soong",
"soong-android",
+ "soong-bpf",
"soong-cc",
"soong-java",
"soong-python",
diff --git a/apex/apex.go b/apex/apex.go
index 84a1e7526..b70815384 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -26,6 +26,7 @@ import (
"github.com/google/blueprint/proptools"
"android/soong/android"
+ "android/soong/bpf"
"android/soong/cc"
prebuilt_etc "android/soong/etc"
"android/soong/java"
@@ -63,6 +64,7 @@ var (
usesTag = dependencyTag{name: "uses"}
androidAppTag = dependencyTag{name: "androidApp", payload: true}
rroTag = dependencyTag{name: "rro", payload: true}
+ bpfTag = dependencyTag{name: "bpf", payload: true}
apexAvailBaseline = makeApexAvailableBaseline()
@@ -970,6 +972,9 @@ type apexBundleProperties struct {
// List of prebuilt files that are embedded inside this APEX bundle
Prebuilts []string
+ // List of BPF programs inside APEX
+ Bpfs []string
+
// Name of the apex_key module that provides the private key to sign APEX
Key *string
@@ -1458,6 +1463,9 @@ func (a *apexBundle) DepsMutator(ctx android.BottomUpMutatorContext) {
ctx.AddFarVariationDependencies(ctx.Config().AndroidCommonTarget.Variations(),
javaLibTag, a.properties.Java_libs...)
+ ctx.AddFarVariationDependencies(ctx.Config().AndroidCommonTarget.Variations(),
+ bpfTag, a.properties.Bpfs...)
+
// With EMMA_INSTRUMENT_FRAMEWORK=true the ART boot image includes jacoco library.
if a.artApex && ctx.Config().IsEnvTrue("EMMA_INSTRUMENT_FRAMEWORK") {
ctx.AddFarVariationDependencies(ctx.Config().AndroidCommonTarget.Variations(),
@@ -1778,6 +1786,11 @@ func apexFileForRuntimeResourceOverlay(ctx android.BaseModuleContext, rro java.R
return af
}
+func apexFileForBpfProgram(ctx android.BaseModuleContext, builtFile android.Path, bpfProgram bpf.BpfModule) apexFile {
+ dirInApex := filepath.Join("etc", "bpf")
+ return newApexFile(ctx, builtFile, builtFile.Base(), dirInApex, etc, bpfProgram)
+}
+
// Context "decorator", overriding the InstallBypassMake method to always reply `true`.
type flattenedApexContext struct {
android.ModuleContext
@@ -2113,6 +2126,15 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
} else {
ctx.PropertyErrorf("rros", "%q is not an runtime_resource_overlay module", depName)
}
+ case bpfTag:
+ if bpfProgram, ok := child.(bpf.BpfModule); ok {
+ filesToCopy, _ := bpfProgram.OutputFiles("")
+ for _, bpfFile := range filesToCopy {
+ filesInfo = append(filesInfo, apexFileForBpfProgram(ctx, bpfFile, bpfProgram))
+ }
+ } else {
+ ctx.PropertyErrorf("bpfs", "%q is not a bpf module", depName)
+ }
case prebuiltTag:
if prebuilt, ok := child.(prebuilt_etc.PrebuiltEtcModule); ok {
filesInfo = append(filesInfo, apexFileForPrebuiltEtc(ctx, prebuilt, depName))
diff --git a/apex/apex_test.go b/apex/apex_test.go
index 70464fc7a..33966cea2 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -27,6 +27,7 @@ import (
"github.com/google/blueprint/proptools"
"android/soong/android"
+ "android/soong/bpf"
"android/soong/cc"
"android/soong/dexpreopt"
prebuilt_etc "android/soong/etc"
@@ -257,6 +258,7 @@ func testApexContext(_ *testing.T, bp string, handlers ...testCustomizer) (*andr
java.RegisterAppBuildComponents(ctx)
java.RegisterSdkLibraryBuildComponents(ctx)
ctx.RegisterSingletonType("apex_keys_text", apexKeysTextFactory)
+ ctx.RegisterModuleType("bpf", bpf.BpfFactory)
ctx.PreDepsMutators(RegisterPreDepsMutators)
ctx.PostDepsMutators(RegisterPostDepsMutators)
@@ -606,6 +608,7 @@ func TestDefaults(t *testing.T) {
java_libs: ["myjar"],
apps: ["AppFoo"],
rros: ["rro"],
+ bpfs: ["bpf"],
}
prebuilt_etc {
@@ -652,6 +655,11 @@ func TestDefaults(t *testing.T) {
theme: "blue",
}
+ bpf {
+ name: "bpf",
+ srcs: ["bpf.c", "bpf2.c"],
+ }
+
`)
ensureExactContents(t, ctx, "myapex", "android_common_myapex_image", []string{
"etc/myetc",
@@ -659,6 +667,8 @@ func TestDefaults(t *testing.T) {
"lib64/mylib.so",
"app/AppFoo/AppFoo.apk",
"overlay/blue/rro.apk",
+ "etc/bpf/bpf.o",
+ "etc/bpf/bpf2.o",
})
}