if self._Header == None:\r
self._GetHeaderInfo()\r
if self._BuildTargets == None:\r
- self._BuildTargets = ['DEBUG', 'RELEASE']\r
+ self._BuildTargets = ['DEBUG', 'RELEASE', 'NOOPT']\r
return self._BuildTargets\r
\r
## Retrieve SKUID_IDENTIFIER\r
continue\r
self._LibraryClasses[LibraryClass, ModuleType] = LibraryInstance\r
\r
- # for R8 style library instances, which are listed in different section\r
+ # for EDK style library instances, which are listed in different section\r
RecordList = self._RawData[MODEL_EFI_LIBRARY_INSTANCE, self._Arch]\r
for Record in RecordList:\r
File = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch)\r
TAB_INF_DEFINES_COMPONENT_TYPE : "_ComponentType",\r
TAB_INF_DEFINES_MAKEFILE_NAME : "_MakefileName",\r
#TAB_INF_DEFINES_CUSTOM_MAKEFILE : "_CustomMakefile",\r
+ TAB_INF_DEFINES_DPX_SOURCE :"_DxsFile",\r
TAB_INF_DEFINES_VERSION_NUMBER : "_Version",\r
TAB_INF_DEFINES_VERSION_STRING : "_Version",\r
TAB_INF_DEFINES_VERSION : "_Version",\r
self._Header_ = None\r
self._AutoGenVersion = None\r
self._BaseName = None\r
+ self._DxsFile = None\r
self._ModuleType = None\r
self._ComponentType = None\r
self._BuildType = None\r
self._Defs[Name] = Record[1]\r
\r
#\r
- # Retrieve information in sections specific to R8.x modules\r
+ # Retrieve information in sections specific to EDK.x modules\r
#\r
if self._AutoGenVersion >= 0x00010005: # _AutoGenVersion may be None, which is less than anything\r
if not self._ModuleType:\r
self._BuildType = 'UEFI_HII'\r
else:\r
self._BuildType = self._ModuleType.upper()\r
+ \r
+ if self._DxsFile:\r
+ File = PathClass(NormPath(self._DxsFile), self._ModuleDir, Arch=self._Arch)\r
+ # check the file validation\r
+ ErrorCode, ErrorInfo = File.Validate(".dxs", CaseSensitive=False)\r
+ if ErrorCode != 0:\r
+ EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo,\r
+ File=self.MetaFile, Line=LineNo)\r
+ if self.Sources == None:\r
+ self._Sources = []\r
+ self._Sources.append(File)\r
else:\r
self._BuildType = self._ComponentType.upper()\r
if not self._ComponentType:\r
else:\r
Tool = ToolList[0]\r
ToolChain = "*_*_*_%s_FLAGS" % Tool\r
- ToolChainFamily = 'MSFT' # R8.x only support MSFT tool chain\r
+ ToolChainFamily = 'MSFT' # EDK.x only support MSFT tool chain\r
#ignore not replaced macros in value\r
ValueList = GetSplitValueList(' ' + Value, '/D')\r
Dummy = ValueList[0]\r
EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No BASE_NAME name", File=self.MetaFile)\r
return self._BaseName\r
\r
+ ## Retrieve DxsFile\r
+ def _GetDxsFile(self):\r
+ if self._DxsFile == None:\r
+ if self._Header_ == None:\r
+ self._GetHeaderInfo()\r
+ if self._DxsFile == None:\r
+ self._DxsFile = ''\r
+ return self._DxsFile\r
+\r
## Retrieve MODULE_TYPE\r
def _GetModuleType(self):\r
if self._ModuleType == None:\r
ToolCode = Record[3]\r
FeatureFlag = Record[4]\r
if self._AutoGenVersion < 0x00010005:\r
- # old module source files (R8)\r
+ # old module source files (EDK)\r
File = PathClass(NormPath(Record[0], Macros), self._ModuleDir, self._SourceOverridePath,\r
'', False, self._Arch, ToolChainFamily, '', TagName, ToolCode)\r
# check the file validation\r
self._LibraryClasses[Lib] = Instance\r
return self._LibraryClasses\r
\r
- ## Retrieve library names (for R8.x style of modules)\r
+ ## Retrieve library names (for EDK.x style of modules)\r
def _GetLibraryNames(self):\r
if self._Libraries == None:\r
self._Libraries = []\r
RecordList = self._RawData[MODEL_EFI_LIBRARY_INSTANCE, self._Arch, self._Platform]\r
for Record in RecordList:\r
- # in case of name with '.lib' extension, which is unusual in R8.x inf\r
+ # in case of name with '.lib' extension, which is unusual in EDK.x inf\r
Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False)\r
LibraryName = os.path.splitext(Record[0])[0]\r
if LibraryName not in self._Libraries:\r
self._Guids[CName] = Value\r
return self._Guids\r
\r
- ## Retrieve include paths necessary for this module (for R8.x style of modules)\r
+ ## Retrieve include paths necessary for this module (for EDK.x style of modules)\r
def _GetIncludes(self):\r
if self._Includes == None:\r
self._Includes = []\r
if self._SourceOverridePath:\r
self._Includes.append(self._SourceOverridePath)\r
RecordList = self._RawData[MODEL_EFI_INCLUDE, self._Arch, self._Platform]\r
- # [includes] section must be used only in old (R8.x) inf file\r
+ # [includes] section must be used only in old (EDK.x) inf file\r
if self.AutoGenVersion >= 0x00010005 and len(RecordList) > 0:\r
EdkLogger.error('build', FORMAT_NOT_SUPPORTED, "No [include] section allowed",\r
File=self.MetaFile, Line=RecordList[0][-1]-1)\r
## Retrieve PCDs used in this module\r
def _GetPcds(self):\r
if self._Pcds == None:\r
- self._Pcds = {}\r
+ self._Pcds = sdict()\r
self._Pcds.update(self._GetPcd(MODEL_PCD_FIXED_AT_BUILD))\r
self._Pcds.update(self._GetPcd(MODEL_PCD_PATCHABLE_IN_MODULE))\r
self._Pcds.update(self._GetPcd(MODEL_PCD_FEATURE_FLAG))\r
\r
## Retrieve PCD for given type\r
def _GetPcd(self, Type):\r
- Pcds = {}\r
+ Pcds = sdict()\r
PcdDict = tdict(True, 4)\r
PcdList = []\r
RecordList = self._RawData[Type, self._Arch, self._Platform]\r
#\r
# Check hexadecimal token value length and format.\r
#\r
+ ReIsValidPcdTokenValue = re.compile(r"^[0][x|X][0]*[0-9a-fA-F]{1,8}$", re.DOTALL)\r
if Pcd.TokenValue.startswith("0x") or Pcd.TokenValue.startswith("0X"):\r
- if len(Pcd.TokenValue) < 3 or len(Pcd.TokenValue) > 10:\r
- EdkLogger.error(\r
- 'build',\r
- FORMAT_INVALID,\r
- "The format of TokenValue [%s] of PCD [%s.%s] in [%s] is invalid:" % (Pcd.TokenValue, TokenSpaceGuid, PcdCName, str(Package)),\r
- File =self.MetaFile, Line=LineNo,\r
- ExtraData=None\r
- ) \r
- try:\r
- int (Pcd.TokenValue, 16)\r
- except:\r
+ if ReIsValidPcdTokenValue.match(Pcd.TokenValue) == None:\r
EdkLogger.error(\r
'build',\r
FORMAT_INVALID,\r
ConstructorList = property(_GetConstructor)\r
DestructorList = property(_GetDestructor)\r
Defines = property(_GetDefines)\r
-\r
+ DxsFile = property(_GetDxsFile)\r
+ \r
Binaries = property(_GetBinaryFiles)\r
Sources = property(_GetSourceFiles)\r
LibraryClasses = property(_GetLibraryClassUses)\r