From 28316d4e3b0b959b1aca7a255fe94cba00ca1758 Mon Sep 17 00:00:00 2001 From: Pirama Arumuga Nainar Date: Mon, 29 Jan 2018 09:18:45 -0800 Subject: [PATCH] Store missing profile files into a Make variable Bug: http://b/72642679 Store missing profile files and the modules that refer to them in the SOONG_MODULES_MISSING_PGO_PROFILE_FILE variable passed to Make. The contents of this variable will be written to $DIST_DIR/pgo_profile_file_missing.txt as part of the 'dist' target. Test: 'm dist' and verify creation of pgo_profile_file_missing.txt. Change-Id: I237cd0398be418be2b7db6fa65ece5ef347ecbc1 --- cc/compiler.go | 2 +- cc/makevars.go | 10 ++++++---- cc/pgo.go | 8 ++++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/cc/compiler.go b/cc/compiler.go index 9b69114a6..0d8e3a165 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -226,7 +226,7 @@ func warningsAreAllowed(subdir string) bool { } func addToModuleList(ctx ModuleContext, list string, module string) { - getWallWerrorMap(ctx.Config(), list).Store(module, true) + getNamedMapForConfig(ctx.Config(), list).Store(module, true) } // Create a Flags struct that collects the compile flags from global values, diff --git a/cc/makevars.go b/cc/makevars.go index 5faf2018c..779de8f3a 100644 --- a/cc/makevars.go +++ b/cc/makevars.go @@ -25,22 +25,23 @@ import ( ) const ( - modulesAddedWall = "ModulesAddedWall" - modulesUsingWnoError = "ModulesUsingWnoError" + modulesAddedWall = "ModulesAddedWall" + modulesUsingWnoError = "ModulesUsingWnoError" + modulesMissingProfileFile = "ModulesMissingProfileFile" ) func init() { android.RegisterMakeVarsProvider(pctx, makeVarsProvider) } -func getWallWerrorMap(config android.Config, name string) *sync.Map { +func getNamedMapForConfig(config android.Config, name string) *sync.Map { return config.Once(name, func() interface{} { return &sync.Map{} }).(*sync.Map) } func makeStringOfKeys(ctx android.MakeVarsContext, setName string) string { - set := getWallWerrorMap(ctx.Config(), setName) + set := getNamedMapForConfig(ctx.Config(), setName) keys := []string{} set.Range(func(key interface{}, value interface{}) bool { keys = append(keys, key.(string)) @@ -102,6 +103,7 @@ func makeVarsProvider(ctx android.MakeVarsContext) { ctx.Strict("ANDROID_WARNING_ALLOWED_PROJECTS", makeStringOfWarningAllowedProjects()) ctx.Strict("SOONG_MODULES_ADDED_WALL", makeStringOfKeys(ctx, modulesAddedWall)) ctx.Strict("SOONG_MODULES_USING_WNO_ERROR", makeStringOfKeys(ctx, modulesUsingWnoError)) + ctx.Strict("SOONG_MODULES_MISSING_PGO_PROFILE_FILE", makeStringOfKeys(ctx, modulesMissingProfileFile)) ctx.Strict("ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS", strings.Join(asanCflags, " ")) ctx.Strict("ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS", strings.Join(asanLdflags, " ")) diff --git a/cc/pgo.go b/cc/pgo.go index 758c3d6d5..3ce67be7a 100644 --- a/cc/pgo.go +++ b/cc/pgo.go @@ -38,6 +38,10 @@ const profileSamplingFlag = "-gline-tables-only" const profileUseInstrumentFormat = "-fprofile-use=%s" const profileUseSamplingFormat = "-fprofile-sample-use=%s" +func recordMissingProfileFile(ctx ModuleContext, missing string) { + getNamedMapForConfig(ctx.Config(), modulesMissingProfileFile).Store(missing, true) +} + type PgoProperties struct { Pgo struct { Instrumentation *bool @@ -96,6 +100,10 @@ func (props *PgoProperties) getPgoProfileFile(ctx ModuleContext) android.Optiona } } + // Record that this module's profile file is absent + missing := *props.Pgo.Profile_file + ":" + ctx.ModuleDir() + "/Android.bp:" + ctx.ModuleName() + recordMissingProfileFile(ctx, missing) + return android.OptionalPathForPath(nil) }