diff options
author | Yonghong Zhu <yonghong.zhu@intel.com> | 2017-12-12 15:18:22 +0800 |
---|---|---|
committer | Yonghong Zhu <yonghong.zhu@intel.com> | 2017-12-13 16:06:52 +0800 |
commit | 83397f95f99b0884b27764f8ed13615a500e8fd7 (patch) | |
tree | 7c838dd66c5e836b5cfd987385410263b11056ed /BaseTools/Source/Python | |
parent | 5381ff634203a087fdba81b17c34e3d9b637b406 (diff) | |
download | edk2-83397f95f99b0884b27764f8ed13615a500e8fd7.tar.gz edk2-83397f95f99b0884b27764f8ed13615a500e8fd7.tar.bz2 edk2-83397f95f99b0884b27764f8ed13615a500e8fd7.zip |
BaseTools: back up the binary files when hash value is same
V2: change to use InfBuildData but not ModuleAutoGen
We meet the case that first build with --hash option, then build it
again with --hash and --binary-destination option, since the hash value
is same, tool will not build the driver again, it cause the binary
files are not backed up.
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Diffstat (limited to 'BaseTools/Source/Python')
-rw-r--r-- | BaseTools/Source/Python/AutoGen/AutoGen.py | 13 | ||||
-rw-r--r-- | BaseTools/Source/Python/build/build.py | 5 |
2 files changed, 16 insertions, 2 deletions
diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index 8ad385aac2..b00390ce7d 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -3838,7 +3838,13 @@ class ModuleAutoGen(AutoGen): ## Create AsBuilt INF file the module
#
- def CreateAsBuiltInf(self):
+ def CreateAsBuiltInf(self, IsOnlyCopy = False):
+ self.OutputFile = []
+ if IsOnlyCopy:
+ if GlobalData.gBinCacheDest:
+ self.CopyModuleToCache()
+ return
+
if self.IsAsBuiltInfCreated:
return
@@ -3971,7 +3977,6 @@ class ModuleAutoGen(AutoGen): AsBuiltInfDict['module_pi_specification_version'] += [self.Specification['PI_SPECIFICATION_VERSION']]
OutputDir = self.OutputDir.replace('\\', '/').strip('/')
- self.OutputFile = []
for Item in self.CodaTargetList:
File = Item.Target.Path.replace('\\', '/').strip('/').replace(OutputDir, '').strip('/')
if File not in self.OutputFile:
@@ -4198,8 +4203,12 @@ class ModuleAutoGen(AutoGen): shutil.copy2(HashFile, FileDir)
if os.path.exists(ModuleFile):
shutil.copy2(ModuleFile, FileDir)
+ if not self.OutputFile:
+ Ma = self.Workspace.BuildDatabase[PathClass(ModuleFile), self.Arch, self.BuildTarget, self.ToolChain]
+ self.OutputFile = Ma.Binaries
if self.OutputFile:
for File in self.OutputFile:
+ File = str(File)
if not os.path.isabs(File):
File = os.path.join(self.OutputDir, File)
if os.path.exists(File):
diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py index f94285a964..457f6c9ef7 100644 --- a/BaseTools/Source/Python/build/build.py +++ b/BaseTools/Source/Python/build/build.py @@ -825,6 +825,7 @@ class Build(): self.LoadFixAddress = 0
self.UniFlag = BuildOptions.Flag
self.BuildModules = []
+ self.HashSkipModules = []
self.Db_Flag = False
self.LaunchPrebuildFlag = False
self.PlatformBuildPath = os.path.join(GlobalData.gConfDirectory,'.cache', '.PlatformBuild')
@@ -2016,6 +2017,7 @@ class Build(): if Ma == None:
continue
if Ma.CanSkipbyHash():
+ self.HashSkipModules.append(Ma)
continue
# Not to auto-gen for targets 'clean', 'cleanlib', 'cleanall', 'run', 'fds'
@@ -2214,7 +2216,10 @@ class Build(): def CreateAsBuiltInf(self):
for Module in self.BuildModules:
Module.CreateAsBuiltInf()
+ for Module in self.HashSkipModules:
+ Module.CreateAsBuiltInf(True)
self.BuildModules = []
+ self.HashSkipModules = []
## Do some clean-up works when error occurred
def Relinquish(self):
OldLogLevel = EdkLogger.GetLevel()
|