fInputfile.close ()\r
return OutputName\r
\r
+ @cached_property\r
+ def OutputFile(self):\r
+ retVal = set()\r
+ OutputDir = self.OutputDir.replace('\\', '/').strip('/')\r
+ DebugDir = self.DebugDir.replace('\\', '/').strip('/')\r
+ for Item in self.CodaTargetList:\r
+ File = Item.Target.Path.replace('\\', '/').strip('/').replace(DebugDir, '').replace(OutputDir, '').strip('/')\r
+ retVal.add(File)\r
+ if self.DepexGenerated:\r
+ retVal.add(self.Name + '.depex')\r
+\r
+ Bin = self._GenOffsetBin()\r
+ if Bin:\r
+ retVal.add(Bin)\r
+\r
+ for Root, Dirs, Files in os.walk(OutputDir):\r
+ for File in Files:\r
+ if File.lower().endswith('.pdb'):\r
+ retVal.add(File)\r
+\r
+ return retVal\r
+\r
## Create AsBuilt INF file the module\r
#\r
def CreateAsBuiltInf(self):\r
- self.OutputFile = set()\r
\r
if self.IsAsBuiltInfCreated:\r
return\r
\r
# Skip INF file generation for libraries\r
if self.IsLibrary:\r
- # Only store the library cache if needed\r
- if GlobalData.gBinCacheDest:\r
- self.CopyModuleToCache()\r
return\r
\r
# Skip the following code for modules with no source files\r
DebugDir = self.DebugDir.replace('\\', '/').strip('/')\r
for Item in self.CodaTargetList:\r
File = Item.Target.Path.replace('\\', '/').strip('/').replace(DebugDir, '').replace(OutputDir, '').strip('/')\r
- self.OutputFile.add(File)\r
if os.path.isabs(File):\r
File = File.replace('\\', '/').strip('/').replace(OutputDir, '').strip('/')\r
if Item.Target.Ext.lower() == '.aml':\r
if os.path.exists(DepexFile):\r
self.DepexGenerated = True\r
if self.DepexGenerated:\r
- self.OutputFile.add(self.Name + '.depex')\r
if self.ModuleType in [SUP_MODULE_PEIM]:\r
AsBuiltInfDict['binary_item'].append('PEI_DEPEX|' + self.Name + '.depex')\r
elif self.ModuleType in [SUP_MODULE_DXE_DRIVER, SUP_MODULE_DXE_RUNTIME_DRIVER, SUP_MODULE_DXE_SAL_DRIVER, SUP_MODULE_UEFI_DRIVER]:\r
Bin = self._GenOffsetBin()\r
if Bin:\r
AsBuiltInfDict['binary_item'].append('BIN|%s' % Bin)\r
- self.OutputFile.add(Bin)\r
\r
for Root, Dirs, Files in os.walk(OutputDir):\r
for File in Files:\r
if File.lower().endswith('.pdb'):\r
AsBuiltInfDict['binary_item'].append('DISPOSABLE|' + File)\r
- self.OutputFile.add(File)\r
HeaderComments = self.Module.HeaderComments\r
StartPos = 0\r
for Index in range(len(HeaderComments)):\r
SaveFileOnChange(os.path.join(self.OutputDir, self.Name + '.inf'), str(AsBuiltInf), False)\r
\r
self.IsAsBuiltInfCreated = True\r
- if GlobalData.gBinCacheDest:\r
- self.CopyModuleToCache()\r
\r
def CopyModuleToCache(self):\r
FileDir = path.join(GlobalData.gBinCacheDest, self.PlatformInfo.OutputDir, self.BuildTarget + "_" + self.ToolChain, self.Arch, self.SourceDir, self.MetaFile.BaseName)\r
HashFile = path.join(self.BuildDir, self.Name + '.hash')\r
if os.path.exists(HashFile):\r
CopyFileOnChange(HashFile, FileDir)\r
- if not self.IsLibrary:\r
- ModuleFile = path.join(self.OutputDir, self.Name + '.inf')\r
- if os.path.exists(ModuleFile):\r
- CopyFileOnChange(ModuleFile, FileDir)\r
- else:\r
- OutputDir = self.OutputDir.replace('\\', '/').strip('/')\r
- DebugDir = self.DebugDir.replace('\\', '/').strip('/')\r
- for Item in self.CodaTargetList:\r
- File = Item.Target.Path.replace('\\', '/').strip('/').replace(DebugDir, '').replace(OutputDir, '').strip('/')\r
- self.OutputFile.add(File)\r
+ ModuleFile = path.join(self.OutputDir, self.Name + '.inf')\r
+ if os.path.exists(ModuleFile):\r
+ CopyFileOnChange(ModuleFile, FileDir)\r
+\r
if not self.OutputFile:\r
Ma = self.BuildDatabase[self.MetaFile, self.Arch, self.BuildTarget, self.ToolChain]\r
self.OutputFile = Ma.Binaries\r
- if self.OutputFile:\r
- for File in self.OutputFile:\r
- File = str(File)\r
- if not os.path.isabs(File):\r
- File = os.path.join(self.OutputDir, File)\r
- if os.path.exists(File):\r
- sub_dir = os.path.relpath(File, self.OutputDir)\r
- destination_file = os.path.join(FileDir, sub_dir)\r
- destination_dir = os.path.dirname(destination_file)\r
- CreateDirectory(destination_dir)\r
- CopyFileOnChange(File, destination_dir)\r
+\r
+ for File in self.OutputFile:\r
+ File = str(File)\r
+ if not os.path.isabs(File):\r
+ File = os.path.join(self.OutputDir, File)\r
+ if os.path.exists(File):\r
+ sub_dir = os.path.relpath(File, self.OutputDir)\r
+ destination_file = os.path.join(FileDir, sub_dir)\r
+ destination_dir = os.path.dirname(destination_file)\r
+ CreateDirectory(destination_dir)\r
+ CopyFileOnChange(File, destination_dir)\r
\r
def AttemptModuleCacheCopy(self):\r
# If library or Module is binary do not skip by hash\r
BuildCommand = BuildCommand + [Target]\r
LaunchCommand(BuildCommand, AutoGenObject.MakeFileDir)\r
self.CreateAsBuiltInf()\r
+ if GlobalData.gBinCacheDest:\r
+ self.UpdateBuildCache()\r
+ self.BuildModules = []\r
return True\r
\r
# build library\r
NewBuildCommand = BuildCommand + ['-f', os.path.normpath(os.path.join(Mod, makefile)), 'pbuild']\r
LaunchCommand(NewBuildCommand, AutoGenObject.MakeFileDir)\r
self.CreateAsBuiltInf()\r
+ if GlobalData.gBinCacheDest:\r
+ self.UpdateBuildCache()\r
+ self.BuildModules = []\r
return True\r
\r
# cleanlib\r
BuildCommand = BuildCommand + [Target]\r
AutoGenObject.BuildTime = LaunchCommand(BuildCommand, AutoGenObject.MakeFileDir)\r
self.CreateAsBuiltInf()\r
+ if GlobalData.gBinCacheDest:\r
+ self.UpdateBuildCache()\r
+ self.BuildModules = []\r
return True\r
\r
# genfds\r
ExitFlag.set()\r
BuildTask.WaitForComplete()\r
self.CreateAsBuiltInf()\r
+ if GlobalData.gBinCacheDest:\r
+ self.UpdateBuildCache()\r
+ self.BuildModules = []\r
self.MakeTime += int(round((time.time() - MakeContiue)))\r
if BuildTask.HasError():\r
self.invalidateHash()\r
ExitFlag.set()\r
BuildTask.WaitForComplete()\r
self.CreateAsBuiltInf()\r
+ if GlobalData.gBinCacheDest:\r
+ self.UpdateBuildCache()\r
+ self.BuildModules = []\r
self.MakeTime += int(round((time.time() - MakeContiue)))\r
#\r
# Check for build error, and raise exception if one\r
RemoveDirectory(os.path.dirname(GlobalData.gDatabasePath), True)\r
\r
def CreateAsBuiltInf(self):\r
+ for Module in self.BuildModules:\r
+ Module.CreateAsBuiltInf()\r
+\r
+ def UpdateBuildCache(self):\r
all_lib_set = set()\r
all_mod_set = set()\r
for Module in self.BuildModules:\r
- Module.CreateAsBuiltInf()\r
+ Module.CopyModuleToCache()\r
all_mod_set.add(Module)\r
for Module in self.HashSkipModules:\r
- if GlobalData.gBinCacheDest:\r
- Module.CopyModuleToCache()\r
+ Module.CopyModuleToCache()\r
all_mod_set.add(Module)\r
for Module in all_mod_set:\r
for lib in Module.LibraryAutoGenList:\r
all_lib_set.add(lib)\r
for lib in all_lib_set:\r
- if GlobalData.gBinCacheDest:\r
- lib.CopyModuleToCache()\r
+ lib.CopyModuleToCache()\r
all_lib_set.clear()\r
all_mod_set.clear()\r
- self.BuildModules = []\r
self.HashSkipModules = []\r
## Do some clean-up works when error occurred\r
def Relinquish(self):\r