Merge "android_system_image only packages "system" items" am: 0cfe1f43f7
am: 578ea8d076
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2030223 Change-Id: I6f04476705efce0fa6f1f7edc7a228722bdb878b Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -43,8 +43,14 @@ type filesystem struct {
|
|||||||
// Function that builds extra files under the root directory and returns the files
|
// Function that builds extra files under the root directory and returns the files
|
||||||
buildExtraFiles func(ctx android.ModuleContext, root android.OutputPath) android.OutputPaths
|
buildExtraFiles func(ctx android.ModuleContext, root android.OutputPath) android.OutputPaths
|
||||||
|
|
||||||
|
// Function that filters PackagingSpecs returned by PackagingBase.GatherPackagingSpecs()
|
||||||
|
filterPackagingSpecs func(specs map[string]android.PackagingSpec)
|
||||||
|
|
||||||
output android.OutputPath
|
output android.OutputPath
|
||||||
installDir android.InstallPath
|
installDir android.InstallPath
|
||||||
|
|
||||||
|
// For testing. Keeps the result of CopyDepsToZip()
|
||||||
|
entries []string
|
||||||
}
|
}
|
||||||
|
|
||||||
type symlinkDefinition struct {
|
type symlinkDefinition struct {
|
||||||
@@ -226,7 +232,7 @@ func (f *filesystem) buildRootZip(ctx android.ModuleContext) android.OutputPath
|
|||||||
|
|
||||||
func (f *filesystem) buildImageUsingBuildImage(ctx android.ModuleContext) android.OutputPath {
|
func (f *filesystem) buildImageUsingBuildImage(ctx android.ModuleContext) android.OutputPath {
|
||||||
depsZipFile := android.PathForModuleOut(ctx, "deps.zip").OutputPath
|
depsZipFile := android.PathForModuleOut(ctx, "deps.zip").OutputPath
|
||||||
f.CopyDepsToZip(ctx, f.GatherPackagingSpecs(ctx), depsZipFile)
|
f.entries = f.CopyDepsToZip(ctx, f.gatherFilteredPackagingSpecs(ctx), depsZipFile)
|
||||||
|
|
||||||
builder := android.NewRuleBuilder(pctx, ctx)
|
builder := android.NewRuleBuilder(pctx, ctx)
|
||||||
depsBase := proptools.StringDefault(f.properties.Base_dir, ".")
|
depsBase := proptools.StringDefault(f.properties.Base_dir, ".")
|
||||||
@@ -345,7 +351,7 @@ func (f *filesystem) buildCpioImage(ctx android.ModuleContext, compressed bool)
|
|||||||
}
|
}
|
||||||
|
|
||||||
depsZipFile := android.PathForModuleOut(ctx, "deps.zip").OutputPath
|
depsZipFile := android.PathForModuleOut(ctx, "deps.zip").OutputPath
|
||||||
f.CopyDepsToZip(ctx, f.GatherPackagingSpecs(ctx), depsZipFile)
|
f.entries = f.CopyDepsToZip(ctx, f.gatherFilteredPackagingSpecs(ctx), depsZipFile)
|
||||||
|
|
||||||
builder := android.NewRuleBuilder(pctx, ctx)
|
builder := android.NewRuleBuilder(pctx, ctx)
|
||||||
depsBase := proptools.StringDefault(f.properties.Base_dir, ".")
|
depsBase := proptools.StringDefault(f.properties.Base_dir, ".")
|
||||||
@@ -434,3 +440,14 @@ func (f *filesystem) SignedOutputPath() android.Path {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Filter the result of GatherPackagingSpecs to discard items targeting outside "system" partition.
|
||||||
|
// Note that "apex" module installs its contents to "apex"(fake partition) as well
|
||||||
|
// for symbol lookup by imitating "activated" paths.
|
||||||
|
func (f *filesystem) gatherFilteredPackagingSpecs(ctx android.ModuleContext) map[string]android.PackagingSpec {
|
||||||
|
specs := f.PackagingBase.GatherPackagingSpecs(ctx)
|
||||||
|
if f.filterPackagingSpecs != nil {
|
||||||
|
f.filterPackagingSpecs(specs)
|
||||||
|
}
|
||||||
|
return specs
|
||||||
|
}
|
||||||
|
@@ -74,3 +74,54 @@ func TestFileSystemFillsLinkerConfigWithStubLibs(t *testing.T) {
|
|||||||
android.AssertStringDoesNotContain(t, "linker.config.pb should not have libbar",
|
android.AssertStringDoesNotContain(t, "linker.config.pb should not have libbar",
|
||||||
output.RuleParams.Command, "libbar.so")
|
output.RuleParams.Command, "libbar.so")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func registerComponent(ctx android.RegistrationContext) {
|
||||||
|
ctx.RegisterModuleType("component", componentFactory)
|
||||||
|
}
|
||||||
|
|
||||||
|
func componentFactory() android.Module {
|
||||||
|
m := &component{}
|
||||||
|
m.AddProperties(&m.properties)
|
||||||
|
android.InitAndroidArchModule(m, android.DeviceSupported, android.MultilibCommon)
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
type component struct {
|
||||||
|
android.ModuleBase
|
||||||
|
properties struct {
|
||||||
|
Install_copy_in_data []string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *component) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
|
output := android.PathForModuleOut(ctx, c.Name())
|
||||||
|
dir := android.PathForModuleInstall(ctx, "components")
|
||||||
|
ctx.InstallFile(dir, c.Name(), output)
|
||||||
|
|
||||||
|
dataDir := android.PathForModuleInPartitionInstall(ctx, "data", "components")
|
||||||
|
for _, d := range c.properties.Install_copy_in_data {
|
||||||
|
ctx.InstallFile(dataDir, d, output)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFileSystemGathersItemsOnlyInSystemPartition(t *testing.T) {
|
||||||
|
f := android.GroupFixturePreparers(fixture, android.FixtureRegisterWithContext(registerComponent))
|
||||||
|
result := f.RunTestWithBp(t, `
|
||||||
|
android_system_image {
|
||||||
|
name: "myfilesystem",
|
||||||
|
multilib: {
|
||||||
|
common: {
|
||||||
|
deps: ["foo"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
linker_config_src: "linker.config.json",
|
||||||
|
}
|
||||||
|
component {
|
||||||
|
name: "foo",
|
||||||
|
install_copy_in_data: ["bar"],
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
module := result.ModuleForTests("myfilesystem", "android_common").Module().(*systemImage)
|
||||||
|
android.AssertDeepEquals(t, "entries should have foo only", []string{"components/foo"}, module.entries)
|
||||||
|
}
|
||||||
|
@@ -37,6 +37,7 @@ func systemImageFactory() android.Module {
|
|||||||
module := &systemImage{}
|
module := &systemImage{}
|
||||||
module.AddProperties(&module.properties)
|
module.AddProperties(&module.properties)
|
||||||
module.filesystem.buildExtraFiles = module.buildExtraFiles
|
module.filesystem.buildExtraFiles = module.buildExtraFiles
|
||||||
|
module.filesystem.filterPackagingSpecs = module.filterPackagingSpecs
|
||||||
initFilesystemModule(&module.filesystem)
|
initFilesystemModule(&module.filesystem)
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
@@ -53,7 +54,7 @@ func (s *systemImage) buildLinkerConfigFile(ctx android.ModuleContext, root andr
|
|||||||
|
|
||||||
// we need "Module"s for packaging items
|
// we need "Module"s for packaging items
|
||||||
var otherModules []android.Module
|
var otherModules []android.Module
|
||||||
deps := s.GatherPackagingSpecs(ctx)
|
deps := s.gatherFilteredPackagingSpecs(ctx)
|
||||||
ctx.WalkDeps(func(child, parent android.Module) bool {
|
ctx.WalkDeps(func(child, parent android.Module) bool {
|
||||||
for _, ps := range child.PackagingSpecs() {
|
for _, ps := range child.PackagingSpecs() {
|
||||||
if _, ok := deps[ps.RelPathInPackage()]; ok {
|
if _, ok := deps[ps.RelPathInPackage()]; ok {
|
||||||
@@ -68,3 +69,14 @@ func (s *systemImage) buildLinkerConfigFile(ctx android.ModuleContext, root andr
|
|||||||
builder.Build("conv_linker_config", "Generate linker config protobuf "+output.String())
|
builder.Build("conv_linker_config", "Generate linker config protobuf "+output.String())
|
||||||
return output
|
return output
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Filter the result of GatherPackagingSpecs to discard items targeting outside "system" partition.
|
||||||
|
// Note that "apex" module installs its contents to "apex"(fake partition) as well
|
||||||
|
// for symbol lookup by imitating "activated" paths.
|
||||||
|
func (s *systemImage) filterPackagingSpecs(specs map[string]android.PackagingSpec) {
|
||||||
|
for k, ps := range specs {
|
||||||
|
if ps.Partition() != "system" {
|
||||||
|
delete(specs, k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user