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

Commit 4c803a03 authored by Colin Cross's avatar Colin Cross Committed by Automerger Merge Worker
Browse files

Merge aconfig files per-module am: d788b3e6

parents 78c3daf3 d788b3e6
Loading
Loading
Loading
Loading
+30 −21
Original line number Diff line number Diff line
@@ -126,7 +126,7 @@ var DeclarationsProviderKey = blueprint.NewProvider(DeclarationsProviderData{})
// This is used to collect the aconfig declarations info on the transitive closure,
// the data is keyed on the container.
type TransitiveDeclarationsInfo struct {
	AconfigFiles map[string]*android.DepSet[android.Path]
	AconfigFiles map[string]android.Paths
}

var TransitiveDeclarationsInfoProvider = blueprint.NewProvider(TransitiveDeclarationsInfo{})
@@ -177,40 +177,49 @@ func (module *DeclarationsModule) GenerateAndroidBuildActions(ctx android.Module
	})

}

func CollectTransitiveAconfigFiles(ctx android.ModuleContext, transitiveAconfigFiles *map[string]*android.DepSet[android.Path]) {
	if *transitiveAconfigFiles == nil {
		*transitiveAconfigFiles = make(map[string]*android.DepSet[android.Path])
func CollectDependencyAconfigFiles(ctx android.ModuleContext, mergedAconfigFiles *map[string]android.Paths) {
	if *mergedAconfigFiles == nil {
		*mergedAconfigFiles = make(map[string]android.Paths)
	}
	ctx.VisitDirectDeps(func(module android.Module) {
		if dep := ctx.OtherModuleProvider(module, DeclarationsProviderKey).(DeclarationsProviderData); dep.IntermediatePath != nil {
			aconfigMap := make(map[string]*android.DepSet[android.Path])
			aconfigMap[dep.Container] = android.NewDepSet(android.POSTORDER, []android.Path{dep.IntermediatePath}, nil)
			mergeTransitiveAconfigFiles(aconfigMap, *transitiveAconfigFiles)
			(*mergedAconfigFiles)[dep.Container] = append((*mergedAconfigFiles)[dep.Container], dep.IntermediatePath)
			return
		}
		if dep := ctx.OtherModuleProvider(module, TransitiveDeclarationsInfoProvider).(TransitiveDeclarationsInfo); len(dep.AconfigFiles) > 0 {
			mergeTransitiveAconfigFiles(dep.AconfigFiles, *transitiveAconfigFiles)
			for container, v := range dep.AconfigFiles {
				(*mergedAconfigFiles)[container] = append((*mergedAconfigFiles)[container], v...)
			}
		}
	})

	for container, aconfigFiles := range *mergedAconfigFiles {
		(*mergedAconfigFiles)[container] = mergeAconfigFiles(ctx, aconfigFiles)
	}

	ctx.SetProvider(TransitiveDeclarationsInfoProvider, TransitiveDeclarationsInfo{
		AconfigFiles: *transitiveAconfigFiles,
		AconfigFiles: *mergedAconfigFiles,
	})
}

func mergeTransitiveAconfigFiles(from, to map[string]*android.DepSet[android.Path]) {
	for fromKey, fromValue := range from {
		if fromValue == nil {
			continue
		}
		toValue, ok := to[fromKey]
		if !ok {
			to[fromKey] = fromValue
		} else {
			to[fromKey] = android.NewDepSet(android.POSTORDER, toValue.ToList(), []*android.DepSet[android.Path]{fromValue})
		}
func mergeAconfigFiles(ctx android.ModuleContext, inputs android.Paths) android.Paths {
	if len(inputs) == 1 {
		return android.Paths{inputs[0]}
	}

	output := android.PathForModuleOut(ctx, "aconfig_merged.pb")

	ctx.Build(pctx, android.BuildParams{
		Rule:        mergeAconfigFilesRule,
		Description: "merge aconfig files",
		Inputs:      inputs,
		Output:      output,
		Args: map[string]string{
			"flags": android.JoinWithPrefix(inputs.Strings(), "--cache "),
		},
	})

	return android.Paths{output}
}

type bazelAconfigDeclarationsAttributes struct {
+2 −3
Original line number Diff line number Diff line
@@ -60,9 +60,8 @@ func runJavaAndroidMkTest(t *testing.T, bp string) {
	entry := android.AndroidMkEntriesForTest(t, result.TestContext, module)[0]

	makeVar := entry.EntryMap["LOCAL_ACONFIG_FILES"]
	android.AssertIntEquals(t, "len(LOCAL_ACONFIG_FILES)", 2, len(makeVar))
	android.EnsureListContainsSuffix(t, makeVar, "my_aconfig_declarations_foo/intermediate.pb")
	android.EnsureListContainsSuffix(t, makeVar, "my_aconfig_declarations_bar/intermediate.pb")
	android.AssertIntEquals(t, "len(LOCAL_ACONFIG_FILES)", 1, len(makeVar))
	android.EnsureListContainsSuffix(t, makeVar, "android_common/aconfig_merged.pb")
}

func TestAndroidMkJavaLibrary(t *testing.T) {
+6 −0
Original line number Diff line number Diff line
@@ -48,6 +48,12 @@ var (
				"${aconfig}",
			},
		}, "cache_files")

	mergeAconfigFilesRule = pctx.AndroidStaticRule("mergeAconfigFilesRule",
		blueprint.RuleParams{
			Command:     `${aconfig} dump --dedup --format protobuf --out $out $flags`,
			CommandDeps: []string{"${aconfig}"},
		}, "flags")
)

func init() {
+1 −1
Original line number Diff line number Diff line
@@ -2394,7 +2394,7 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext,
func addAconfigFiles(vctx *visitorContext, ctx android.ModuleContext, module blueprint.Module) {
	dep := ctx.OtherModuleProvider(module, aconfig.TransitiveDeclarationsInfoProvider).(aconfig.TransitiveDeclarationsInfo)
	if len(dep.AconfigFiles) > 0 && dep.AconfigFiles[ctx.ModuleName()] != nil {
		vctx.aconfigFiles = append(vctx.aconfigFiles, dep.AconfigFiles[ctx.ModuleName()].ToList()...)
		vctx.aconfigFiles = append(vctx.aconfigFiles, dep.AconfigFiles[ctx.ModuleName()]...)
	}
}

+2 −2
Original line number Diff line number Diff line
@@ -11103,7 +11103,7 @@ func TestAconfigFilesJavaAndCcDeps(t *testing.T) {
		t.Fatalf("Expected 3 commands, got %d in:\n%s", len(aconfigArgs), s)
	}
	android.EnsureListContainsSuffix(t, aconfigArgs, "my_aconfig_declarations_foo/intermediate.pb")
	android.EnsureListContainsSuffix(t, aconfigArgs, "my_aconfig_declarations_bar/intermediate.pb")
	android.EnsureListContainsSuffix(t, aconfigArgs, "my_cc_library_bar/android_arm64_armv8-a_shared_apex10000/aconfig_merged.pb")
	android.EnsureListContainsSuffix(t, aconfigArgs, "my_aconfig_declarations_baz/intermediate.pb")

	buildParams := combineAconfigRule.BuildParams
@@ -11111,7 +11111,7 @@ func TestAconfigFilesJavaAndCcDeps(t *testing.T) {
		t.Fatalf("Expected 3 input, got %d", len(buildParams.Inputs))
	}
	android.EnsureListContainsSuffix(t, buildParams.Inputs.Strings(), "my_aconfig_declarations_foo/intermediate.pb")
	android.EnsureListContainsSuffix(t, buildParams.Inputs.Strings(), "my_aconfig_declarations_bar/intermediate.pb")
	android.EnsureListContainsSuffix(t, buildParams.Inputs.Strings(), "my_cc_library_bar/android_arm64_armv8-a_shared_apex10000/aconfig_merged.pb")
	android.EnsureListContainsSuffix(t, buildParams.Inputs.Strings(), "my_aconfig_declarations_baz/intermediate.pb")
	ensureContains(t, buildParams.Output.String(), "android_common_myapex/aconfig_flags.pb")
}
Loading