import OptRomInfStatement\r
import OptRomFileStatement\r
\r
+from GenFdsGlobalVariable import GenFdsGlobalVariable\r
from Common.BuildToolError import *\r
from Common import EdkLogger\r
\r
self.InfList = []\r
\r
self.FdDict = {}\r
+ self.FdNameNotSet = False\r
self.FvDict = {}\r
self.CapsuleDict = {}\r
self.VtfList = []\r
raise Warning("expected [FD.]", self.FileName, self.CurrentLineNumber)\r
\r
FdName = self.__GetUiName()\r
+ if FdName == "":\r
+ if len (self.Profile.FdDict) == 0:\r
+ FdName = GenFdsGlobalVariable.PlatformName\r
+ self.Profile.FdNameNotSet = True\r
+ else:\r
+ raise Warning("expected FdName in [FD.] section", self.FileName, self.CurrentLineNumber)\r
self.CurrentFdName = FdName.upper()\r
+ \r
+ if self.CurrentFdName in self.Profile.FdDict:\r
+ raise Warning("Unexpected the same FD name", self.FileName, self.CurrentLineNumber)\r
\r
if not self.__IsToken( "]"):\r
raise Warning("expected ']'", self.FileName, self.CurrentLineNumber)\r
FdObj = Fd.FD()\r
FdObj.FdUiName = self.CurrentFdName\r
self.Profile.FdDict[self.CurrentFdName] = FdObj\r
+\r
+ if len (self.Profile.FdDict) > 1 and self.Profile.FdNameNotSet:\r
+ raise Warning("expected all FDs have their name", self.FileName, self.CurrentLineNumber)\r
+\r
Status = self.__GetCreateFile(FdObj)\r
if not Status:\r
raise Warning("FD name error", self.FileName, self.CurrentLineNumber)\r
\r
- if not self.__GetTokenStatements(FdObj):\r
- return False\r
+ self.__GetTokenStatements(FdObj)\r
\r
self.__GetDefineStatements(FdObj)\r
\r
#\r
# @param self The object pointer\r
# @param Obj for whom token statement is got\r
- # @retval True Successfully find a token statement\r
- # @retval False Not able to find a token statement\r
#\r
def __GetTokenStatements(self, Obj):\r
if not self.__IsKeyword( "BaseAddress"):\r
\r
Obj.ErasePolarity = self.__Token\r
\r
- Status = self.__GetBlockStatements(Obj)\r
- return Status\r
+ self.__GetBlockStatements(Obj)\r
\r
## __GetAddressStatements() method\r
#\r
#\r
# @param self The object pointer\r
# @param Obj for whom block statement is got\r
- # @retval True Successfully find\r
- # @retval False Not able to find\r
#\r
def __GetBlockStatements(self, Obj):\r
\r
if not self.__GetBlockStatement(Obj):\r
- raise Warning("expected block statement", self.FileName, self.CurrentLineNumber)\r
+ #set default block size is 1\r
+ Obj.BlockSizeList.append((1, Obj.Size, None))\r
+ return\r
\r
while self.__GetBlockStatement(Obj):\r
pass\r
- return True\r
+ \r
+ for Item in Obj.BlockSizeList:\r
+ if Item[0] == None or Item[1] == None:\r
+ raise Warning("expected block statement for Fd Section", self.FileName, self.CurrentLineNumber)\r
\r
## __GetBlockStatement() method\r
#\r
PcdPair = self.__GetNextPcdName()\r
BlockSizePcd = PcdPair\r
self.Profile.PcdDict[PcdPair] = BlockSize\r
- BlockSize = long(self.__Token, 0)\r
+ BlockSize = long(BlockSize, 0)\r
\r
BlockNumber = None\r
if self.__IsKeyword( "NumBlocks"):\r
raise Warning("expected INF file path", self.FileName, self.CurrentLineNumber)\r
ffsInf.InfFileName = self.__Token\r
\r
-# if ffsInf.InfFileName.find('$') >= 0:\r
-# ffsInf.InfFileName = GenFdsGlobalVariable.GenFdsGlobalVariable.MacroExtend(ffsInf.InfFileName, MacroDict)\r
-\r
if not ffsInf.InfFileName in self.Profile.InfList:\r
self.Profile.InfList.append(ffsInf.InfFileName)\r
\r
\r
AlignValue = None\r
if self.__GetAlignment():\r
+ if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
+ raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
AlignValue = self.__Token\r
\r
BuildNum = None\r
BuildNum = self.__Token\r
\r
if self.__IsKeyword( "VERSION"):\r
+ if AlignValue == 'Auto':\r
+ raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)\r
if not self.__IsToken( "="):\r
raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
if not self.__GetNextToken():\r
else:\r
VerSectionObj.FileName = self.__Token\r
Obj.SectionList.append(VerSectionObj)\r
-\r
+ \r
elif self.__IsKeyword( "UI"):\r
+ if AlignValue == 'Auto':\r
+ raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)\r
if not self.__IsToken( "="):\r
raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
if not self.__GetNextToken():\r
Obj.SectionList.append(UiSectionObj)\r
\r
elif self.__IsKeyword( "FV_IMAGE"):\r
+ if AlignValue == 'Auto':\r
+ raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)\r
if not self.__IsToken( "="):\r
raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
if not self.__GetNextToken():\r
Obj.SectionList.append(FvImageSectionObj)\r
\r
elif self.__IsKeyword("PEI_DEPEX_EXP") or self.__IsKeyword("DXE_DEPEX_EXP") or self.__IsKeyword("SMM_DEPEX_EXP"):\r
+ if AlignValue == 'Auto':\r
+ raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)\r
DepexSectionObj = DepexSection.DepexSection()\r
DepexSectionObj.Alignment = AlignValue\r
DepexSectionObj.DepexType = self.__Token\r
Obj.SectionList.append(DepexSectionObj)\r
\r
else:\r
-\r
if not self.__GetNextWord():\r
raise Warning("expected section type", self.FileName, self.CurrentLineNumber)\r
\r
if self.__Token not in ("COMPAT16", "PE32", "PIC", "TE", "FV_IMAGE", "RAW", "DXE_DEPEX",\\r
"UI", "VERSION", "PEI_DEPEX", "SUBTYPE_GUID", "SMM_DEPEX"):\r
raise Warning("Unknown section type '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
+ if AlignValue == 'Auto'and (not self.__Token == 'PE32') and (not self.__Token == 'TE'):\r
+ raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)\r
+\r
# DataSection\r
DataSectionObj = DataSection.DataSection()\r
DataSectionObj.Alignment = AlignValue\r
\r
AlignValue = None\r
if self.__GetAlignment():\r
+ if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
+ raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
AlignValue = self.__Token\r
\r
if not self.__GetCglSection(FfsFileObj, AlignValue):\r
\r
AlignValue = ""\r
if self.__GetAlignment():\r
- if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
+ if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
- AlignValue = self.__Token\r
+ #For FFS, Auto is default option same to ""\r
+ if not self.__Token == "Auto":\r
+ AlignValue = self.__Token\r
\r
if self.__IsToken("{"):\r
# Complex file rule expected\r
\r
return Rule\r
\r
- elif self.__IsToken("|"):\r
- # Ext rule expected\r
- Ext = self.__GetFileExtension()\r
-\r
- Rule = RuleSimpleFile.RuleSimpleFile()\r
-\r
- Rule.FvFileType = Type\r
- Rule.NameGuid = NameGuid\r
- Rule.Alignment = AlignValue\r
- Rule.CheckSum = CheckSum\r
- Rule.Fixed = Fixed\r
- Rule.FileExtension = Ext\r
- Rule.KeyStringList = KeyStringList\r
- if KeepReloc != None:\r
- Rule.KeepReloc = KeepReloc\r
-\r
- return Rule\r
-\r
else:\r
# Simple file rule expected\r
if not self.__GetNextWord():\r
if self.__IsKeyword("CheckSum", True):\r
CheckSum = True\r
\r
+ SectAlignment = ""\r
if self.__GetAlignment():\r
- if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
+ if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
- AlignValue = self.__Token\r
+ if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):\r
+ raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)\r
+ SectAlignment = self.__Token\r
\r
- if not self.__GetNextToken():\r
+ Ext = None\r
+ if self.__IsToken('|'):\r
+ Ext = self.__GetFileExtension()\r
+ elif not self.__GetNextToken():\r
raise Warning("expected File name", self.FileName, self.CurrentLineNumber)\r
\r
Rule = RuleSimpleFile.RuleSimpleFile()\r
Rule.FvFileType = Type\r
Rule.NameGuid = NameGuid\r
Rule.Alignment = AlignValue\r
+ Rule.SectAlignment = SectAlignment\r
Rule.CheckSum = CheckSum\r
Rule.Fixed = Fixed\r
- Rule.FileName = self.__Token\r
Rule.KeyStringList = KeyStringList\r
if KeepReloc != None:\r
Rule.KeepReloc = KeepReloc\r
+ Rule.FileExtension = Ext\r
+ Rule.FileName = self.__Token\r
return Rule\r
\r
## __GetEfiSection() method\r
raise Warning("expected 'FV'", self.FileName, self.CurrentLineNumber)\r
FvImageSectionObj.FvFileType = self.__Token\r
\r
- if self.__GetAlignment():\r
- if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
- raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
- FvImageSectionObj.Alignment = self.__Token\r
-\r
- if self.__IsKeyword("FV"):\r
- FvImageSectionObj.FvFileType = self.__Token\r
-\r
if self.__GetAlignment():\r
if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
EfiSectionObj.BuildNum = self.__Token\r
\r
if self.__GetAlignment():\r
+ if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
+ raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
+ if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):\r
+ raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)\r
EfiSectionObj.Alignment = self.__Token\r
\r
if self.__IsKeyword('RELOCS_STRIPPED') or self.__IsKeyword('RELOCS_RETAINED'):\r