Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 66a0ae60 authored by Mark Chien's avatar Mark Chien Committed by Gerrit Code Review
Browse files

Merge "Include bpf program in APEXes"

parents bfb98ece 2f59ec98
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ bootstrap_go_package {
        "blueprint",
        "soong",
        "soong-android",
        "soong-bpf",
        "soong-cc",
        "soong-java",
        "soong-python",
+22 −0
Original line number Diff line number Diff line
@@ -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"
@@ -66,6 +67,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()

@@ -961,6 +963,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

@@ -1477,6 +1482,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(),
@@ -1797,6 +1805,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
@@ -2132,6 +2145,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))
+10 −0
Original line number Diff line number Diff line
@@ -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",
	})
}

+9 −2
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ import (
)

func init() {
	android.RegisterModuleType("bpf", bpfFactory)
	android.RegisterModuleType("bpf", BpfFactory)
	pctx.Import("android/soong/cc/config")
}

@@ -43,6 +43,13 @@ var (
		"ccCmd", "cFlags")
)

// BpfModule interface is used by the apex package to gather information from a bpf module.
type BpfModule interface {
	android.Module

	OutputFiles(tag string) (android.Paths, error)
}

type BpfProperties struct {
	Srcs         []string `android:"path"`
	Cflags       []string
@@ -141,7 +148,7 @@ func (bpf *bpf) OutputFiles(tag string) (android.Paths, error) {

var _ android.OutputFileProducer = (*bpf)(nil)

func bpfFactory() android.Module {
func BpfFactory() android.Module {
	module := &bpf{}

	module.AddProperties(&module.properties)
+1 −1
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ func testConfig(buildDir string, env map[string]string, bp string) android.Confi

func testContext(config android.Config) *android.TestContext {
	ctx := cc.CreateTestContext()
	ctx.RegisterModuleType("bpf", bpfFactory)
	ctx.RegisterModuleType("bpf", BpfFactory)
	ctx.Register(config)

	return ctx