From cc942105ede58a300ba46f3df0edfa86b3abd4dd Mon Sep 17 00:00:00 2001 From: Chasel Chiu Date: Thu, 1 Oct 2020 09:48:50 +0800 Subject: IntelFsp2Pkg/GenCfgOpt: skip unnecessarily header/BSF recreating. REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2967 When no change in FSP UPD DSC files, GenCfgOpt.py should skip recreating UPD header and BSF files. This patch added a check to handle this case. Cc: Maurice Ma Cc: Nate DeSimone Cc: Star Zeng Signed-off-by: Chasel Chiu Reviewed-by: Nate DeSimone Reviewed-by: Liming Gao --- IntelFsp2Pkg/Tools/GenCfgOpt.py | 60 ++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 18 deletions(-) (limited to 'IntelFsp2Pkg') diff --git a/IntelFsp2Pkg/Tools/GenCfgOpt.py b/IntelFsp2Pkg/Tools/GenCfgOpt.py index bcced590ce..af7e14a10a 100644 --- a/IntelFsp2Pkg/Tools/GenCfgOpt.py +++ b/IntelFsp2Pkg/Tools/GenCfgOpt.py @@ -810,6 +810,17 @@ EndList SubItem['value'] = valuestr return Error + def NoDscFileChange (self, OutPutFile): + NoFileChange = True + if not os.path.exists(OutPutFile): + NoFileChange = False + else: + DscTime = os.path.getmtime(self._DscFile) + OutputTime = os.path.getmtime(OutPutFile) + if DscTime > OutputTime: + NoFileChange = False + return NoFileChange + def CreateSplitUpdTxt (self, UpdTxtFile): GuidList = ['FSP_T_UPD_TOOL_GUID','FSP_M_UPD_TOOL_GUID','FSP_S_UPD_TOOL_GUID'] SignatureList = ['0x545F', '0x4D5F','0x535F'] # _T, _M, and _S signature for FSPT, FSPM, FSPS @@ -823,16 +834,7 @@ EndList if UpdTxtFile == '': UpdTxtFile = os.path.join(FvDir, self._MacroDict[GuidList[Index]] + '.txt') - ReCreate = False - if not os.path.exists(UpdTxtFile): - ReCreate = True - else: - DscTime = os.path.getmtime(self._DscFile) - TxtTime = os.path.getmtime(UpdTxtFile) - if DscTime > TxtTime: - ReCreate = True - - if not ReCreate: + if (self.NoDscFileChange (UpdTxtFile)): # DSC has not been modified yet # So don't have to re-generate other files self.Error = 'No DSC file change, skip to create UPD TXT file' @@ -1056,7 +1058,11 @@ EndList HeaderFile = os.path.join(FvDir, HeaderFileName) # Check if header needs to be recreated - ReCreate = False + if (self.NoDscFileChange (HeaderFile)): + # DSC has not been modified yet + # So don't have to re-generate other files + self.Error = 'No DSC file change, skip to create UPD header file' + return 256 TxtBody = [] for Item in self._CfgItemList: @@ -1382,6 +1388,12 @@ EndList self.Error = "BSF output file '%s' is invalid" % BsfFile return 1 + if (self.NoDscFileChange (BsfFile)): + # DSC has not been modified yet + # So don't have to re-generate other files + self.Error = 'No DSC file change, skip to create UPD BSF file' + return 256 + Error = 0 OptionDict = {} BsfFd = open(BsfFile, "w") @@ -1467,7 +1479,7 @@ EndList def Usage(): - print ("GenCfgOpt Version 0.55") + print ("GenCfgOpt Version 0.56") print ("Usage:") print (" GenCfgOpt UPDTXT PlatformDscFile BuildFvDir [-D Macros]") print (" GenCfgOpt HEADER PlatformDscFile BuildFvDir InputHFile [-D Macros]") @@ -1529,13 +1541,25 @@ def Main(): print ("ERROR: %s !" % (GenCfgOpt.Error)) return Ret elif sys.argv[1] == "HEADER": - if GenCfgOpt.CreateHeaderFile(OutFile) != 0: - print ("ERROR: %s !" % GenCfgOpt.Error) - return 8 + Ret = GenCfgOpt.CreateHeaderFile(OutFile) + if Ret != 0: + # No change is detected + if Ret == 256: + print ("INFO: %s !" % (GenCfgOpt.Error)) + else : + print ("ERROR: %s !" % (GenCfgOpt.Error)) + return 8 + return Ret elif sys.argv[1] == "GENBSF": - if GenCfgOpt.GenerateBsfFile(OutFile) != 0: - print ("ERROR: %s !" % GenCfgOpt.Error) - return 9 + Ret = GenCfgOpt.GenerateBsfFile(OutFile) + if Ret != 0: + # No change is detected + if Ret == 256: + print ("INFO: %s !" % (GenCfgOpt.Error)) + else : + print ("ERROR: %s !" % (GenCfgOpt.Error)) + return 9 + return Ret else: if argc < 5: Usage() -- cgit v1.2.3