aboutsummaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorPirama Arumuga Nainar <pirama@google.com>2018-03-08 22:56:37 -0800
committerPirama Arumuga Nainar <pirama@google.com>2018-03-09 13:18:28 -0800
commitfb7f985c846d3a1ddcf8b5691620e0eb764fed5e (patch)
tree9460f956b253806e58399fb77ccd7c136bbf7e65 /cc
parentc5a4f3be4589774750d9caafc4a449a381ea87b0 (diff)
downloadbuild_soong-fb7f985c846d3a1ddcf8b5691620e0eb764fed5e.tar.gz
build_soong-fb7f985c846d3a1ddcf8b5691620e0eb764fed5e.tar.bz2
build_soong-fb7f985c846d3a1ddcf8b5691620e0eb764fed5e.zip
Use a versioned profile file if available
Bug: http://b/74395273 Update profile-search logic to look for profile files named <profile_file>.<arbitrary-version> in the profileProject and use that if available. This works around an issue where ccache serves stale cache entries when the profile file has changed. Test: touch toolchain/pgo-profiles/art/dex2oat.profdata.foo and check it gets used. Change-Id: I3de095c263b952cede25af7d0b63dc7280914d76 Merged-In: I3de095c263b952cede25af7d0b63dc7280914d76 (cherry picked from commit 8aed42c798419bb66bfc5214aaa8d0ce8d125958)
Diffstat (limited to 'cc')
-rw-r--r--cc/pgo.go25
1 files changed, 24 insertions, 1 deletions
diff --git a/cc/pgo.go b/cc/pgo.go
index 10c8daca..d39e4290 100644
--- a/cc/pgo.go
+++ b/cc/pgo.go
@@ -16,6 +16,7 @@ package cc
import (
"fmt"
+ "path/filepath"
"strings"
"android/soong/android"
@@ -100,12 +101,34 @@ func (props *PgoProperties) addProfileGatherFlags(ctx ModuleContext, flags Flags
}
func (props *PgoProperties) getPgoProfileFile(ctx BaseModuleContext) android.OptionalPath {
+ profile_file := *props.Pgo.Profile_file
+
// 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)
+ // Bug: http://b/74395273 If the profile_file is unavailable,
+ // use a versioned file named
+ // <profile_file>.<arbitrary-version> when available. This
+ // works around an issue where ccache serves stale cache
+ // entries when the profile file has changed.
+ globPattern := filepath.Join(profileProject, profile_file+".*")
+ versioned_profiles, err := ctx.GlobWithDeps(globPattern, nil)
+ if err != nil {
+ ctx.ModuleErrorf("glob: %s", err.Error())
+ }
+
+ path := android.ExistentPathForSource(ctx, profileProject, profile_file)
if path.Valid() {
+ if len(versioned_profiles) != 0 {
+ ctx.PropertyErrorf("pgo.profile_file", "Profile_file has multiple versions: "+filepath.Join(profileProject, profile_file)+", "+strings.Join(versioned_profiles, ", "))
+ }
return path
}
+
+ if len(versioned_profiles) > 1 {
+ ctx.PropertyErrorf("pgo.profile_file", "Profile_file has multiple versions: "+strings.Join(versioned_profiles, ", "))
+ } else if len(versioned_profiles) == 1 {
+ return android.OptionalPathForPath(android.PathForSource(ctx, versioned_profiles[0]))
+ }
}
// Record that this module's profile file is absent