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

Commit e8bc2887 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "apexDepsMutator uses WalkDeps"

parents e59bf511 698dd9f0
Loading
Loading
Loading
Loading
+14 −19
Original line number Diff line number Diff line
@@ -65,9 +65,9 @@ type ApexModule interface {

	apexModuleBase() *ApexModuleBase

	// Marks that this module should be built for the specified APEXes.
	// Marks that this module should be built for the specified APEX.
	// Call this before apex.apexMutator is run.
	BuildForApexes(apexes []ApexInfo)
	BuildForApex(apex ApexInfo)

	// Returns the APEXes that this module will be built for
	ApexVariations() []ApexInfo
@@ -96,7 +96,7 @@ type ApexModule interface {
	IsInstallableToApex() bool

	// Mutate this module into one or more variants each of which is built
	// for an APEX marked via BuildForApexes().
	// for an APEX marked via BuildForApex().
	CreateApexVariations(mctx BottomUpMutatorContext) []Module

	// Tests if this module is available for the specified APEX or ":platform"
@@ -178,19 +178,16 @@ func (m *ApexModuleBase) TestFor() []string {
	return nil
}

func (m *ApexModuleBase) BuildForApexes(apexes []ApexInfo) {
func (m *ApexModuleBase) BuildForApex(apex ApexInfo) {
	m.apexVariationsLock.Lock()
	defer m.apexVariationsLock.Unlock()
nextApex:
	for _, apex := range apexes {
	for _, v := range m.apexVariations {
		if v.ApexName == apex.ApexName {
				continue nextApex
			return
		}
	}
	m.apexVariations = append(m.apexVariations, apex)
}
}

func (m *ApexModuleBase) ApexVariations() []ApexInfo {
	return m.apexVariations
@@ -327,10 +324,9 @@ func apexNamesMap() map[string]map[string]bool {
// depended on by the specified APEXes. Directly depending means that a module
// is explicitly listed in the build definition of the APEX via properties like
// native_shared_libs, java_libs, etc.
func UpdateApexDependency(apexes []ApexInfo, moduleName string, directDep bool) {
func UpdateApexDependency(apex ApexInfo, moduleName string, directDep bool) {
	apexNamesMapMutex.Lock()
	defer apexNamesMapMutex.Unlock()
	for _, apex := range apexes {
	apexesForModule, ok := apexNamesMap()[moduleName]
	if !ok {
		apexesForModule = make(map[string]bool)
@@ -338,7 +334,6 @@ func UpdateApexDependency(apexes []ApexInfo, moduleName string, directDep bool)
	}
	apexesForModule[apex.ApexName] = apexesForModule[apex.ApexName] || directDep
}
}

// TODO(b/146393795): remove this when b/146393795 is fixed
func ClearApexDependency() {
+21 −24
Original line number Diff line number Diff line
@@ -669,7 +669,7 @@ func RegisterPreDepsMutators(ctx android.RegisterMutatorsContext) {
}

func RegisterPostDepsMutators(ctx android.RegisterMutatorsContext) {
	ctx.TopDown("apex_deps", apexDepsMutator)
	ctx.TopDown("apex_deps", apexDepsMutator).Parallel()
	ctx.BottomUp("apex", apexMutator).Parallel()
	ctx.BottomUp("apex_flattened", apexFlattenedMutator).Parallel()
	ctx.BottomUp("apex_uses", apexUsesMutator).Parallel()
@@ -682,33 +682,30 @@ func apexDepsMutator(mctx android.TopDownMutatorContext) {
	if !mctx.Module().Enabled() {
		return
	}
	var apexBundles []android.ApexInfo
	var directDep bool
	if a, ok := mctx.Module().(*apexBundle); ok && !a.vndkApex {
		apexBundles = []android.ApexInfo{{
	a, ok := mctx.Module().(*apexBundle)
	if !ok || a.vndkApex {
		return
	}
	apexInfo := android.ApexInfo{
		ApexName:      mctx.ModuleName(),
		MinSdkVersion: a.minSdkVersion(mctx),
		Updatable:     a.Updatable(),
		}}
		directDep = true
	} else if am, ok := mctx.Module().(android.ApexModule); ok {
		apexBundles = am.ApexVariations()
		directDep = false
	}

	if len(apexBundles) == 0 {
		return
	mctx.WalkDeps(func(child, parent android.Module) bool {
		am, ok := child.(android.ApexModule)
		if !ok || !am.CanHaveApexVariants() {
			return false
		}
		if !parent.(android.DepIsInSameApex).DepIsInSameApex(mctx, child) && !inAnySdk(child) {
			return false
		}

	cur := mctx.Module().(android.DepIsInSameApex)

	mctx.VisitDirectDeps(func(child android.Module) {
		depName := mctx.OtherModuleName(child)
		if am, ok := child.(android.ApexModule); ok && am.CanHaveApexVariants() &&
			(cur.DepIsInSameApex(mctx, child) || inAnySdk(child)) {
			android.UpdateApexDependency(apexBundles, depName, directDep)
			am.BuildForApexes(apexBundles)
		}
		// If the parent is apexBundle, this child is directly depended.
		_, directDep := parent.(*apexBundle)
		android.UpdateApexDependency(apexInfo, depName, directDep)
		am.BuildForApex(apexInfo)
		return true
	})
}