Add logtags support to filesystem module

If build_logtags is set to true, etc/event-log-tags will be built by
collecting all logtags files from all dependencies.

Note that this is different from Makefile's current behavior that
collects all logtags files, including ones from uninstalled modules. But
the behavior is probably unintended, and ideally each partition image
should have its own logtags, rather than putting all tags to /system.

Bug: 336189540
Test: m aosp_cf_system_x86_64
Change-Id: I72b384cbb65e812af909eacd18799bd86f1dab13
This commit is contained in:
Inseob Kim 2024-04-30 10:51:47 +09:00
parent 17ce834beb
commit b7b8457a60

View file

@ -127,6 +127,10 @@ type filesystemProperties struct {
// the make version.
Include_make_built_files string
// When set, builds etc/event-log-tags file by merging logtags from all dependencies.
// Default is false
Build_logtags *bool
Fsverity fsverityProperties
}
@ -288,6 +292,7 @@ func (f *filesystem) buildImageUsingBuildImage(ctx android.ModuleContext) androi
f.buildNonDepsFiles(ctx, builder, rootDir)
f.addMakeBuiltFiles(ctx, builder, rootDir)
f.buildFsverityMetadataFiles(ctx, builder, specs, rootDir, rebasedDir)
f.buildEventLogtagsFile(ctx, builder, rebasedDir)
// run host_init_verifier
// Ideally we should have a concept of pluggable linters that verify the generated image.
@ -428,6 +433,7 @@ func (f *filesystem) buildCpioImage(ctx android.ModuleContext, compressed bool)
f.buildNonDepsFiles(ctx, builder, rootDir)
f.buildFsverityMetadataFiles(ctx, builder, specs, rootDir, rebasedDir)
f.buildEventLogtagsFile(ctx, builder, rebasedDir)
output := android.PathForModuleOut(ctx, f.installFileName()).OutputPath
cmd := builder.Command().
@ -485,6 +491,37 @@ func (f *filesystem) addMakeBuiltFiles(ctx android.ModuleContext, builder *andro
Text(android.PathForArbitraryOutput(ctx, stagingDir).String())
}
func (f *filesystem) buildEventLogtagsFile(ctx android.ModuleContext, builder *android.RuleBuilder, rebasedDir android.OutputPath) {
if !proptools.Bool(f.properties.Build_logtags) {
return
}
logtagsFilePaths := make(map[string]bool)
ctx.WalkDeps(func(child, parent android.Module) bool {
if logtagsInfo, ok := android.OtherModuleProvider(ctx, child, android.LogtagsProviderKey); ok {
for _, path := range logtagsInfo.Logtags {
logtagsFilePaths[path.String()] = true
}
}
return true
})
if len(logtagsFilePaths) == 0 {
return
}
etcPath := rebasedDir.Join(ctx, "etc")
eventLogtagsPath := etcPath.Join(ctx, "event-log-tags")
builder.Command().Text("mkdir").Flag("-p").Text(etcPath.String())
cmd := builder.Command().BuiltTool("merge-event-log-tags").
FlagWithArg("-o ", eventLogtagsPath.String()).
FlagWithInput("-m ", android.MergedLogtagsPath(ctx))
for _, path := range android.SortedKeys(logtagsFilePaths) {
cmd.Text(path)
}
}
type partition interface {
PartitionType() string
}