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

Commit b11c99d0 authored by Jiyong Park's avatar Jiyong Park Committed by Gerrit Code Review
Browse files

Merge "Make overrides work in Soong" into main

parents aebccc73 a574d535
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -492,6 +492,10 @@ type commonProperties struct {

	// vintf_fragment Modules required from this module.
	Vintf_fragment_modules proptools.Configurable[[]string] `android:"path"`

	// List of module names that are prevented from being installed when this module gets
	// installed.
	Overrides []string
}

type distProperties struct {
+9 −0
Original line number Diff line number Diff line
@@ -543,6 +543,7 @@ func (m *moduleContext) setAconfigPaths(paths Paths) {

func (m *moduleContext) packageFile(fullInstallPath InstallPath, srcPath Path, executable bool) PackagingSpec {
	licenseFiles := m.Module().EffectiveLicenseFiles()
	overrides := CopyOf(m.Module().base().commonProperties.Overrides)
	spec := PackagingSpec{
		relPathInPackage:      Rel(m, fullInstallPath.PartitionDir(), fullInstallPath.String()),
		srcPath:               srcPath,
@@ -553,6 +554,8 @@ func (m *moduleContext) packageFile(fullInstallPath InstallPath, srcPath Path, e
		skipInstall:           m.skipInstall(),
		aconfigPaths:          m.getAconfigPaths(),
		archType:              m.target.Arch.ArchType,
		overrides:             &overrides,
		owner:                 m.ModuleName(),
	}
	m.packagingSpecs = append(m.packagingSpecs, spec)
	return spec
@@ -670,6 +673,7 @@ func (m *moduleContext) InstallSymlink(installPath InstallPath, name string, src
		m.checkbuildFiles = append(m.checkbuildFiles, srcPath)
	}

	overrides := CopyOf(m.Module().base().commonProperties.Overrides)
	m.packagingSpecs = append(m.packagingSpecs, PackagingSpec{
		relPathInPackage: Rel(m, fullInstallPath.PartitionDir(), fullInstallPath.String()),
		srcPath:          nil,
@@ -679,6 +683,8 @@ func (m *moduleContext) InstallSymlink(installPath InstallPath, name string, src
		skipInstall:      m.skipInstall(),
		aconfigPaths:     m.getAconfigPaths(),
		archType:         m.target.Arch.ArchType,
		overrides:        &overrides,
		owner:            m.ModuleName(),
	})

	return fullInstallPath
@@ -714,6 +720,7 @@ func (m *moduleContext) InstallAbsoluteSymlink(installPath InstallPath, name str
		m.installFiles = append(m.installFiles, fullInstallPath)
	}

	overrides := CopyOf(m.Module().base().commonProperties.Overrides)
	m.packagingSpecs = append(m.packagingSpecs, PackagingSpec{
		relPathInPackage: Rel(m, fullInstallPath.PartitionDir(), fullInstallPath.String()),
		srcPath:          nil,
@@ -723,6 +730,8 @@ func (m *moduleContext) InstallAbsoluteSymlink(installPath InstallPath, name str
		skipInstall:      m.skipInstall(),
		aconfigPaths:     m.getAconfigPaths(),
		archType:         m.target.Arch.ArchType,
		overrides:        &overrides,
		owner:            m.ModuleName(),
	})

	return fullInstallPath
+1 −0
Original line number Diff line number Diff line
@@ -182,6 +182,7 @@ func createCcSdkVariantRules() []Rule {
		"packages/modules/SdkExtensions/derive_sdk",
		// These are for apps and shouldn't be used by non-SDK variant modules.
		"prebuilts/ndk",
		"frameworks/native/libs/binder/ndk",
		"tools/test/graphicsbenchmark/apps/sample_app",
		"tools/test/graphicsbenchmark/functional_tests/java",
		"vendor/xts/gts-tests/hostsidetests/gamedevicecert/apps/javatests",
+34 −9
Original line number Diff line number Diff line
@@ -56,6 +56,12 @@ type PackagingSpec struct {

	// ArchType of the module which produced this packaging spec
	archType ArchType

	// List of module names that this packaging spec overrides
	overrides *[]string

	// Name of the module where this packaging spec is output of
	owner string
}

func (p *PackagingSpec) Equals(other *PackagingSpec) bool {
@@ -325,7 +331,10 @@ func (p *PackagingBase) AddDeps(ctx BottomUpMutatorContext, depTag blueprint.Dep
}

func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter func(PackagingSpec) bool) map[string]PackagingSpec {
	m := make(map[string]PackagingSpec)
	// all packaging specs gathered from the dep.
	var all []PackagingSpec
	// list of module names overridden
	var overridden []string

	var arches []ArchType
	for _, target := range getSupportedTargets(ctx) {
@@ -357,6 +366,24 @@ func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter
					continue
				}
			}
			all = append(all, ps)
			if ps.overrides != nil {
				overridden = append(overridden, *ps.overrides...)
			}
		}
	})

	// all minus packaging specs that are overridden
	var filtered []PackagingSpec
	for _, ps := range all {
		if ps.owner != "" && InList(ps.owner, overridden) {
			continue
		}
		filtered = append(filtered, ps)
	}

	m := make(map[string]PackagingSpec)
	for _, ps := range filtered {
		dstPath := ps.relPathInPackage
		if existingPs, ok := m[dstPath]; ok {
			if !existingPs.Equals(&ps) {
@@ -364,10 +391,8 @@ func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter
			}
			continue
		}

		m[dstPath] = ps
	}
	})
	return m
}

+62 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ type componentTestModule struct {
	props struct {
		Deps         []string
		Skip_install *bool
		Overrides    []string
	}
}

@@ -650,3 +651,64 @@ func TestPrefer32Deps(t *testing.T) {
		runPackagingTest(t, config, bp, tc.expected)
	}
}

func TestOverrides(t *testing.T) {
	bpTemplate := `
		component {
			name: "foo",
			deps: ["bar"],
		}

		component {
			name: "bar",
		}

		component {
			name: "bar_override",
			overrides: ["bar"],
		}

		component {
			name: "baz",
			deps: ["bar_override"],
		}

		package_module {
			name: "package",
			deps: %DEPS%,
		}
	`
	testcases := []struct {
		deps     []string
		expected []string
	}{
		{
			deps:     []string{"foo"},
			expected: []string{"lib64/foo", "lib64/bar"},
		},
		{
			deps:     []string{"foo", "bar_override"},
			expected: []string{"lib64/foo", "lib64/bar_override"},
		},
		{
			deps:     []string{"foo", "bar", "bar_override"},
			expected: []string{"lib64/foo", "lib64/bar_override"},
		},
		{
			deps:     []string{"bar", "bar_override"},
			expected: []string{"lib64/bar_override"},
		},
		{
			deps:     []string{"foo", "baz"},
			expected: []string{"lib64/foo", "lib64/baz", "lib64/bar_override"},
		},
	}
	for _, tc := range testcases {
		config := testConfig{
			multiTarget:                true,
			depsCollectFirstTargetOnly: false,
		}
		bp := strings.Replace(bpTemplate, "%DEPS%", `["`+strings.Join(tc.deps, `", "`)+`"]`, -1)
		runPackagingTest(t, config, bp, tc.expected)
	}
}