diff --git a/BaseTools/Bin/Win32/BPDG.exe b/BaseTools/Bin/Win32/BPDG.exe index d0b2c95c30..29888d56ad 100644 Binary files a/BaseTools/Bin/Win32/BPDG.exe and b/BaseTools/Bin/Win32/BPDG.exe differ diff --git a/BaseTools/Bin/Win32/BootSectImage.exe b/BaseTools/Bin/Win32/BootSectImage.exe index 0e11dd8a5c..c628a946dd 100755 Binary files a/BaseTools/Bin/Win32/BootSectImage.exe and b/BaseTools/Bin/Win32/BootSectImage.exe differ diff --git a/BaseTools/Bin/Win32/EfiLdrImage.exe b/BaseTools/Bin/Win32/EfiLdrImage.exe index d63752e1c1..2d42e0fff4 100755 Binary files a/BaseTools/Bin/Win32/EfiLdrImage.exe and b/BaseTools/Bin/Win32/EfiLdrImage.exe differ diff --git a/BaseTools/Bin/Win32/EfiRom.exe b/BaseTools/Bin/Win32/EfiRom.exe index f92ae9bf30..9a1db5f3d0 100755 Binary files a/BaseTools/Bin/Win32/EfiRom.exe and b/BaseTools/Bin/Win32/EfiRom.exe differ diff --git a/BaseTools/Bin/Win32/Fpd2Dsc.exe b/BaseTools/Bin/Win32/Fpd2Dsc.exe index 688dd210e4..1eea825745 100755 Binary files a/BaseTools/Bin/Win32/Fpd2Dsc.exe and b/BaseTools/Bin/Win32/Fpd2Dsc.exe differ diff --git a/BaseTools/Bin/Win32/GenBootSector.exe b/BaseTools/Bin/Win32/GenBootSector.exe index bc2bdebd91..4e68e76967 100755 Binary files a/BaseTools/Bin/Win32/GenBootSector.exe and b/BaseTools/Bin/Win32/GenBootSector.exe differ diff --git a/BaseTools/Bin/Win32/GenCrc32.exe b/BaseTools/Bin/Win32/GenCrc32.exe index 9e86442a73..671e04ee6a 100755 Binary files a/BaseTools/Bin/Win32/GenCrc32.exe and b/BaseTools/Bin/Win32/GenCrc32.exe differ diff --git a/BaseTools/Bin/Win32/GenDepex.exe b/BaseTools/Bin/Win32/GenDepex.exe index 698eebf30c..3e6685ce38 100755 Binary files a/BaseTools/Bin/Win32/GenDepex.exe and b/BaseTools/Bin/Win32/GenDepex.exe differ diff --git a/BaseTools/Bin/Win32/GenFds.exe b/BaseTools/Bin/Win32/GenFds.exe index adb7da94bc..1df44e6714 100755 Binary files a/BaseTools/Bin/Win32/GenFds.exe and b/BaseTools/Bin/Win32/GenFds.exe differ diff --git a/BaseTools/Bin/Win32/GenFfs.exe b/BaseTools/Bin/Win32/GenFfs.exe index 2f51ce6825..92a1c1540e 100755 Binary files a/BaseTools/Bin/Win32/GenFfs.exe and b/BaseTools/Bin/Win32/GenFfs.exe differ diff --git a/BaseTools/Bin/Win32/GenFv.exe b/BaseTools/Bin/Win32/GenFv.exe index 66c61fee76..882c2d1d09 100755 Binary files a/BaseTools/Bin/Win32/GenFv.exe and b/BaseTools/Bin/Win32/GenFv.exe differ diff --git a/BaseTools/Bin/Win32/GenFw.exe b/BaseTools/Bin/Win32/GenFw.exe index 10cb4a33f7..4db22ba547 100755 Binary files a/BaseTools/Bin/Win32/GenFw.exe and b/BaseTools/Bin/Win32/GenFw.exe differ diff --git a/BaseTools/Bin/Win32/GenPage.exe b/BaseTools/Bin/Win32/GenPage.exe index 9ce843fb87..0d3e6615aa 100755 Binary files a/BaseTools/Bin/Win32/GenPage.exe and b/BaseTools/Bin/Win32/GenPage.exe differ diff --git a/BaseTools/Bin/Win32/GenPatchPcdTable.exe b/BaseTools/Bin/Win32/GenPatchPcdTable.exe index 9306426f75..1262bf6f06 100755 Binary files a/BaseTools/Bin/Win32/GenPatchPcdTable.exe and b/BaseTools/Bin/Win32/GenPatchPcdTable.exe differ diff --git a/BaseTools/Bin/Win32/GenSec.exe b/BaseTools/Bin/Win32/GenSec.exe index 7806717c82..74d3379adc 100755 Binary files a/BaseTools/Bin/Win32/GenSec.exe and b/BaseTools/Bin/Win32/GenSec.exe differ diff --git a/BaseTools/Bin/Win32/GenVtf.exe b/BaseTools/Bin/Win32/GenVtf.exe index 9066545715..fc1f860fec 100755 Binary files a/BaseTools/Bin/Win32/GenVtf.exe and b/BaseTools/Bin/Win32/GenVtf.exe differ diff --git a/BaseTools/Bin/Win32/LzmaCompress.exe b/BaseTools/Bin/Win32/LzmaCompress.exe index f9108fa8f5..2f74e0f8a9 100755 Binary files a/BaseTools/Bin/Win32/LzmaCompress.exe and b/BaseTools/Bin/Win32/LzmaCompress.exe differ diff --git a/BaseTools/Bin/Win32/MigrationMsa2Inf.exe b/BaseTools/Bin/Win32/MigrationMsa2Inf.exe index 117cad3ddb..3db093f735 100755 Binary files a/BaseTools/Bin/Win32/MigrationMsa2Inf.exe and b/BaseTools/Bin/Win32/MigrationMsa2Inf.exe differ diff --git a/BaseTools/Bin/Win32/PatchPcdValue.exe b/BaseTools/Bin/Win32/PatchPcdValue.exe index 5b19d89e1f..afcaccfc66 100755 Binary files a/BaseTools/Bin/Win32/PatchPcdValue.exe and b/BaseTools/Bin/Win32/PatchPcdValue.exe differ diff --git a/BaseTools/Bin/Win32/Spd2Dec.exe b/BaseTools/Bin/Win32/Spd2Dec.exe index 049766b682..bc58b468fa 100755 Binary files a/BaseTools/Bin/Win32/Spd2Dec.exe and b/BaseTools/Bin/Win32/Spd2Dec.exe differ diff --git a/BaseTools/Bin/Win32/Split.exe b/BaseTools/Bin/Win32/Split.exe index 561aa69bd1..097824af66 100755 Binary files a/BaseTools/Bin/Win32/Split.exe and b/BaseTools/Bin/Win32/Split.exe differ diff --git a/BaseTools/Bin/Win32/TargetTool.exe b/BaseTools/Bin/Win32/TargetTool.exe index bfe546188e..b283787591 100755 Binary files a/BaseTools/Bin/Win32/TargetTool.exe and b/BaseTools/Bin/Win32/TargetTool.exe differ diff --git a/BaseTools/Bin/Win32/TianoCompress.exe b/BaseTools/Bin/Win32/TianoCompress.exe index 4c1d44ff5d..8fe45a52d9 100755 Binary files a/BaseTools/Bin/Win32/TianoCompress.exe and b/BaseTools/Bin/Win32/TianoCompress.exe differ diff --git a/BaseTools/Bin/Win32/Trim.exe b/BaseTools/Bin/Win32/Trim.exe index 2c0b8738f7..4c6993bf3b 100755 Binary files a/BaseTools/Bin/Win32/Trim.exe and b/BaseTools/Bin/Win32/Trim.exe differ diff --git a/BaseTools/Bin/Win32/VfrCompile.exe b/BaseTools/Bin/Win32/VfrCompile.exe index da1b0a9a99..cf31c305a0 100755 Binary files a/BaseTools/Bin/Win32/VfrCompile.exe and b/BaseTools/Bin/Win32/VfrCompile.exe differ diff --git a/BaseTools/Bin/Win32/VolInfo.exe b/BaseTools/Bin/Win32/VolInfo.exe index 2cf76569a4..d7d30c45d6 100755 Binary files a/BaseTools/Bin/Win32/VolInfo.exe and b/BaseTools/Bin/Win32/VolInfo.exe differ diff --git a/BaseTools/Bin/Win32/build.exe b/BaseTools/Bin/Win32/build.exe index 170a55cdbe..05ab7c1daf 100755 Binary files a/BaseTools/Bin/Win32/build.exe and b/BaseTools/Bin/Win32/build.exe differ diff --git a/BaseTools/Conf/build_rule.template b/BaseTools/Conf/build_rule.template index d240e9694d..c29ed563ae 100644 --- a/BaseTools/Conf/build_rule.template +++ b/BaseTools/Conf/build_rule.template @@ -1,6 +1,6 @@ # # Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.
-# Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
+# Portions copyright (c) 2008 - 2010, Apple Inc. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -9,8 +9,6 @@ # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. # -# Filename: build_rule.template -# ## Syntax # @@ -345,12 +343,13 @@ $(MAKE_FILE) - Trim --asl-file -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i ${src} + Trim --asl-file -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i -i $(INC_LIST) ${src} "$(ASLPP)" $(ASLPP_FLAGS) $(INC) /I${s_path} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii - "$(ASL)" $(ASL_FLAGS) $(ASL_OUTFLAGS)${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii + Trim --source-code -l -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iiii $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii + "$(ASL)" $(ASL_FLAGS) $(ASL_OUTFLAGS)${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iiii - Trim --asl-file -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i ${src} + Trim --asl-file -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i -i $(INC_LIST) ${src} "$(ASLPP)" $(ASLPP_FLAGS) $(INC) -I${s_path} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii "$(ASL)" $(ASL_FLAGS) $(ASL_OUTFLAGS)${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii @@ -514,9 +513,12 @@ *.hpk - + $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.lib + + $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc + "$(GENFW)" -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -g $(MODULE_GUID) --hiipackage $(HII_BINARY_PACKAGES) $(GENFW_FLAGS) "$(RC)" /Fo${dst} $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc @@ -524,3 +526,8 @@ "$(GENFW)" -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -g $(MODULE_GUID) --hiibinpackage $(HII_BINARY_PACKAGES) $(GENFW_FLAGS) "$(RC)" $(RC_FLAGS) $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc ${dst} + + + GenFw -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -g $(MODULE_GUID) --hiibinpackage $(HII_BINARY_PACKAGES) + + diff --git a/BaseTools/Conf/target.template b/BaseTools/Conf/target.template index a05e7af3af..3c4c50ff1e 100644 --- a/BaseTools/Conf/target.template +++ b/BaseTools/Conf/target.template @@ -1,5 +1,5 @@ # -# Copyright (c) 2006 - 2007, Intel Corporation. All rights reserved.
+# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -9,7 +9,6 @@ # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. # -# Filename: target.template # # ALL Paths are Relative to WORKSPACE diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template index c873d93738..639e20a60e 100644 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -18,22 +18,22 @@ DEFINE VS2003_BIN = C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7 DEFINE VS2003_DLL = C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE DEFINE VS2005_BIN = C:\Program Files\Microsoft Visual Studio 8\Vc\bin -DEFINE VS2005_DLL = C:\Program Files\Microsoft Visual Studio 8\Common7\IDE +DEFINE VS2005_DLL = C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;DEF(VS2005_BIN) DEFINE VS2005_BINX64 = C:\Program Files\Microsoft Visual Studio 8\Vc\bin\x86_amd64 DEFINE VS2005_BIN64 = C:\Program Files\Microsoft Visual Studio 8\Vc\bin\x86_ia64 DEFINE VS2005x86_BIN = C:\Program Files (x86)\Microsoft Visual Studio 8\Vc\bin -DEFINE VS2005x86_DLL = C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE +DEFINE VS2005x86_DLL = C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE;DEF(VS2005x86_BIN) DEFINE VS2005x86_BINX64 = DEF(VS2005x86_BIN)\x86_amd64 DEFINE VS2005x86_BIN64 = DEF(VS2005x86_BIN)\x86_ia64 DEFINE VS2008_BIN = C:\Program Files\Microsoft Visual Studio 9.0\Vc\bin -DEFINE VS2008_DLL = C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE +DEFINE VS2008_DLL = C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE;DEF(VS2008_BIN) DEFINE VS2008_BINX64 = DEF(VS2008_BIN)\x86_amd64 DEFINE VS2008_BIN64 = DEF(VS2008_BIN)\x86_ia64 DEFINE VS2008x86_BIN = C:\Program Files (x86)\Microsoft Visual Studio 9.0\Vc\bin -DEFINE VS2008x86_DLL = C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE +DEFINE VS2008x86_DLL = C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE;DEF(VS2008x86_BIN) DEFINE VS2008x86_BINX64 = DEF(VS2008x86_BIN)\x86_amd64 DEFINE VS2008x86_BIN64 = DEF(VS2008x86_BIN)\x86_ia64 @@ -149,11 +149,11 @@ DEFINE DEFAULT_WIN_ASL_OUTFLAGS = DEF(IASL_OUTFLAGS) #DEFINE DEFAULT_WIN_ASL_FLAGS = DEF(MS_ASL_FLAGS) #DEFINE DEFAULT_WIN_ASL_OUTFLAGS = DEF(MS_ASL_OUTFLAGS) -DEFINE MSFT_ASLPP_FLAGS = /nologo /EP /C +DEFINE MSFT_ASLPP_FLAGS = /nologo /E /C /FIAutoGen.h DEFINE MSFT_ASLCC_FLAGS = /GL- /Y- /TC /Dmain=ReferenceAcpiTable DEFINE MSFT_ASLDLINK_FLAGS = /NODEFAULTLIB /ENTRY:ReferenceAcpiTable /SUBSYSTEM:CONSOLE -DEFINE ICC_WIN_ASLPP_FLAGS = /nologo /EP /C +DEFINE ICC_WIN_ASLPP_FLAGS = /nologo /E /C /FIAutoGen.h DEFINE ICC_WIN_ASLCC_FLAGS = /Y- /TC /WX- /Od /Dmain=ReferenceAcpiTable DEFINE ICC_WIN_ASLDLINK_FLAGS = /NODEFAULTLIB /ENTRY:ReferenceAcpiTable /SUBSYSTEM:CONSOLE /NODEFAULTLIB:libmmt /NODEFAULTLIB:libirc diff --git a/BaseTools/Source/C/Include/IndustryStandard/PeImage.h b/BaseTools/Source/C/Include/IndustryStandard/PeImage.h index de0e90e223..f54ee63a83 100644 --- a/BaseTools/Source/C/Include/IndustryStandard/PeImage.h +++ b/BaseTools/Source/C/Include/IndustryStandard/PeImage.h @@ -511,6 +511,8 @@ typedef struct { #define EFI_IMAGE_REL_BASED_HIGHLOW 3 #define EFI_IMAGE_REL_BASED_HIGHADJ 4 #define EFI_IMAGE_REL_BASED_MIPS_JMPADDR 5 +#define EFI_IMAGE_REL_BASED_ARM_MOV32A 5 +#define EFI_IMAGE_REL_BASED_ARM_MOV32T 7 #define EFI_IMAGE_REL_BASED_IA64_IMM64 9 #define EFI_IMAGE_REL_BASED_DIR64 10 diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index d95f40bf82..aaba768b4a 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -162,6 +162,10 @@ class WorkspaceAutoGen(AutoGen): # parse FDF file to get PCDs in it, if any if self.FdfFile != None and self.FdfFile != '': + # + # Make global macros available when parsing FDF file + # + InputMacroDict.update(self.BuildDatabase.WorkspaceDb._GlobalMacros) Fdf = FdfParser(self.FdfFile.Path) Fdf.ParseFile() PcdSet = Fdf.Profile.PcdDict @@ -544,9 +548,18 @@ class PlatformAutoGen(AutoGen): DecPcdEntry = eachDec.Pcds[DecPcd] if (DecPcdEntry.TokenSpaceGuidCName == DscPcdEntry.TokenSpaceGuidCName) and \ (DecPcdEntry.TokenCName == DscPcdEntry.TokenCName): + # Print warning message to let the developer make a determine. + EdkLogger.warn("build", "Unreferenced vpd pcd used!", + File=self.MetaFile, \ + ExtraData = "PCD: %s.%s used in the DSC file %s is unreferenced." \ + %(DscPcdEntry.TokenSpaceGuidCName, DscPcdEntry.TokenCName, self.Platform.MetaFile.Path)) + DscPcdEntry.DatumType = DecPcdEntry.DatumType DscPcdEntry.DefaultValue = DecPcdEntry.DefaultValue - Sku.DefaultValue = DecPcdEntry.DefaultValue + # Only fix the value while no value provided in DSC file. + if (Sku.DefaultValue == "" or Sku.DefaultValue==None): + DscPcdEntry.SkuInfoList[DscPcdEntry.SkuInfoList.keys()[0]].DefaultValue = DecPcdEntry.DefaultValue + VpdFile.Add(DscPcdEntry, Sku.VpdOffset) # if the offset of a VPD is *, then it need to be fixed up by third party tool. @@ -569,11 +582,9 @@ class PlatformAutoGen(AutoGen): except: EdkLogger.error("build", FILE_WRITE_FAILURE, "Fail to create FV folder under %s" % self.BuildDir) - VpdFileName = self.Platform.VpdFileName - if VpdFileName == None or VpdFileName == "" : - VpdFilePath = os.path.join(FvPath, "%s.txt" % self.Platform.VpdToolGuid) - else : - VpdFilePath = os.path.join(FvPath, "%s.txt" % VpdFileName) + + VpdFilePath = os.path.join(FvPath, "%s.txt" % self.Platform.VpdToolGuid) + if not os.path.exists(VpdFilePath) or os.path.getmtime(VpdFilePath) < DscTimeStamp: VpdFile.Write(VpdFilePath) @@ -588,16 +599,13 @@ class PlatformAutoGen(AutoGen): break # Call third party GUID BPDG tool. if BPDGToolName != None: - VpdInfoFile.CallExtenalBPDGTool(BPDGToolName, VpdFilePath, VpdFileName) + VpdInfoFile.CallExtenalBPDGTool(BPDGToolName, VpdFilePath) else: EdkLogger.error("Build", FILE_NOT_FOUND, "Fail to find third-party BPDG tool to process VPD PCDs. BPDG Guid tool need to be defined in tools_def.txt and VPD_TOOL_GUID need to be provided in DSC file.") # Process VPD map file generated by third party BPDG tool if NeedProcessVpdMapFile: - if VpdFileName == None or VpdFileName == "" : - VpdMapFilePath = os.path.join(self.BuildDir, "FV", "%s.map" % self.Platform.VpdToolGuid) - else : - VpdMapFilePath = os.path.join(self.BuildDir, "FV", "%s.map" % VpdFileName) + VpdMapFilePath = os.path.join(self.BuildDir, "FV", "%s.map" % self.Platform.VpdToolGuid) if os.path.exists(VpdMapFilePath): VpdFile.Read(VpdMapFilePath) @@ -1709,12 +1717,12 @@ class ModuleAutoGen(AutoGen): self._SourceFileList = [] for F in self.Module.Sources: # match tool chain - if F.TagName != "" and F.TagName != self.ToolChain: + if F.TagName not in ("", "*", self.ToolChain): EdkLogger.debug(EdkLogger.DEBUG_9, "The toolchain [%s] for processing file [%s] is found, " "but [%s] is needed" % (F.TagName, str(F), self.ToolChain)) continue # match tool chain family - if F.ToolChainFamily != "" and F.ToolChainFamily != self.ToolChainFamily: + if F.ToolChainFamily not in ("", "*", self.ToolChainFamily): EdkLogger.debug( EdkLogger.DEBUG_0, "The file [%s] must be built by tools of [%s], " \ @@ -2128,14 +2136,6 @@ class ModuleAutoGen(AutoGen): self._ApplyBuildRule(Lib.Target, TAB_UNKNOWN_FILE) return self._LibraryAutoGenList - ## Return build command string - # - # @retval string Build command string - # - def _GetBuildCommand(self): - return self.PlatformInfo.BuildCommand - - Module = property(_GetModule) Name = property(_GetBaseName) Guid = property(_GetGuid) diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py index 2e18f6771c..b1e438547f 100644 --- a/BaseTools/Source/Python/AutoGen/GenMake.py +++ b/BaseTools/Source/Python/AutoGen/GenMake.py @@ -26,7 +26,7 @@ from BuildEngine import * import Common.GlobalData as GlobalData ## Regular expression for finding header file inclusions -gIncludePattern = re.compile(r"^[ \t]*#?[ \t]*include(?:[ \t]*(?:\\(?:\r\n|\r|\n))*[ \t]*)*(?:[\"<]?[ \t]*)([\w.\\/() \t]+)(?:[ \t]*[\">]?)", re.MULTILINE|re.UNICODE|re.IGNORECASE) +gIncludePattern = re.compile(r"^[ \t]*#?[ \t]*include(?:[ \t]*(?:\\(?:\r\n|\r|\n))*[ \t]*)*(?:\(?[\"<]?[ \t]*)([-\w.\\/() \t]+)(?:[ \t]*[\">]?\)?)", re.MULTILINE|re.UNICODE|re.IGNORECASE) ## Regular expression for matching macro used in header file inclusion gMacroPattern = re.compile("([_A-Z][_A-Z0-9]*)[ \t]*\((.+)\)", re.UNICODE) @@ -769,7 +769,7 @@ cleanlib: Inc = os.path.normpath(Inc) for SearchPath in [CurrentFilePath] + SearchPathList: FilePath = os.path.join(SearchPath, Inc) - if not os.path.exists(FilePath) or FilePath in CurrentFileDependencyList: + if not os.path.isfile(FilePath) or FilePath in CurrentFileDependencyList: continue FilePath = PathClass(FilePath) CurrentFileDependencyList.append(FilePath) diff --git a/BaseTools/Source/Python/AutoGen/UniClassObject.py b/BaseTools/Source/Python/AutoGen/UniClassObject.py index 76a0549a75..1eb65c1e9a 100644 --- a/BaseTools/Source/Python/AutoGen/UniClassObject.py +++ b/BaseTools/Source/Python/AutoGen/UniClassObject.py @@ -444,6 +444,13 @@ class UniFileClassObject(object): # Add a string to list # def AddStringToList(self, Name, Language, Value, Token = None, Referenced = False, UseOtherLangDef = '', Index = -1): + for LangNameItem in self.LanguageDef: + if Language == LangNameItem[0]: + break + else: + EdkLogger.error('Unicode File Parser', FORMAT_NOT_SUPPORTED, "The language '%s' for %s is not defined in Unicode file %s." \ + % (Language, Name, self.File)) + if Language not in self.OrderedStringList: self.OrderedStringList[Language] = [] diff --git a/BaseTools/Source/Python/BPDG/BPDG.py b/BaseTools/Source/Python/BPDG/BPDG.py index 10692c4834..f50e6f7d22 100644 --- a/BaseTools/Source/Python/BPDG/BPDG.py +++ b/BaseTools/Source/Python/BPDG/BPDG.py @@ -25,7 +25,6 @@ import sys import encodings.ascii from optparse import OptionParser -from encodings import gbk from Common import EdkLogger from Common.BuildToolError import * @@ -49,13 +48,11 @@ def main(): # Initialize log system EdkLogger.Initialize() - Options, Args = myOptionParser() + Options, Args = MyOptionParser() ReturnCode = 0 - if Options.opt_slient: - EdkLogger.SetLevel(EdkLogger.ERROR) - elif Options.opt_verbose: + if Options.opt_verbose: EdkLogger.SetLevel(EdkLogger.VERBOSE) elif Options.opt_quiet: EdkLogger.SetLevel(EdkLogger.QUIET) @@ -64,7 +61,7 @@ def main(): else: EdkLogger.SetLevel(EdkLogger.INFO) - if Options.vpd_filename == None: + if Options.bin_filename == None: EdkLogger.error("BPDG", ATTRIBUTE_NOT_AVAILABLE, "Please use the -o option to specify the file name for the VPD binary file") if Options.filename == None: EdkLogger.error("BPDG", ATTRIBUTE_NOT_AVAILABLE, "Please use the -m option to specify the file name for the mapping file") @@ -74,14 +71,22 @@ def main(): Force = True if (Args[0] != None) : - startBPDG(Args[0], Options.filename, Options.vpd_filename, Force) + StartBpdg(Args[0], Options.filename, Options.bin_filename, Force) else : EdkLogger.error("BPDG", ATTRIBUTE_NOT_AVAILABLE, "Please specify the file which contain the VPD pcd info.", None) return ReturnCode - -def myOptionParser(): + + +## Parse command line options +# +# Using standard Python module optparse to parse command line option of this tool. +# +# @retval options A optparse.Values object containing the parsed options +# @retval args Target of BPDG command +# +def MyOptionParser(): # # Process command line firstly. # @@ -94,11 +99,9 @@ def myOptionParser(): help=st.MSG_OPTION_DEBUG_LEVEL) parser.add_option('-v', '--verbose', action='store_true', dest='opt_verbose', help=st.MSG_OPTION_VERBOSE) - parser.add_option('-s', '--silent', action='store_true', dest='opt_slient', default=False, - help=st.MSG_OPTION_SILENT) parser.add_option('-q', '--quiet', action='store_true', dest='opt_quiet', default=False, help=st.MSG_OPTION_QUIET) - parser.add_option('-o', '--vpd-filename', action='store', dest='vpd_filename', + parser.add_option('-o', '--vpd-filename', action='store', dest='bin_filename', help=st.MSG_OPTION_VPD_FILENAME) parser.add_option('-m', '--map-filename', action='store', dest='filename', help=st.MSG_OPTION_MAP_FILENAME) @@ -111,8 +114,22 @@ def myOptionParser(): EdkLogger.info(parser.usage) sys.exit(1) return options, args - -def startBPDG(InputFileName, MapFileName, VpdFileName, Force): + + +## Start BPDG and call the main functions +# +# This method mainly focus on call GenVPD class member functions to complete +# BPDG's target. It will process VpdFile override, and provide the interface file +# information. +# +# @Param InputFileName The filename include the vpd type pcd information +# @param MapFileName The filename of map file that stores vpd type pcd information. +# This file will be generated by the BPDG tool after fix the offset +# and adjust the offset to make the pcd data aligned. +# @param VpdFileName The filename of Vpd file that hold vpd pcd information. +# @param Force Override the exist Vpdfile or not. +# +def StartBpdg(InputFileName, MapFileName, VpdFileName, Force): if os.path.exists(VpdFileName) and not Force: print "\nFile %s already exist, Overwrite(Yes/No)?[Y]: " % VpdFileName choice = sys.stdin.readline() diff --git a/BaseTools/Source/Python/BPDG/GenVpd.py b/BaseTools/Source/Python/BPDG/GenVpd.py index 05f5b6cf95..f0196e061a 100644 --- a/BaseTools/Source/Python/BPDG/GenVpd.py +++ b/BaseTools/Source/Python/BPDG/GenVpd.py @@ -28,6 +28,10 @@ _FORMAT_CHAR = {1: 'B', 8: 'Q' } +## The VPD PCD data structure for store and process each VPD PCD entry. +# +# This class contain method to format and pack pcd's value. +# class PcdEntry: def __init__(self, PcdCName, PcdOffset, PcdSize, PcdValue, Lineno=None, FileName=None, PcdUnpackValue=None, PcdBinOffset=None, PcdBinSize=None): @@ -54,12 +58,29 @@ class PcdEntry: "Invalid PCD format(Name: %s File: %s Line: %s), no PcdSize specified!" %(self.PcdCName, self.FileName, self.Lineno)) self._GenOffsetValue () + + ## Analyze the string value to judge the PCD's datum type euqal to Boolean or not. + # + # @param ValueString PCD's value + # @param Size PCD's size + # + # @retval True PCD's datum type is Boolean + # @retval False PCD's datum type is not Boolean. + # + def _IsBoolean(self, ValueString, Size): + if (Size == "1"): + if ValueString.upper() in ["TRUE", "FALSE"]: + return True + elif ValueString in ["0", "1", "0x0", "0x1", "0x00", "0x01"]: + return True - def _IsBoolean(self, ValueString): - if ValueString.upper() in ["TRUE", "FALSE"]: - return True return False + ## Convert the PCD's value from string to integer. + # + # This function will try to convert the Offset value form string to integer + # for both hexadecimal and decimal. + # def _GenOffsetValue(self): if self.PcdOffset != "*" : try: @@ -70,9 +91,14 @@ class PcdEntry: except: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid offset value %s for PCD %s (File: %s Line: %s)" % (self.PcdOffset, self.PcdCName, self.FileName, self.Lineno)) - + + ## Pack Boolean type VPD PCD's value form string to binary type. + # + # @param ValueString The boolean type string for pack. + # + # def _PackBooleanValue(self, ValueString): - if ValueString.upper() == "TRUE": + if ValueString.upper() == "TRUE" or ValueString in ["1", "0x1", "0x01"]: try: self.PcdValue = pack(_FORMAT_CHAR[1], 1) except: @@ -83,18 +109,65 @@ class PcdEntry: self.PcdValue = pack(_FORMAT_CHAR[1], 0) except: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, - "Invalid size or value for PCD %s to pack(File: %s Line: %s)." % (self.PcdCName, self.FileName, self.Lineno)) - + "Invalid size or value for PCD %s to pack(File: %s Line: %s)." % (self.PcdCName, self.FileName, self.Lineno)) + + ## Pack Integer type VPD PCD's value form string to binary type. + # + # @param ValueString The Integer type string for pack. + # + # def _PackIntValue(self, IntValue, Size): if Size not in _FORMAT_CHAR.keys(): EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid size %d for PCD %s in integer datum size(File: %s Line: %s)." % (Size, self.PcdCName, self.FileName, self.Lineno)) + + if Size == 1: + if IntValue < 0: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "PCD can't be set to negative value %d for PCD %s in UINT8 datum type(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif IntValue >= 0x100: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "Too large PCD value %d for datum type UINT8 for PCD %s(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif Size == 2: + if IntValue < 0: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "PCD can't be set to negative value %d for PCD %s in UINT16 datum type(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif IntValue >= 0x10000: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "Too large PCD value %d for datum type UINT16 for PCD %s(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif Size == 4: + if IntValue < 0: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "PCD can't be set to negative value %d for PCD %s in UINT32 datum type(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif IntValue >= 0x100000000: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "Too large PCD value %d for datum type UINT32 for PCD %s(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif Size == 8: + if IntValue < 0: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "PCD can't be set to negative value %d for PCD %s in UINT32 datum type(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif IntValue >= 0x10000000000000000: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "Too large PCD value %d for datum type UINT32 for PCD %s(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + else: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "Invalid size %d for PCD %s in integer datum size(File: %s Line: %s)." % (Size, self.PcdCName, self.FileName, self.Lineno)) + try: self.PcdValue = pack(_FORMAT_CHAR[Size], IntValue) except: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid size or value for PCD %s to pack(File: %s Line: %s)." % (self.PcdCName, self.FileName, self.Lineno)) - + + ## Pack VOID* type VPD PCD's value form string to binary type. + # + # The VOID* type of string divided into 3 sub-type: + # 1: L"String", Unicode type string. + # 2: "String", Ascii type string. + # 3: {bytearray}, only support byte-array. + # + # @param ValueString The Integer type string for pack. + # def _PackPtrValue(self, ValueString, Size): if ValueString.startswith('L"'): self._PackUnicode(ValueString, Size) @@ -105,7 +178,11 @@ class PcdEntry: else: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid VOID* type PCD %s value %s (File: %s Line: %s)" % (self.PcdCName, ValueString, self.FileName, self.Lineno)) - + + ## Pack an Ascii PCD value. + # + # An Ascii string for a PCD should be in format as "". + # def _PackString(self, ValueString, Size): if (Size < 0): EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, @@ -123,8 +200,12 @@ class PcdEntry: self.PcdValue= pack('%ds' % Size, ValueString) except: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, - "Invalid size or value for PCD %s to pack(File: %s Line: %s)." % (self.PcdCName, self.FileName, self.Lineno)) - + "Invalid size or value for PCD %s to pack(File: %s Line: %s)." % (self.PcdCName, self.FileName, self.Lineno)) + + ## Pack a byte-array PCD value. + # + # A byte-array for a PCD should be in format as {0x01, 0x02, ...}. + # def _PackByteArray(self, ValueString, Size): if (Size < 0): EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid parameter Size %s of PCD %s!(File: %s Line: %s)" % (self.PcdBinSize, self.PcdCName, self.FileName, self.Lineno)) @@ -206,9 +287,18 @@ class PcdEntry: ReturnArray.append(0) self.PcdValue = ReturnArray.tolist() - -class GenVPD : - + + + +## The class implementing the BPDG VPD PCD offset fix process +# +# The VPD PCD offset fix process includes: +# 1. Parse the input guided.txt file and store it in the data structure; +# 2. Format the input file data to remove unused lines; +# 3. Fixed offset if needed; +# 4. Generate output file, including guided.map and guided.bin file; +# +class GenVPD : ## Constructor of DscBuildData # # Initialize object of GenVPD @@ -310,7 +400,7 @@ class GenVPD : except: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid PCD size value %s at file: %s line: %s" % (PCD.PcdSize, self.InputFileName, PCD.Lineno)) - if PCD._IsBoolean(PCD.PcdValue): + if PCD._IsBoolean(PCD.PcdValue, PCD.PcdSize): PCD._PackBooleanValue(PCD.PcdValue) self.FileLinesList[count] = PCD count += 1 diff --git a/BaseTools/Source/Python/BPDG/StringTable.py b/BaseTools/Source/Python/BPDG/StringTable.py index 0db282a143..a661da0f94 100644 --- a/BaseTools/Source/Python/BPDG/StringTable.py +++ b/BaseTools/Source/Python/BPDG/StringTable.py @@ -55,7 +55,7 @@ Intel(r) Binary Product Data Generation Tool (Intel(r) BPDG) Copyright (c) 2010 Intel Corporation All Rights Reserved. Required Flags: - -o VPD_FILENAME, --vpd-filename=VPD_FILENAME + -o BIN_FILENAME, --vpd-filename=BIN_FILENAME Specify the file name for the VPD binary file -m FILENAME, --map-filename=FILENAME Generate file name for consumption during the build that contains @@ -67,11 +67,10 @@ Required Flags: MSG_OPTION_HELP = ("Show this help message and exit.") MSG_OPTION_DEBUG_LEVEL = ("Print DEBUG statements, where DEBUG_LEVEL is 0-9.") MSG_OPTION_VERBOSE = ("Print informational statements.") -MSG_OPTION_SILENT = ("Only the exit code will be returned, all informational and error messages will not be displayed.") MSG_OPTION_QUIET = ("Returns the exit code and will display only error messages.") MSG_OPTION_VPD_FILENAME = ("Specify the file name for the VPD binary file.") MSG_OPTION_MAP_FILENAME = ("Generate file name for consumption during the build that contains the mapping of Pcd name, offset, datum size and value derived from the input file and any automatic calculations.") -MSG_OPTION_FORCE = ("Disable prompting the user for overwriting files as well as for missing input content.") +MSG_OPTION_FORCE = ("Will force overwriting existing output files rather than returning an error message.") ERR_INVALID_DEBUG_LEVEL = ("Invalid level for debug message. Only " "'DEBUG', 'INFO', 'WARNING', 'ERROR', " diff --git a/BaseTools/Source/Python/Common/BuildToolError.py b/BaseTools/Source/Python/Common/BuildToolError.py index 9986ba2b0d..b5dc3712e0 100644 --- a/BaseTools/Source/Python/Common/BuildToolError.py +++ b/BaseTools/Source/Python/Common/BuildToolError.py @@ -1,7 +1,7 @@ ## @file # Standardized Error Hanlding infrastructures. # -# Copyright (c) 2007, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -125,7 +125,7 @@ gErrorMessage = { RESOURCE_FULL : "Full", RESOURCE_OVERFLOW : "Overflow", RESOURCE_UNDERRUN : "Underrun", - RESOURCE_UNKNOWN_ERROR : "Unkown error", + RESOURCE_UNKNOWN_ERROR : "Unknown error", ATTRIBUTE_NOT_AVAILABLE : "Not available", ATTRIBUTE_GET_FAILURE : "Failed to retrieve", diff --git a/BaseTools/Source/Python/Common/DataType.py b/BaseTools/Source/Python/Common/DataType.py index 62a23ea773..d9d1774e27 100644 --- a/BaseTools/Source/Python/Common/DataType.py +++ b/BaseTools/Source/Python/Common/DataType.py @@ -355,7 +355,6 @@ TAB_DSC_DEFINES_BS_BASE_ADDRESS = 'BsBaseAddress' TAB_DSC_DEFINES_RT_BASE_ADDRESS = 'RtBaseAddress' TAB_DSC_DEFINES_DEFINE = 'DEFINE' TAB_DSC_DEFINES_VPD_TOOL_GUID = 'VPD_TOOL_GUID' -TAB_DSC_DEFINES_VPD_FILENAME = 'VPD_FILENAME' TAB_FIX_LOAD_TOP_MEMORY_ADDRESS = 'FIX_LOAD_TOP_MEMORY_ADDRESS' # @@ -364,7 +363,6 @@ TAB_FIX_LOAD_TOP_MEMORY_ADDRESS = 'FIX_LOAD_TOP_MEMORY_ADDRESS' TAB_TAT_DEFINES_ACTIVE_PLATFORM = 'ACTIVE_PLATFORM' TAB_TAT_DEFINES_ACTIVE_MODULE = 'ACTIVE_MODULE' TAB_TAT_DEFINES_TOOL_CHAIN_CONF = 'TOOL_CHAIN_CONF' -TAB_TAT_DEFINES_MULTIPLE_THREAD = 'MULTIPLE_THREAD' TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER = 'MAX_CONCURRENT_THREAD_NUMBER' TAB_TAT_DEFINES_TARGET = 'TARGET' TAB_TAT_DEFINES_TOOL_CHAIN_TAG = 'TOOL_CHAIN_TAG' diff --git a/BaseTools/Source/Python/Common/Dictionary.py b/BaseTools/Source/Python/Common/Dictionary.py index e3460e9891..de3556b892 100644 --- a/BaseTools/Source/Python/Common/Dictionary.py +++ b/BaseTools/Source/Python/Common/Dictionary.py @@ -25,26 +25,26 @@ from DataType import * # @retval 1 Open file failed # def ConvertTextFileToDictionary(FileName, Dictionary, CommentCharacter, KeySplitCharacter, ValueSplitFlag, ValueSplitCharacter): - try: - F = open(FileName,'r') - Keys = [] - for Line in F: - if Line.startswith(CommentCharacter): - continue - LineList = Line.split(KeySplitCharacter,1) - if len(LineList) >= 2: - Key = LineList[0].split() - if len(Key) == 1 and Key[0][0] != CommentCharacter and Key[0] not in Keys: - if ValueSplitFlag: - Dictionary[Key[0]] = LineList[1].replace('\\','/').split(ValueSplitCharacter) - else: - Dictionary[Key[0]] = LineList[1].strip().replace('\\','/') - Keys += [Key[0]] - F.close() - return 0 - except: - EdkLogger.info('Open file failed') - return 1 + try: + F = open(FileName,'r') + Keys = [] + for Line in F: + if Line.startswith(CommentCharacter): + continue + LineList = Line.split(KeySplitCharacter,1) + if len(LineList) >= 2: + Key = LineList[0].split() + if len(Key) == 1 and Key[0][0] != CommentCharacter and Key[0] not in Keys: + if ValueSplitFlag: + Dictionary[Key[0]] = LineList[1].replace('\\','/').split(ValueSplitCharacter) + else: + Dictionary[Key[0]] = LineList[1].strip().replace('\\','/') + Keys += [Key[0]] + F.close() + return 0 + except: + EdkLogger.info('Open file failed') + return 1 ## Print the dictionary # @@ -53,11 +53,11 @@ def ConvertTextFileToDictionary(FileName, Dictionary, CommentCharacter, KeySplit # @param Dict: The dictionary to be printed # def printDict(Dict): - if Dict != None: - KeyList = Dict.keys() - for Key in KeyList: - if Dict[Key] != '': - print Key + ' = ' + str(Dict[Key]) + if Dict != None: + KeyList = Dict.keys() + for Key in KeyList: + if Dict[Key] != '': + print Key + ' = ' + str(Dict[Key]) ## Print the dictionary # @@ -67,9 +67,9 @@ def printDict(Dict): # @param key: The key of the item to be printed # def printList(Key, List): - if type(List) == type([]): - if len(List) > 0: - if key.find(TAB_SPLIT) != -1: - print "\n" + Key - for Item in List: - print Item + if type(List) == type([]): + if len(List) > 0: + if Key.find(TAB_SPLIT) != -1: + print "\n" + Key + for Item in List: + print Item diff --git a/BaseTools/Source/Python/Common/String.py b/BaseTools/Source/Python/Common/String.py index 283e913b3b..195fa5c6ca 100644 --- a/BaseTools/Source/Python/Common/String.py +++ b/BaseTools/Source/Python/Common/String.py @@ -23,6 +23,9 @@ import EdkLogger as EdkLogger from GlobalData import * from BuildToolError import * +gHexVerPatt = re.compile('0x[a-f0-9]{4}[a-f0-9]{4}$',re.IGNORECASE) +gHumanReadableVerPatt = re.compile(r'([1-9][0-9]*|0)\.[0-9]{1,2}$') + ## GetSplitValueList # # Get a value list from a string with multiple values splited with SplitTag @@ -377,6 +380,34 @@ def GetDefineValue(String, Key, CommentCharacter): String = CleanString(String) return String[String.find(Key + ' ') + len(Key + ' ') : ] +## GetHexVerValue +# +# Get a Hex Version Value +# +# @param VerString: The version string to be parsed +# +# +# @retval: If VerString is incorrectly formatted, return "None" which will break the build. +# If VerString is correctly formatted, return a Hex value of the Version Number (0xmmmmnnnn) +# where mmmm is the major number and nnnn is the adjusted minor number. +# +def GetHexVerValue(VerString): + VerString = CleanString(VerString) + + if gHumanReadableVerPatt.match(VerString): + ValueList = VerString.split('.') + Major = ValueList[0] + Minor = ValueList[1] + if len(Minor) == 1: + Minor += '0' + DeciValue = (int(Major) << 16) + int(Minor); + return "0x%08x"%DeciValue + elif gHexVerPatt.match(VerString): + return VerString + else: + return None + + ## GetSingleValueOfKeyFromLines # # Parse multiple strings as below to get value of each definition line diff --git a/BaseTools/Source/Python/Common/TargetTxtClassObject.py b/BaseTools/Source/Python/Common/TargetTxtClassObject.py index fc5d589a59..a7dec65a25 100644 --- a/BaseTools/Source/Python/Common/TargetTxtClassObject.py +++ b/BaseTools/Source/Python/Common/TargetTxtClassObject.py @@ -1,7 +1,7 @@ ## @file # This file is used to define each component of Target.txt file # -# Copyright (c) 2007, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -37,7 +37,6 @@ class TargetTxtClassObject(object): DataType.TAB_TAT_DEFINES_ACTIVE_PLATFORM : '', DataType.TAB_TAT_DEFINES_ACTIVE_MODULE : '', DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF : '', - DataType.TAB_TAT_DEFINES_MULTIPLE_THREAD : '', DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER : '', DataType.TAB_TAT_DEFINES_TARGET : [], DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG : [], @@ -102,12 +101,6 @@ class TargetTxtClassObject(object): elif Key in [DataType.TAB_TAT_DEFINES_TARGET, DataType.TAB_TAT_DEFINES_TARGET_ARCH, \ DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG]: self.TargetTxtDictionary[Key] = Value.split() - elif Key == DataType.TAB_TAT_DEFINES_MULTIPLE_THREAD: - if Value not in ["Enable", "Disable"]: - EdkLogger.error("build", FORMAT_INVALID, "Invalid setting of [%s]: %s." % (Key, Value), - ExtraData="\tSetting must be one of [Enable, Disable]", - File=FileName) - self.TargetTxtDictionary[Key] = Value elif Key == DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER: try: V = int(Value, 0) diff --git a/BaseTools/Source/Python/Common/ToolDefClassObject.py b/BaseTools/Source/Python/Common/ToolDefClassObject.py index 549f76cee9..b5cd5ee435 100644 --- a/BaseTools/Source/Python/Common/ToolDefClassObject.py +++ b/BaseTools/Source/Python/Common/ToolDefClassObject.py @@ -23,7 +23,7 @@ from BuildToolError import * from TargetTxtClassObject import * ## -# Static vailabes used for pattern +# Static variables used for pattern # gMacroRefPattern = re.compile('(DEF\([^\(\)]+\))') gEnvRefPattern = re.compile('(ENV\([^\(\)]+\))') diff --git a/BaseTools/Source/Python/Common/VpdInfoFile.py b/BaseTools/Source/Python/Common/VpdInfoFile.py index 0111744cc0..5f92fa5cdd 100644 --- a/BaseTools/Source/Python/Common/VpdInfoFile.py +++ b/BaseTools/Source/Python/Common/VpdInfoFile.py @@ -219,28 +219,23 @@ class VpdInfoFile: # @param ToolPath The string path name for BPDG tool # @param VpdFileName The string path name for VPD information guid.txt # -def CallExtenalBPDGTool(ToolPath, VpdFilePath, VpdFileName): +def CallExtenalBPDGTool(ToolPath, VpdFileName): assert ToolPath != None, "Invalid parameter ToolPath" - assert VpdFilePath != None and os.path.exists(VpdFilePath), "Invalid parameter VpdFileName" + assert VpdFileName != None and os.path.exists(VpdFileName), "Invalid parameter VpdFileName" - OutputDir = os.path.dirname(VpdFilePath) - if (VpdFileName == None or VpdFileName == "") : - FileName = os.path.basename(VpdFilePath) - BaseName, ext = os.path.splitext(FileName) - OutputMapFileName = os.path.join(OutputDir, "%s.map" % BaseName) - OutputBinFileName = os.path.join(OutputDir, "%s.bin" % BaseName) - else : - OutputMapFileName = os.path.join(OutputDir, "%s.map" % VpdFileName) - OutputBinFileName = os.path.join(OutputDir, "%s.bin" % VpdFileName) + OutputDir = os.path.dirname(VpdFileName) + FileName = os.path.basename(VpdFileName) + BaseName, ext = os.path.splitext(FileName) + OutputMapFileName = os.path.join(OutputDir, "%s.map" % BaseName) + OutputBinFileName = os.path.join(OutputDir, "%s.bin" % BaseName) try: PopenObject = subprocess.Popen([ToolPath, '-o', OutputBinFileName, '-m', OutputMapFileName, - '-s', + '-q', '-f', - '-v', - VpdFilePath], + VpdFileName], stdout=subprocess.PIPE, stderr= subprocess.PIPE) except Exception, X: diff --git a/BaseTools/Source/Python/CommonDataClass/CommonClass.py b/BaseTools/Source/Python/CommonDataClass/CommonClass.py index 509601007c..7a0123b1d9 100644 --- a/BaseTools/Source/Python/CommonDataClass/CommonClass.py +++ b/BaseTools/Source/Python/CommonDataClass/CommonClass.py @@ -1,7 +1,7 @@ ## @file # This file is used to define common items of class object # -# Copyright (c) 2007, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -53,7 +53,7 @@ class CommonClass(object): self.HelpText = HelpText self.HelpTextList = [] -## CommonClass +## CommonHeaderClass # # This class defined common items used in Module/Platform/Package files # @@ -301,7 +301,7 @@ class SkuInfoClass(object): # @retval Rtn Formatted String # def __str__(self): - Rtn = Rtn = 'SkuId = ' + str(self.SkuId) + "," + \ + Rtn = 'SkuId = ' + str(self.SkuId) + "," + \ 'SkuIdName = ' + str(self.SkuIdName) + "," + \ 'VariableName = ' + str(self.VariableName) + "," + \ 'VariableGuid = ' + str(self.VariableGuid) + "," + \ diff --git a/BaseTools/Source/Python/CommonDataClass/DistributionPackageClass.py b/BaseTools/Source/Python/CommonDataClass/DistributionPackageClass.py index b433299452..8f12026887 100644 --- a/BaseTools/Source/Python/CommonDataClass/DistributionPackageClass.py +++ b/BaseTools/Source/Python/CommonDataClass/DistributionPackageClass.py @@ -150,7 +150,6 @@ class DistributionPackageClass(object): # script. # if __name__ == '__main__': - pass D = DistributionPackageClass() D.GetDistributionPackage(os.getenv('WORKSPACE'), ['MdePkg/MdePkg.dec', 'TianoModulePkg/TianoModulePkg.dec'], ['MdeModulePkg/Application/HelloWorld/HelloWorld.inf']) Xml = DistributionPackageXml() diff --git a/BaseTools/Source/Python/PackagingTool/DependencyRules.py b/BaseTools/Source/Python/PackagingTool/DependencyRules.py index 7956c8a2ae..741736e39d 100644 --- a/BaseTools/Source/Python/PackagingTool/DependencyRules.py +++ b/BaseTools/Source/Python/PackagingTool/DependencyRules.py @@ -1,7 +1,7 @@ ## @file # This file is for installed package information database operations # -# Copyright (c) 2007 - 2008, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -25,7 +25,7 @@ DEPEX_CHECK_PACKAGE_NOT_FOUND, DEPEX_CHECK_DP_NOT_FOUND) = (0, 1, 2, 3) ## IpiDb # -# This class represents the installed package information databse +# This class represents the installed package information database # Add/Remove/Get installed distribution package information here. # # @@ -57,7 +57,7 @@ class DependencyRules(object): return False - ## Check whether a module depex satified by current workspace. + ## Check whether a module depex satisfied by current workspace. # # @param ModuleObj: # @param DpObj: @@ -103,7 +103,7 @@ class DependencyRules(object): EdkLogger.verbose("Check package exists in workspace ... DONE!") - ## Check whether a package depex satified by current workspace. + ## Check whether a package depex satisfied by current workspace. # # @param ModuleObj: # @param DpObj: @@ -135,7 +135,7 @@ class DependencyRules(object): EdkLogger.verbose("Check DP exists in workspace ... DONE!") - ## Check whether a DP depex satified by current workspace. + ## Check whether a DP depex satisfied by current workspace. # # @param ModuleObj: # @param DpObj: @@ -158,7 +158,7 @@ class DependencyRules(object): return True - ## Check whether a DP depex satified by current workspace. + ## Check whether a DP depex satisfied by current workspace. # # @param ModuleObj: # @param DpObj: diff --git a/BaseTools/Source/Python/TargetTool/TargetTool.py b/BaseTools/Source/Python/TargetTool/TargetTool.py index 68c55718bc..7993023150 100644 --- a/BaseTools/Source/Python/TargetTool/TargetTool.py +++ b/BaseTools/Source/Python/TargetTool/TargetTool.py @@ -33,7 +33,6 @@ class TargetTool(): self.TargetTxtDictionary = { TAB_TAT_DEFINES_ACTIVE_PLATFORM : None, TAB_TAT_DEFINES_TOOL_CHAIN_CONF : None, - TAB_TAT_DEFINES_MULTIPLE_THREAD : None, TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER : None, TAB_TAT_DEFINES_TARGET : None, TAB_TAT_DEFINES_TOOL_CHAIN_TAG : None, @@ -44,7 +43,7 @@ class TargetTool(): def LoadTargetTxtFile(self, filename): if os.path.exists(filename) and os.path.isfile(filename): - return self.ConvertTextFileToDict(filename, '#', '=') + return self.ConvertTextFileToDict(filename, '#', '=') else: raise ParseError('LoadTargetTxtFile() : No Target.txt file exists.') return 1 @@ -64,7 +63,7 @@ class TargetTool(): Key = LineList[0].strip() if Key.startswith(CommentCharacter) == False and Key in self.TargetTxtDictionary.keys(): if Key == TAB_TAT_DEFINES_ACTIVE_PLATFORM or Key == TAB_TAT_DEFINES_TOOL_CHAIN_CONF \ - or Key == TAB_TAT_DEFINES_MULTIPLE_THREAD or Key == TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER \ + or Key == TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER \ or Key == TAB_TAT_DEFINES_ACTIVE_MODULE: self.TargetTxtDictionary[Key] = LineList[1].replace('\\', '/').strip() elif Key == TAB_TAT_DEFINES_TARGET or Key == TAB_TAT_DEFINES_TARGET_ARCH \ @@ -149,15 +148,13 @@ def GetConfigureKeyValue(self, Key): else: EdkLogger.error("TagetTool", BuildToolError.FILE_NOT_FOUND, "Tooldef file %s does not exist!" % self.Opt.TOOL_DEFINITION_FILE, RaiseError=False) - elif Key == TAB_TAT_DEFINES_MULTIPLE_THREAD and self.Opt.NUM != None: - if self.Opt.NUM >= 2: - Line = "%-30s = %s\n" % (Key, 'Enable') - else: - Line = "%-30s = %s\n" % (Key, 'Disable') + + elif self.Opt.NUM >= 2: + Line = "%-30s = %s\n" % (Key, 'Enable') + elif self.Opt.NUM <= 1: + Line = "%-30s = %s\n" % (Key, 'Disable') elif Key == TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER and self.Opt.NUM != None: Line = "%-30s = %s\n" % (Key, str(self.Opt.NUM)) - elif Key == TAB_TAT_DEFINES_MULTIPLE_THREAD and self.Opt.ENABLE_MULTI_THREAD != None: - Line = "%-30s = %s\n" % (Key, self.Opt.ENABLE_MULTI_THREAD) elif Key == TAB_TAT_DEFINES_TARGET and self.Opt.TARGET != None: Line = "%-30s = %s\n" % (Key, ''.join(elem + ' ' for elem in self.Opt.TARGET)) elif Key == TAB_TAT_DEFINES_TARGET_ARCH and self.Opt.TARGET_ARCH != None: @@ -216,8 +213,6 @@ def MyOptionParser(): help="Specify the build rule configure file, which replaces target.txt's BUILD_RULE_CONF definition. If not specified, the default value Conf/build_rule.txt will be set.") parser.add_option("-m", "--multithreadnum", action="callback", type="int", dest="NUM", callback=RangeCheckCallback, help="Specify the multi-thread number which replace target.txt's MAX_CONCURRENT_THREAD_NUMBER. If the value is less than 2, MULTIPLE_THREAD will be disabled. If the value is larger than 1, MULTIPLE_THREAD will be enabled.") - parser.add_option("-e", "--enablemultithread", action="store", type="choice", choices=['Enable', 'Disable'], dest="ENABLE_MULTI_THREAD", - help="Specify whether enable multi-thread! If Enable, multi-thread is enabled; If Disable, mutli-thread is disable") (opt, args)=parser.parse_args() return (opt, args) diff --git a/BaseTools/Source/Python/Trim/Trim.py b/BaseTools/Source/Python/Trim/Trim.py index 75c08bbabf..b3ad16715a 100644 --- a/BaseTools/Source/Python/Trim/Trim.py +++ b/BaseTools/Source/Python/Trim/Trim.py @@ -40,6 +40,10 @@ gPragmaPattern = re.compile("^\s*#pragma\s+pack", re.MULTILINE) gHexNumberPattern = re.compile("0[xX]([0-9a-fA-F]+)") ## Regular expression for matching "Include ()" in asl file gAslIncludePattern = re.compile("^(\s*)[iI]nclude\s*\(\"?([^\"\(\)]+)\"\)", re.MULTILINE) +## Regular expression for matching C style #include "XXX.asl" in asl file +gAslCIncludePattern = re.compile(r'^(\s*)#include\s*[<"]\s*([-\\/\w.]+)\s*[>"]', re.MULTILINE) +## Regular expression for matching constant with 'ULL' and 'UL', 'LL', 'L' postfix +gLongNumberPattern = re.compile("(0[xX][0-9a-fA-F]+|[0-9]+)U?LL", re.MULTILINE) ## Patterns used to convert EDK conventions to EDK2 ECP conventions gImportCodePatterns = [ [ @@ -118,7 +122,7 @@ gIncludedAslFile = [] # @param Target File to store the trimmed content # @param Convert If True, convert standard HEX format to MASM format # -def TrimPreprocessedFile(Source, Target, Convert): +def TrimPreprocessedFile(Source, Target, ConvertHex, TrimLong): CreateDirectory(os.path.dirname(Target)) try: f = open (Source, 'r') @@ -164,8 +168,10 @@ def TrimPreprocessedFile(Source, Target, Convert): % (LineIndexOfOriginalFile + 1)) # convert HEX number format if indicated - if Convert: + if ConvertHex: Line = gHexNumberPattern.sub(r"0\1h", Line) + if TrimLong: + Line = gLongNumberPattern.sub(r"\1", Line) if LineNumber != None: EdkLogger.verbose("Got line directive: line=%d" % LineNumber) @@ -264,31 +270,43 @@ def TrimPreprocessedVfr(Source, Target): ## Read the content ASL file, including ASL included, recursively # -# @param Source File to be read -# @param Indent Spaces before the Include() statement +# @param Source File to be read +# @param Indent Spaces before the Include() statement +# @param IncludePathList The list of external include file # -def DoInclude(Source, Indent=''): +def DoInclude(Source, Indent='', IncludePathList=[]): NewFileContent = [] - # avoid A "include" B and B "include" A - if Source in gIncludedAslFile: - EdkLogger.warn("Trim", "Circular include", - ExtraData= "%s -> %s" % (" -> ".join(gIncludedAslFile), Source)) - return [] - gIncludedAslFile.append(Source) try: - F = open(Source,'r') + for IncludePath in IncludePathList: + IncludeFile = os.path.join(IncludePath, Source) + if os.path.isfile(IncludeFile): + F = open(IncludeFile, "r") + break + else: + EdkLogger.error("Trim", "Failed to find include file %s" % Source) except: EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Source) + + # avoid A "include" B and B "include" A + IncludeFile = os.path.abspath(os.path.normpath(IncludeFile)) + if IncludeFile in gIncludedAslFile: + EdkLogger.warn("Trim", "Circular include", + ExtraData= "%s -> %s" % (" -> ".join(gIncludedAslFile), IncludeFile)) + return [] + gIncludedAslFile.append(IncludeFile) + for Line in F: Result = gAslIncludePattern.findall(Line) if len(Result) == 0: - NewFileContent.append("%s%s" % (Indent, Line)) - continue + Result = gAslCIncludePattern.findall(Line) + if len(Result) == 0 or os.path.splitext(Result[0][1])[1].lower() not in [".asl", ".asi"]: + NewFileContent.append("%s%s" % (Indent, Line)) + continue CurrentIndent = Indent + Result[0][0] IncludedFile = Result[0][1] - NewFileContent.extend(DoInclude(IncludedFile, CurrentIndent)) + NewFileContent.extend(DoInclude(IncludedFile, CurrentIndent, IncludePathList)) NewFileContent.append("\n") gIncludedAslFile.pop() @@ -301,19 +319,44 @@ def DoInclude(Source, Indent=''): # # Replace ASL include statement with the content the included file # -# @param Source File to be trimmed -# @param Target File to store the trimmed content +# @param Source File to be trimmed +# @param Target File to store the trimmed content +# @param IncludePathFile The file to log the external include path # -def TrimAslFile(Source, Target): +def TrimAslFile(Source, Target, IncludePathFile): CreateDirectory(os.path.dirname(Target)) - Cwd = os.getcwd() SourceDir = os.path.dirname(Source) if SourceDir == '': SourceDir = '.' - os.chdir(SourceDir) - Lines = DoInclude(Source) - os.chdir(Cwd) + + # + # Add source directory as the first search directory + # + IncludePathList = [SourceDir] + + # + # If additional include path file is specified, append them all + # to the search directory list. + # + if IncludePathFile: + try: + LineNum = 0 + for Line in open(IncludePathFile,'r'): + LineNum += 1 + if Line.startswith("/I") or Line.startswith ("-I"): + IncludePathList.append(Line[2:].strip()) + else: + EdkLogger.warn("Trim", "Invalid include line in include list file.", IncludePathFile, LineNum) + except: + EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=IncludePathFile) + + Lines = DoInclude(Source, '', IncludePathList) + + # + # Undef MIN and MAX to avoid collision in ASL source code + # + Lines.insert(0, "#undef MIN\n#undef MAX\n") # save all lines trimmed try: @@ -437,6 +480,10 @@ def Options(): make_option("-c", "--convert-hex", dest="ConvertHex", action="store_true", help="Convert standard hex format (0xabcd) to MASM format (abcdh)"), + make_option("-l", "--trim-long", dest="TrimLong", action="store_true", + help="Remove postfix of long number"), + make_option("-i", "--include-path-file", dest="IncludePathFile", + help="The input file is include path list to search for ASL include file"), make_option("-o", "--output", dest="OutputFile", help="File to store the trimmed content"), make_option("-v", "--verbose", dest="LogLevel", action="store_const", const=EdkLogger.VERBOSE, @@ -449,7 +496,7 @@ def Options(): ] # use clearer usage to override default usage message - UsageString = "%prog [-s|-r|-a] [-c] [-v|-d |-q] [-o ] " + UsageString = "%prog [-s|-r|-a] [-c] [-v|-d |-q] [-i ] [-o ] " Parser = OptionParser(description=__copyright__, version=__version__, option_list=OptionList, usage=UsageString) Parser.set_defaults(FileType="Vfr") @@ -495,13 +542,13 @@ def Main(): elif CommandOptions.FileType == "Asl": if CommandOptions.OutputFile == None: CommandOptions.OutputFile = os.path.splitext(InputFile)[0] + '.iii' - TrimAslFile(InputFile, CommandOptions.OutputFile) + TrimAslFile(InputFile, CommandOptions.OutputFile, CommandOptions.IncludePathFile) elif CommandOptions.FileType == "R8SourceCode": TrimR8Sources(InputFile, CommandOptions.OutputFile) else : if CommandOptions.OutputFile == None: CommandOptions.OutputFile = os.path.splitext(InputFile)[0] + '.iii' - TrimPreprocessedFile(InputFile, CommandOptions.OutputFile, CommandOptions.ConvertHex) + TrimPreprocessedFile(InputFile, CommandOptions.OutputFile, CommandOptions.ConvertHex, CommandOptions.TrimLong) except FatalError, X: import platform import traceback diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py b/BaseTools/Source/Python/Workspace/MetaFileParser.py index fb66e41fb5..3c7d7fdf6a 100644 --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py @@ -474,11 +474,11 @@ class InfParser(MetaFileParser): def _DefineParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1) self._ValueList[0:len(TokenList)] = TokenList - self._Macros[TokenList[0]] = ReplaceMacro(TokenList[1], self._Macros, False) if self._ValueList[1] == '': EdkLogger.error('Parser', FORMAT_INVALID, "No value specified", ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) - + self._Macros[TokenList[0]] = ReplaceMacro(TokenList[1], self._Macros, False) + ## [nmake] section parser (R8.x style only) def _NmakeParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1) @@ -655,6 +655,11 @@ class DscParser(MetaFileParser): continue # file private macros elif Line.upper().startswith('DEFINE '): + if self._Enabled < 0: + # Do not parse the macro and add it to self._Macros dictionary if directives + # statement is evaluated to false. + continue + (Name, Value) = self._MacroParser() # Make the defined macro in DSC [Defines] section also # available for FDF file. @@ -676,6 +681,11 @@ class DscParser(MetaFileParser): ) continue elif Line.upper().startswith('EDK_GLOBAL '): + if self._Enabled < 0: + # Do not parse the macro and add it to self._Macros dictionary + # if previous directives statement is evaluated to false. + continue + (Name, Value) = self._MacroParser() for Arch, ModuleType in self._Scope: self._LastItem = self._Store( @@ -802,8 +812,8 @@ class DscParser(MetaFileParser): if not self._SectionName in self._IncludeAllowedSection: EdkLogger.error("Parser", FORMAT_INVALID, File=self.MetaFile, Line=self._LineIndex+1, ExtraData="'!include' is not allowed under section [%s]" % self._SectionName) - # the included file must be relative to the parsing file - IncludedFile = os.path.join(self._FileDir, NormPath(self._ValueList[1], self._Macros)) + # the included file must be relative to workspace + IncludedFile = os.path.join(os.environ["WORKSPACE"], NormPath(self._ValueList[1], self._Macros)) Parser = DscParser(IncludedFile, self._FileType, self._Table, self._Macros, From=self._LastItem) # set the parser status with current status Parser._SectionName = self._SectionName diff --git a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py index dad6ecd49a..9d53fa8e68 100644 --- a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py +++ b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py @@ -141,7 +141,6 @@ class DscBuildData(PlatformBuildClassObject): self._BuildOptions = None self._LoadFixAddress = None self._VpdToolGuid = None - self._VpdFileName = None ## Get architecture def _GetArch(self): @@ -204,9 +203,7 @@ class DscBuildData(PlatformBuildClassObject): uuid.UUID(Record[1]) except: EdkLogger.error("build", FORMAT_INVALID, "Invalid GUID format for VPD_TOOL_GUID", File=self.MetaFile) - self._VpdToolGuid = Record[1] - elif Name == TAB_DSC_DEFINES_VPD_FILENAME: - self._VpdFileName = Record[1] + self._VpdToolGuid = Record[1] # set _Header to non-None in order to avoid database re-querying self._Header = 'DUMMY' @@ -350,16 +347,7 @@ class DscBuildData(PlatformBuildClassObject): if self._VpdToolGuid == None: self._VpdToolGuid = '' return self._VpdToolGuid - - ## Retrieve the VPD file Name, this is optional in DSC file - def _GetVpdFileName(self): - if self._VpdFileName == None: - if self._Header == None: - self._GetHeaderInfo() - if self._VpdFileName == None: - self._VpdFileName = '' - return self._VpdFileName - + ## Retrieve [SkuIds] section information def _GetSkuIds(self): if self._SkuIds == None: @@ -802,8 +790,7 @@ class DscBuildData(PlatformBuildClassObject): BsBaseAddress = property(_GetBsBaseAddress) RtBaseAddress = property(_GetRtBaseAddress) LoadFixAddress = property(_GetLoadFixAddress) - VpdToolGuid = property(_GetVpdToolGuid) - VpdFileName = property(_GetVpdFileName) + VpdToolGuid = property(_GetVpdToolGuid) SkuIds = property(_GetSkuIds) Modules = property(_GetModules) LibraryInstances = property(_GetLibraryInstances) @@ -1330,18 +1317,16 @@ class InfBuildData(ModuleBuildClassObject): if Name in self: self[Name] = Record[1] # some special items in [Defines] section need special treatment - elif Name in ('EFI_SPECIFICATION_VERSION', 'UEFI_SPECIFICATION_VERSION'): + elif Name in ('EFI_SPECIFICATION_VERSION', 'UEFI_SPECIFICATION_VERSION', 'EDK_RELEASE_VERSION', 'PI_SPECIFICATION_VERSION'): + if Name in ('EFI_SPECIFICATION_VERSION', 'UEFI_SPECIFICATION_VERSION'): + Name = 'UEFI_SPECIFICATION_VERSION' if self._Specification == None: self._Specification = sdict() - self._Specification['UEFI_SPECIFICATION_VERSION'] = Record[1] - elif Name == 'EDK_RELEASE_VERSION': - if self._Specification == None: - self._Specification = sdict() - self._Specification[Name] = Record[1] - elif Name == 'PI_SPECIFICATION_VERSION': - if self._Specification == None: - self._Specification = sdict() - self._Specification[Name] = Record[1] + self._Specification[Name] = GetHexVerValue(Record[1]) + if self._Specification[Name] == None: + EdkLogger.error("build", FORMAT_NOT_SUPPORTED, + "'%s' format is not supported for %s" % (Record[1], Name), + File=self.MetaFile, Line=Record[-1]) elif Name == 'LIBRARY_CLASS': if self._LibraryClass == None: self._LibraryClass = [] diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py index af9d3d5f5a..54265952d0 100644 --- a/BaseTools/Source/Python/build/build.py +++ b/BaseTools/Source/Python/build/build.py @@ -305,7 +305,7 @@ class BuildUnit: ## str() method # - # It just returns the string representaion of self.BuildObject + # It just returns the string representation of self.BuildObject # # @param self The object pointer # @@ -943,7 +943,7 @@ class Build(): ## Build a module or platform # - # Create autogen code and makfile for a module or platform, and the launch + # Create autogen code and makefile for a module or platform, and the launch # "make" command to build it # # @param Target The target of build command