Merge logtags from cc modules too

Merged logtags files will be used for Soong built filesystem images.

Bug: 336189540
Test: m out/soong/.intermediates/all-event-log-tags.txt
Test: m out/target/common/obj/all-event-log-tags.txt
Change-Id: Ib590c2bc8073e9acee6b45ef08092768237cf9d3
This commit is contained in:
Inseob Kim 2024-04-29 15:54:44 +09:00
parent 2d5e7579d4
commit 37e0bb0db4
8 changed files with 72 additions and 48 deletions

View file

@ -60,6 +60,7 @@ bootstrap_go_package {
"license_metadata.go", "license_metadata.go",
"license_sdk_member.go", "license_sdk_member.go",
"licenses.go", "licenses.go",
"logtags.go",
"makevars.go", "makevars.go",
"metrics.go", "metrics.go",
"module.go", "module.go",

56
android/logtags.go Normal file
View file

@ -0,0 +1,56 @@
// Copyright 2024 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package android
import "github.com/google/blueprint"
func init() {
RegisterParallelSingletonType("logtags", LogtagsSingleton)
}
type LogtagsInfo struct {
Logtags Paths
}
var LogtagsProviderKey = blueprint.NewProvider[*LogtagsInfo]()
func LogtagsSingleton() Singleton {
return &logtagsSingleton{}
}
type logtagsSingleton struct{}
func MergedLogtagsPath(ctx PathContext) OutputPath {
return PathForIntermediates(ctx, "all-event-log-tags.txt")
}
func (l *logtagsSingleton) GenerateBuildActions(ctx SingletonContext) {
var allLogtags Paths
ctx.VisitAllModules(func(module Module) {
if !module.ExportedToMake() {
return
}
if logtagsInfo, ok := SingletonModuleProvider(ctx, module, LogtagsProviderKey); ok {
allLogtags = append(allLogtags, logtagsInfo.Logtags...)
}
})
builder := NewRuleBuilder(pctx, ctx)
builder.Command().
BuiltTool("merge-event-log-tags").
FlagWithOutput("-o ", MergedLogtagsPath(ctx)).
Inputs(SortedUniquePaths(allLogtags))
builder.Build("all-event-log-tags.txt", "merge logtags")
}

View file

@ -151,7 +151,7 @@ func init() {
"LOCAL_CLANG_CFLAGS": "clang_cflags", "LOCAL_CLANG_CFLAGS": "clang_cflags",
"LOCAL_YACCFLAGS": "yacc.flags", "LOCAL_YACCFLAGS": "yacc.flags",
"LOCAL_SANITIZE_RECOVER": "sanitize.recover", "LOCAL_SANITIZE_RECOVER": "sanitize.recover",
"LOCAL_LOGTAGS_FILES": "logtags", "LOCAL_SOONG_LOGTAGS_FILES": "logtags",
"LOCAL_EXPORT_HEADER_LIBRARY_HEADERS": "export_header_lib_headers", "LOCAL_EXPORT_HEADER_LIBRARY_HEADERS": "export_header_lib_headers",
"LOCAL_EXPORT_SHARED_LIBRARY_HEADERS": "export_shared_lib_headers", "LOCAL_EXPORT_SHARED_LIBRARY_HEADERS": "export_shared_lib_headers",
"LOCAL_EXPORT_STATIC_LIBRARY_HEADERS": "export_static_lib_headers", "LOCAL_EXPORT_STATIC_LIBRARY_HEADERS": "export_static_lib_headers",

View file

@ -88,7 +88,7 @@ func (c *Module) AndroidMkEntries() []android.AndroidMkEntries {
ExtraEntries: []android.AndroidMkExtraEntriesFunc{ ExtraEntries: []android.AndroidMkExtraEntriesFunc{
func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) { func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
if len(c.Properties.Logtags) > 0 { if len(c.Properties.Logtags) > 0 {
entries.AddStrings("LOCAL_LOGTAGS_FILES", c.Properties.Logtags...) entries.AddStrings("LOCAL_SOONG_LOGTAGS_FILES", c.logtagsPaths.Strings()...)
} }
// Note: Pass the exact value of AndroidMkSystemSharedLibs to the Make // Note: Pass the exact value of AndroidMkSystemSharedLibs to the Make
// world, even if it is an empty list. In the Make world, // world, even if it is an empty list. In the Make world,

View file

@ -319,7 +319,7 @@ type BaseProperties struct {
// *.logtags files, to combine together in order to generate the /system/etc/event-log-tags // *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
// file // file
Logtags []string Logtags []string `android:"path"`
// Make this module available when building for ramdisk. // Make this module available when building for ramdisk.
// On device without a dedicated recovery partition, the module is only // On device without a dedicated recovery partition, the module is only
@ -908,6 +908,8 @@ type Module struct {
// Aconfig files for all transitive deps. Also exposed via TransitiveDeclarationsInfo // Aconfig files for all transitive deps. Also exposed via TransitiveDeclarationsInfo
mergedAconfigFiles map[string]android.Paths mergedAconfigFiles map[string]android.Paths
logtagsPaths android.Paths
} }
func (c *Module) AddJSONData(d *map[string]interface{}) { func (c *Module) AddJSONData(d *map[string]interface{}) {
@ -1997,6 +1999,11 @@ func (d *Defaults) GenerateAndroidBuildActions(ctx android.ModuleContext) {
func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
ctx := moduleContextFromAndroidModuleContext(actx, c) ctx := moduleContextFromAndroidModuleContext(actx, c)
c.logtagsPaths = android.PathsForModuleSrc(actx, c.Properties.Logtags)
android.SetProvider(ctx, android.LogtagsProviderKey, &android.LogtagsInfo{
Logtags: c.logtagsPaths,
})
// If Test_only is set on a module in bp file, respect the setting, otherwise // If Test_only is set on a module in bp file, respect the setting, otherwise
// see if is a known test module type. // see if is a known test module type.
testOnly := c.testModule || c.testLibrary() testOnly := c.testModule || c.testLibrary()

View file

@ -92,11 +92,7 @@ func (library *Library) AndroidMkEntries() []android.AndroidMkEntries {
ExtraEntries: []android.AndroidMkExtraEntriesFunc{ ExtraEntries: []android.AndroidMkExtraEntriesFunc{
func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) { func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
if len(library.logtagsSrcs) > 0 { if len(library.logtagsSrcs) > 0 {
var logtags []string entries.AddStrings("LOCAL_SOONG_LOGTAGS_FILES", library.logtagsSrcs.Strings()...)
for _, l := range library.logtagsSrcs {
logtags = append(logtags, l.Rel())
}
entries.AddStrings("LOCAL_LOGTAGS_FILES", logtags...)
} }
if library.installFile == nil { if library.installFile == nil {

View file

@ -27,7 +27,6 @@ import (
func init() { func init() {
pctx.SourcePathVariable("logtagsCmd", "build/make/tools/java-event-log-tags.py") pctx.SourcePathVariable("logtagsCmd", "build/make/tools/java-event-log-tags.py")
pctx.SourcePathVariable("mergeLogtagsCmd", "build/make/tools/merge-event-log-tags.py")
pctx.SourcePathVariable("logtagsLib", "build/make/tools/event_log_tags.py") pctx.SourcePathVariable("logtagsLib", "build/make/tools/event_log_tags.py")
} }
@ -37,12 +36,6 @@ var (
Command: "$logtagsCmd -o $out $in", Command: "$logtagsCmd -o $out $in",
CommandDeps: []string{"$logtagsCmd", "$logtagsLib"}, CommandDeps: []string{"$logtagsCmd", "$logtagsLib"},
}) })
mergeLogtags = pctx.AndroidStaticRule("mergeLogtags",
blueprint.RuleParams{
Command: "$mergeLogtagsCmd -o $out $in",
CommandDeps: []string{"$mergeLogtagsCmd", "$logtagsLib"},
})
) )
func genAidl(ctx android.ModuleContext, aidlFiles android.Paths, aidlGlobalFlags string, aidlIndividualFlags map[string]string, deps android.Paths) android.Paths { func genAidl(ctx android.ModuleContext, aidlFiles android.Paths, aidlGlobalFlags string, aidlIndividualFlags map[string]string, deps android.Paths) android.Paths {
@ -178,37 +171,9 @@ func (j *Module) genSources(ctx android.ModuleContext, srcFiles android.Paths,
outSrcFiles = append(outSrcFiles, srcJarFiles...) outSrcFiles = append(outSrcFiles, srcJarFiles...)
} }
android.SetProvider(ctx, android.LogtagsProviderKey, &android.LogtagsInfo{
Logtags: j.logtagsSrcs,
})
return outSrcFiles return outSrcFiles
} }
func LogtagsSingleton() android.Singleton {
return &logtagsSingleton{}
}
type logtagsProducer interface {
logtags() android.Paths
}
func (j *Module) logtags() android.Paths {
return j.logtagsSrcs
}
var _ logtagsProducer = (*Module)(nil)
type logtagsSingleton struct{}
func (l *logtagsSingleton) GenerateBuildActions(ctx android.SingletonContext) {
var allLogtags android.Paths
ctx.VisitAllModules(func(module android.Module) {
if logtags, ok := module.(logtagsProducer); ok {
allLogtags = append(allLogtags, logtags.logtags()...)
}
})
ctx.Build(pctx, android.BuildParams{
Rule: mergeLogtags,
Description: "merge logtags",
Output: android.PathForIntermediates(ctx, "all-event-log-tags.txt"),
Inputs: allLogtags,
})
}

View file

@ -75,7 +75,6 @@ func registerJavaBuildComponents(ctx android.RegistrationContext) {
ctx.BottomUp("jacoco_deps", jacocoDepsMutator).Parallel() ctx.BottomUp("jacoco_deps", jacocoDepsMutator).Parallel()
}) })
ctx.RegisterParallelSingletonType("logtags", LogtagsSingleton)
ctx.RegisterParallelSingletonType("kythe_java_extract", kytheExtractJavaFactory) ctx.RegisterParallelSingletonType("kythe_java_extract", kytheExtractJavaFactory)
} }