BaseTools: Reset FdsGlobalVariable

https://bugzilla.tianocore.org/show_bug.cgi?id=1418
This patch is going to fix a regression issue that is introduced
by commit b3497bad12.

Before commit b3497b, build launched a external GenFds.py to generate
Fd, so the global variable in GenFds.py was reset in each execution.

After commit b3497b, each GenFds run in the same python interpeter, so
we need to explicitly reset global variable in each GenFdsApi call.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
This commit is contained in:
Feng, Bob C 2018-12-20 19:12:12 +08:00 committed by BobCF
parent b70ec0de46
commit abc4c3386a
1 changed files with 51 additions and 0 deletions

View File

@ -41,6 +41,8 @@ from Workspace.WorkspaceDatabase import WorkspaceDatabase
from .FdfParser import FdfParser, Warning
from .GenFdsGlobalVariable import GenFdsGlobalVariable
from .FfsFileStatement import FileStatement
import Common.DataType as DataType
from struct import Struct
## Version and Copyright
versionNumber = "1.0" + ' ' + gBUILD_VERSION
@ -62,11 +64,60 @@ def main():
EdkLogger.Initialize()
return GenFdsApi(OptionsToCommandDict(Options))
def resetFdsGlobalVariable():
GenFdsGlobalVariable.FvDir = ''
GenFdsGlobalVariable.OutputDirDict = {}
GenFdsGlobalVariable.BinDir = ''
# will be FvDir + os.sep + 'Ffs'
GenFdsGlobalVariable.FfsDir = ''
GenFdsGlobalVariable.FdfParser = None
GenFdsGlobalVariable.LibDir = ''
GenFdsGlobalVariable.WorkSpace = None
GenFdsGlobalVariable.WorkSpaceDir = ''
GenFdsGlobalVariable.ConfDir = ''
GenFdsGlobalVariable.EdkSourceDir = ''
GenFdsGlobalVariable.OutputDirFromDscDict = {}
GenFdsGlobalVariable.TargetName = ''
GenFdsGlobalVariable.ToolChainTag = ''
GenFdsGlobalVariable.RuleDict = {}
GenFdsGlobalVariable.ArchList = None
GenFdsGlobalVariable.VtfDict = {}
GenFdsGlobalVariable.ActivePlatform = None
GenFdsGlobalVariable.FvAddressFileName = ''
GenFdsGlobalVariable.VerboseMode = False
GenFdsGlobalVariable.DebugLevel = -1
GenFdsGlobalVariable.SharpCounter = 0
GenFdsGlobalVariable.SharpNumberPerLine = 40
GenFdsGlobalVariable.FdfFile = ''
GenFdsGlobalVariable.FdfFileTimeStamp = 0
GenFdsGlobalVariable.FixedLoadAddress = False
GenFdsGlobalVariable.PlatformName = ''
GenFdsGlobalVariable.BuildRuleFamily = DataType.TAB_COMPILER_MSFT
GenFdsGlobalVariable.ToolChainFamily = DataType.TAB_COMPILER_MSFT
GenFdsGlobalVariable.__BuildRuleDatabase = None
GenFdsGlobalVariable.GuidToolDefinition = {}
GenFdsGlobalVariable.FfsCmdDict = {}
GenFdsGlobalVariable.SecCmdList = []
GenFdsGlobalVariable.CopyList = []
GenFdsGlobalVariable.ModuleFile = ''
GenFdsGlobalVariable.EnableGenfdsMultiThread = False
GenFdsGlobalVariable.LargeFileInFvFlags = []
GenFdsGlobalVariable.EFI_FIRMWARE_FILE_SYSTEM3_GUID = '5473C07A-3DCB-4dca-BD6F-1E9689E7349A'
GenFdsGlobalVariable.LARGE_FILE_SIZE = 0x1000000
GenFdsGlobalVariable.SectionHeader = Struct("3B 1B")
# FvName, FdName, CapName in FDF, Image file name
GenFdsGlobalVariable.ImageBinDict = {}
def GenFdsApi(FdsCommandDict, WorkSpaceDataBase=None):
global Workspace
Workspace = ""
ArchList = None
ReturnCode = 0
resetFdsGlobalVariable()
try:
if FdsCommandDict.get("verbose"):