diff options
author | Pirama Arumuga Nainar <pirama@google.com> | 2018-03-08 22:56:37 -0800 |
---|---|---|
committer | Pirama Arumuga Nainar <pirama@google.com> | 2018-03-09 13:18:28 -0800 |
commit | fb7f985c846d3a1ddcf8b5691620e0eb764fed5e (patch) | |
tree | 9460f956b253806e58399fb77ccd7c136bbf7e65 /cc | |
parent | c5a4f3be4589774750d9caafc4a449a381ea87b0 (diff) | |
download | build_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.go | 25 |
1 files changed, 24 insertions, 1 deletions
@@ -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 |