BaseTools: Library hashing fix and optimization for --hash feature
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1788 In V3: Must generate hashes before attempting to copy from cache for hash verifcation In V2: Build failure caused by passing incorrect boolean parameter to SaveFileOnChange(). Fixed for patch instances. Library hashing is now supported by the --hash feature. The --hash feature implementation assumed that the hashing could be done in place once per module, but that isn't true for libraries due to the fact that they are built as dependencies. So on a clean build, we now generate the .hash after the library dependencies are complete. Added early escape as optimization, if hash already exists in memory. Signed-off-by: Christian Rodriguez <christian.rodriguez@intel.com> Cc: Bob Feng <bob.c.feng@intel.com> Cc: Liming Gao <liming.gao@intel.com> Cc: Yonghong Zhu <yonghong.zhu@intel.com> Reviewed-by: Bob Feng <bob.c.feng@intel.com>
This commit is contained in:
committed by
Feng, Bob C
parent
66b845ae06
commit
a7ef158b07
@ -593,7 +593,7 @@ class BuildTask:
|
||||
#
|
||||
def AddDependency(self, Dependency):
|
||||
for Dep in Dependency:
|
||||
if not Dep.BuildObject.IsBinaryModule:
|
||||
if not Dep.BuildObject.IsBinaryModule and not Dep.BuildObject.CanSkipbyHash():
|
||||
self.DependencyList.append(BuildTask.New(Dep)) # BuildTask list
|
||||
|
||||
## The thread wrapper of LaunchCommand function
|
||||
@ -605,6 +605,11 @@ class BuildTask:
|
||||
try:
|
||||
self.BuildItem.BuildObject.BuildTime = LaunchCommand(Command, WorkingDir)
|
||||
self.CompleteFlag = True
|
||||
|
||||
# Run hash operation post dependency, to account for libs
|
||||
if GlobalData.gUseHashCache and self.BuildItem.BuildObject.IsLibrary:
|
||||
HashFile = path.join(self.BuildItem.BuildObject.BuildDir, self.BuildItem.BuildObject.Name + ".hash")
|
||||
SaveFileOnChange(HashFile, self.BuildItem.BuildObject.GenModuleHash(), True)
|
||||
except:
|
||||
#
|
||||
# TRICK: hide the output of threads left running, so that the user can
|
||||
|
Reference in New Issue
Block a user