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 <maurice.ma@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Signed-off-by: Chasel Chiu <chasel.chiu@intel.com>
Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
This commit is contained in:
Chasel Chiu 2020-10-01 09:48:50 +08:00 committed by mergify[bot]
parent ae511331e0
commit cc942105ed
1 changed files with 42 additions and 18 deletions

View File

@ -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()