Search for PGO profiles in PGO_ADDITIONAL_PROFILE_DIRS
This variable can be set in BoardConfig.mk to specify a list of
additional paths that contain PGO profiles. These directories are
searched after the predefined paths in soong/cc/pgo.go while finding
PGO profiles.
Test: Set this variable in a BoardConfig and verify that such profiles
are found and that these paths are searched after the predefined paths
in soong/cc/pgo.go.
Change-Id: I0bb9523de614d0f23aba8d51c887d8fc8f41c993
diff --git a/cc/pgo.go b/cc/pgo.go
index 3ce67be..1e70339 100644
--- a/cc/pgo.go
+++ b/cc/pgo.go
@@ -27,17 +27,24 @@
// some functions
profileUseOtherFlags = []string{"-Wno-backend-plugin"}
- pgoProfileProjects = []string{
+ globalPgoProfileProjects = []string{
"toolchain/pgo-profiles",
"vendor/google_data/pgo-profiles",
}
)
+const pgoProfileProjectsConfigKey = "PgoProfileProjects"
const profileInstrumentFlag = "-fprofile-generate=/data/local/tmp"
const profileSamplingFlag = "-gline-tables-only"
const profileUseInstrumentFormat = "-fprofile-use=%s"
const profileUseSamplingFormat = "-fprofile-sample-use=%s"
+func getPgoProfileProjects(config android.DeviceConfig) []string {
+ return config.OnceStringSlice(pgoProfileProjectsConfigKey, func() []string {
+ return append(globalPgoProfileProjects, config.PgoAdditionalProfileDirs()...)
+ })
+}
+
func recordMissingProfileFile(ctx ModuleContext, missing string) {
getNamedMapForConfig(ctx.Config(), modulesMissingProfileFile).Store(missing, true)
}
@@ -92,8 +99,8 @@
}
func (props *PgoProperties) getPgoProfileFile(ctx ModuleContext) android.OptionalPath {
- // Test if the profile_file is present in any of the pgoProfileProjects
- for _, profileProject := range pgoProfileProjects {
+ // Test if the profile_file is present in any of the PGO profile projects
+ for _, profileProject := range getPgoProfileProjects(ctx.DeviceConfig()) {
path := android.ExistentPathForSource(ctx, "", profileProject, *props.Pgo.Profile_file)
if path.Valid() {
return path