From b7b8457a60a52bd2ba2782d8600807bd1655cc87 Mon Sep 17 00:00:00 2001 From: Inseob Kim Date: Tue, 30 Apr 2024 10:51:47 +0900 Subject: [PATCH] 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 --- filesystem/filesystem.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go index cadf9c246..3bbf9f3e6 100644 --- a/filesystem/filesystem.go +++ b/filesystem/filesystem.go @@ -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 }