diff --git a/BaseTools/Bin/Win32/BootSectImage.exe b/BaseTools/Bin/Win32/BootSectImage.exe index 06cdd4e0f3..cb7cf6a44c 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 6c80b40eb4..558b09a694 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 a36b64accb..5967c54413 100755 Binary files a/BaseTools/Bin/Win32/EfiRom.exe and b/BaseTools/Bin/Win32/EfiRom.exe differ diff --git a/BaseTools/Bin/Win32/GenBootSector.exe b/BaseTools/Bin/Win32/GenBootSector.exe index 7d3b3980d6..3542bacbee 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 a77006e763..8c8d018442 100755 Binary files a/BaseTools/Bin/Win32/GenCrc32.exe and b/BaseTools/Bin/Win32/GenCrc32.exe differ diff --git a/BaseTools/Bin/Win32/GenFds.exe b/BaseTools/Bin/Win32/GenFds.exe index d9b51693c5..6dcfc84698 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 32c813992e..272ae26409 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 df202d399b..1eefa3aaa3 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 7a816a2e9d..8773b715c5 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 0dd72b849a..8a3005c1fd 100755 Binary files a/BaseTools/Bin/Win32/GenPage.exe and b/BaseTools/Bin/Win32/GenPage.exe differ diff --git a/BaseTools/Bin/Win32/GenSec.exe b/BaseTools/Bin/Win32/GenSec.exe index 62b04ee013..b3a7bc26b7 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 ee60e62d32..d0ba8e1807 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 5397a5c5e5..f34c530eff 100644 Binary files a/BaseTools/Bin/Win32/LzmaCompress.exe and b/BaseTools/Bin/Win32/LzmaCompress.exe differ diff --git a/BaseTools/Bin/Win32/Split.exe b/BaseTools/Bin/Win32/Split.exe index ce172e92d6..0dc4b74338 100755 Binary files a/BaseTools/Bin/Win32/Split.exe and b/BaseTools/Bin/Win32/Split.exe differ diff --git a/BaseTools/Bin/Win32/TianoCompress.exe b/BaseTools/Bin/Win32/TianoCompress.exe index 58afbabc3a..2789735c04 100755 Binary files a/BaseTools/Bin/Win32/TianoCompress.exe and b/BaseTools/Bin/Win32/TianoCompress.exe differ diff --git a/BaseTools/Bin/Win32/VfrCompile.exe b/BaseTools/Bin/Win32/VfrCompile.exe index dfbff8c173..1431841561 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 915ec6540f..1ce534e43b 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 5bf71358a9..0803c85e52 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 0f2921c714..8a7663db27 100644 --- a/BaseTools/Conf/build_rule.template +++ b/BaseTools/Conf/build_rule.template @@ -304,7 +304,7 @@ "$(MTOC)" -subsystem $(MODULE_TYPE) $(MTOC_FLAGS) ${src} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff # create symbol file for GDB debug -$(DSYMUTIL) ${src} - GenFw -e $(MODULE_TYPE) -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff + GenFw --xip -e $(MODULE_TYPE) -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff $(CP) ${dst} $(OUTPUT_DIR) $(CP) ${dst} $(BIN_DIR) -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR) diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template index e797f15c53..2dbc776d94 100644 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -137,8 +137,8 @@ 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 DEFINE IPHONE_TOOLS = /Developer/Platforms/iPhoneOS.platform/Developer -DEFINE RVCT31_TOOLS_PATH = c:/Program Files/ARM/RVCT/Programs/3.1/569/win_32-pentium -DEFINE RVCT31CYGWIN_TOOLS_PATH = /cygdrive/c/Program Files/ARM/RVCT/Programs/3.1/569/win_32-pentium +DEFINE RVCT31_TOOLS_PATH = c:/Program Files/ARM/RVCT/Programs/3.1/761/win_32-pentium +DEFINE RVCT31CYGWIN_TOOLS_PATH = /cygdrive/c/Program Files/ARM/RVCT/Programs/3.1/761/win_32-pentium # Update to the location of the gcc executables DEFINE ARMGCC_BIN = / @@ -1745,6 +1745,7 @@ DEFINE GCC44_ASM_FLAGS = DEF(GCC_ASM_FLAGS) *_CYGGCC_IA32_ASLPP_PATH = DEF(CYGWIN_BINIA32)gcc *_CYGGCC_IA32_ASLDLINK_PATH = DEF(CYGWIN_BINIA32)ld *_CYGGCC_IA32_RC_PATH = DEF(CYGWIN_BINIA32)objcopy +*_CYGGCC_IA32_OBJECT_PATH = DEF(CYGWIN_BINIA32)objcopy *_CYGGCC_IA32_CC_FLAGS = DEF(GCC_IA32_CC_FLAGS) *_CYGGCC_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS) @@ -1763,6 +1764,7 @@ DEFINE GCC44_ASM_FLAGS = DEF(GCC_ASM_FLAGS) *_CYGGCC_X64_ASLPP_PATH = DEF(CYGWIN_BINX64)gcc *_CYGGCC_X64_ASLDLINK_PATH = DEF(CYGWIN_BINX64)ld *_CYGGCC_X64_RC_PATH = DEF(CYGWIN_BINX64)objcopy +*_CYGGCC_X64_OBJECT_PATH = DEF(CYGWIN_BINX64)objcopy *_CYGGCC_X64_CC_FLAGS = DEF(GCC_X64_CC_FLAGS) *_CYGGCC_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS) @@ -1782,6 +1784,7 @@ DEFINE GCC44_ASM_FLAGS = DEF(GCC_ASM_FLAGS) *_CYGGCC_IPF_OBJCOPY_PATH = DEF(CYGWIN_BINIPF)objcopy *_CYGGCC_IPF_SYMRENAME_PATH = DEF(CYGWIN_BINIPF)objcopy *_CYGGCC_IPF_RC_PATH = DEF(CYGWIN_BINIPF)objcopy +*_CYGGCC_IPF_OBJECT_PATH = DEF(CYGWIN_BINIPF)objcopy *_CYGGCC_IPF_CC_FLAGS = DEF(GCC_IPF_CC_FLAGS) *_CYGGCC_IPF_DLINK_FLAGS = DEF(GCC_IPF_DLINK_FLAGS) @@ -2757,8 +2760,8 @@ RELEASE_XCODE32_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -mthumb-inter # # Use default values, or override in DSC file # -*_RVCT31_ARM_ARCHCC_FLAGS = --thumb --cpu 7-A -*_RVCT31_ARM_ARCHASM_FLAGS = --cpu 7-A +*_RVCT31_ARM_ARCHCC_FLAGS = --thumb --cpu ARM1176JZF-S +*_RVCT31_ARM_ARCHASM_FLAGS = --cpu ARM1176JZF-S *_RVCT31_ARM_ARCHDLINK_FLAGS = *_RVCT31_ARM_PLATFORM_FLAGS = @@ -2771,8 +2774,8 @@ RELEASE_RVCT31_ARM_DLINK_FLAGS = $(ARCHDLINK_FLAGS) --entry $(IMAGE_ENTRY_PO *_RVCT31_ARM_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -E -DVFRCOMPILE --preinclude $(DEST_DIR_DEBUG)/$(MODULE_NAME)StrDefs.h *_RVCT31_ARM_MAKE_PATH = nmake *_RVCT31_ARM_SLINK_FLAGS = --partial -o - DEBUG_RVCT31_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -g -Ospace -c --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --enum_is_int --preinclude AutoGen.h --diag_warning 167 -RELEASE_RVCT31_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -Ospace -c --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --enum_is_int --preinclude AutoGen.h --diag_warning 167 + DEBUG_RVCT31_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -c -g -O2 --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --enum_is_int --preinclude AutoGen.h --diag_warning 167 +RELEASE_RVCT31_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -c --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --enum_is_int --preinclude AutoGen.h --diag_warning 167 ################## # ARM definitions @@ -2807,8 +2810,8 @@ RELEASE_RVCT31_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -Ospac # # Use default values, or override in DSC file # -*_RVCT31CYGWIN_ARM_ARCHCC_FLAGS = --thumb --cpu 7-A -*_RVCT31CYGWIN_ARM_ARCHASM_FLAGS = --cpu 7-A +*_RVCT31CYGWIN_ARM_ARCHCC_FLAGS = --thumb --cpu ARM1176JZF-S +*_RVCT31CYGWIN_ARM_ARCHASM_FLAGS = --cpu ARM1176JZF-S *_RVCT31CYGWIN_ARM_ARCHDLINK_FLAGS = *_RVCT31CYGWIN_ARM_PLATFORM_FLAGS = @@ -2820,8 +2823,8 @@ RELEASE_RVCT31CYGWIN_ARM_DLINK_FLAGS = "$(DLINKPATH_FLAG)" $(ARCHDLINK_FLAGS *_RVCT31CYGWIN_ARM_VFRPP_FLAGS = "$(CCPATH_FLAG)" $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -E -DVFRCOMPILE --preinclude `cygpath -m $(DEST_DIR_DEBUG)/$(MODULE_NAME)StrDefs.h` *_RVCT31CYGWIN_ARM_MAKE_PATH = make *_RVCT31CYGWIN_ARM_SLINK_FLAGS = "$(SLINKPATH_FLAG)" --partial -o - DEBUG_RVCT31CYGWIN_ARM_CC_FLAGS = "$(CCPATH_FLAG)" $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -c -g -Ospace --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --preinclude AutoGen.h --diag_warning 167 -RELEASE_RVCT31CYGWIN_ARM_CC_FLAGS = "$(CCPATH_FLAG)" $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -c -Ospace --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --preinclude AutoGen.h --diag_warning 167 + DEBUG_RVCT31CYGWIN_ARM_CC_FLAGS = "$(CCPATH_FLAG)" $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -c -g -O2 --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --preinclude AutoGen.h --diag_warning 167 +RELEASE_RVCT31CYGWIN_ARM_CC_FLAGS = "$(CCPATH_FLAG)" $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -c --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --preinclude AutoGen.h --diag_warning 167 ################## # ARM definitions diff --git a/BaseTools/ReadMe.txt b/BaseTools/ReadMe.txt index 82b3d5883f..37691e98fd 100644 --- a/BaseTools/ReadMe.txt +++ b/BaseTools/ReadMe.txt @@ -66,7 +66,7 @@ Notes: or modules because the AutoGen.* files have been be removed. The "makefile" itself cannot generate AutoGen.* files. Only "build" command can. 3) All .exe binary file including C and python tools are generated from: - r1707 \BaseTools\Source\ + r1707 VfrCompiler tool update + r1911 \BaseTools\Source\. Brief usage for Migration Tool MigrationMsa2Inf.exe: 1. Command line format: @@ -125,30 +125,7 @@ Brief usage for Migration Tool MigrationMsa2Inf.exe: f. When tool generates [LibraryClasses] section, the recommended library instances are lost. (No impact to build) 7. Pyton Source - r682 \BaseTools\Source\Python\MigrationMsa2Inf - - -Brief Usage for PcdSyntax Update: -Usage: - PcdSyntaxUpdate.exe -It searches all INF, DEC and DSC file under and update them with the following rules: -1. Update INF files to conform to INF spec 0.44: - a. Rename PCD section name: e.g. [PcdsFeatureFlag] -> [FeaturePcd] - b. Adjust PCD section item format: e.g. PcdDebugClearMemoryValue|gEfiMdePkgTokenSpaceGuid -> gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue - c. Update the syntax of binary INF file (not PCD related) -2. Update DEC files to confirm to DEC spec 0.36 - Adjust PCD section item format: e.g. PcdWinNtPhysicalDisk|0x00001000|gEfiNt32PkgTokenSpaceGuid|VOID*|L"E:RW;245760;512"-> gEfiNt32PkgTokenSpaceGuid.PcdWinNtFlashFvRecoverySize|0x0|UINT32|0x00001011 -3. Update DSC files to confirm to DSC spec - a. Adjust string/array typed PCD item format: e.g. PcdWinNtMemorySizeForSecMain|gEfiNt32PkgTokenSpaceGuid|L"64!64"|12 -> gEfiNt32PkgTokenSpaceGuid.PcdWinNtMemorySizeForSecMain|L"64!64"|VOID*|12 - b. Adjust non-string/array typed PCD item format: e.g. PcdWinNtBootMode|gEfiNt32PkgTokenSpaceGuid|1 -> gEfiNt32PkgTokenSpaceGuid.PcdWinNtBootMode|1 - c. Update the override library class in [Components] section: e.g. - { - PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf - } - To - { - PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf - } + BaseTools\Source\Python\MigrationMsa2Inf Brief usage for Migration Tool Spd2Dec.exe: 1. Command line format: @@ -164,7 +141,7 @@ Brief usage for Migration Tool Spd2Dec.exe: Example a & b are equivalent to migrate Nt32 package SPD file from EDKII to EDKII' snytax. 6. Pyton Source - r777 \BaseTools\Source\Python\spd2Dec + BaseTools\Source\Python\spd2dec Brief usage for Migration Tool Fpd2Dsc.exe: 1. Command line format: @@ -188,6 +165,6 @@ Brief usage for Migration Tool Fpd2Dsc.exe: b. If MSA file which is corresponds to module guid could not be found in currect workspace, tool will dump the module guid. 7. Pyton Source - r767 \BaseTools\Source\Python\Fpd2Dsc + BaseTools\Source\Python\fpd2dsc -10-Sep-2009 +4-Mar-2010 diff --git a/BaseTools/Source/Python/Common/FdfParserLite.py b/BaseTools/Source/Python/Common/FdfParserLite.py index e9b69ff1b9..eb7b0d7514 100644 --- a/BaseTools/Source/Python/Common/FdfParserLite.py +++ b/BaseTools/Source/Python/Common/FdfParserLite.py @@ -1,7 +1,7 @@ ## @file # parse FDF file # -# Copyright (c) 2007, Intel Corporation +# 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 @@ -383,7 +383,22 @@ class FdfParser(object): while Offset <= EndPos[1]: self.Profile.FileLinesList[EndPos[0]][Offset] = Value Offset += 1 - + + + def __GetMacroName(self): + if not self.__GetNextToken(): + raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber) + MacroName = self.__Token + NotFlag = False + if MacroName.startswith('!'): + NotFlag = True + MacroName = MacroName[1:].strip() + + if not MacroName.startswith('$(') or not MacroName.endswith(')'): + raise Warning("Macro name expected(Please use '$(%(Token)s)' if '%(Token)s' is a macro.)" % {"Token" : MacroName}, + self.FileName, self.CurrentLineNumber) + MacroName = MacroName[2:-1] + return MacroName, NotFlag ## PreprocessFile() method # @@ -554,14 +569,7 @@ class FdfParser(object): IfList.append([IfStartPos, None, None]) CondLabel = self.__Token - if not self.__GetNextToken(): - raise Warning("expected Macro name At Line ", self.FileName, self.CurrentLineNumber) - MacroName = self.__Token - NotFlag = False - if MacroName.startswith('!'): - NotFlag = True - MacroName = MacroName[1:] - + MacroName, NotFlag = self.__GetMacroName() NotDefineFlag = False if CondLabel == '!ifndef': NotDefineFlag = True @@ -615,14 +623,7 @@ class FdfParser(object): self.__WipeOffArea.append((IfList[-1][0], ElseStartPos)) IfList[-1] = [ElseStartPos, True, IfList[-1][2]] if self.__Token == '!elseif': - if not self.__GetNextToken(): - raise Warning("expected Macro name At Line ", self.FileName, self.CurrentLineNumber) - MacroName = self.__Token - NotFlag = False - if MacroName.startswith('!'): - NotFlag = True - MacroName = MacroName[1:] - + MacroName, NotFlag = self.__GetMacroName() if not self.__GetNextOp(): raise Warning("expected !endif At Line ", self.FileName, self.CurrentLineNumber) diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py b/BaseTools/Source/Python/GenFds/FdfParser.py index 4ce2761243..92d6ab64ba 100644 --- a/BaseTools/Source/Python/GenFds/FdfParser.py +++ b/BaseTools/Source/Python/GenFds/FdfParser.py @@ -1,7 +1,7 @@ ## @file # parse FDF file # -# Copyright (c) 2007, Intel Corporation +# 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 @@ -415,6 +415,21 @@ class FdfParser: Offset += 1 + def __GetMacroName(self): + if not self.__GetNextToken(): + raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber) + MacroName = self.__Token + NotFlag = False + if MacroName.startswith('!'): + NotFlag = True + MacroName = MacroName[1:].strip() + + if not MacroName.startswith('$(') or not MacroName.endswith(')'): + raise Warning("Macro name expected(Please use '$(%(Token)s)' if '%(Token)s' is a macro.)" % {"Token" : MacroName}, + self.FileName, self.CurrentLineNumber) + MacroName = MacroName[2:-1] + return MacroName, NotFlag + ## PreprocessFile() method # # Preprocess file contents, replace comments with spaces. @@ -545,6 +560,7 @@ class FdfParser: self.Rewind() + ## PreprocessIncludeFile() method # # Preprocess file contents, replace !include statements with file contents. @@ -583,15 +599,8 @@ class FdfParser: IfStartPos = (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - len(self.__Token)) IfList.append([IfStartPos, None, None]) CondLabel = self.__Token - - if not self.__GetNextToken(): - raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber) - MacroName = self.__Token - NotFlag = False - if MacroName.startswith('!'): - NotFlag = True - MacroName = MacroName[1:] - + + MacroName, NotFlag = self.__GetMacroName() NotDefineFlag = False if CondLabel == '!ifndef': NotDefineFlag = True @@ -645,14 +654,7 @@ class FdfParser: self.__WipeOffArea.append((IfList[-1][0], ElseStartPos)) IfList[-1] = [ElseStartPos, True, IfList[-1][2]] if self.__Token == '!elseif': - if not self.__GetNextToken(): - raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber) - MacroName = self.__Token - NotFlag = False - if MacroName.startswith('!'): - NotFlag = True - MacroName = MacroName[1:] - + MacroName, NotFlag = self.__GetMacroName() if not self.__GetNextOp(): raise Warning("expected !endif", self.FileName, self.CurrentLineNumber) diff --git a/BaseTools/Source/Python/GenFds/GenFds.py b/BaseTools/Source/Python/GenFds/GenFds.py index 1285103f5e..d586346168 100644 --- a/BaseTools/Source/Python/GenFds/GenFds.py +++ b/BaseTools/Source/Python/GenFds/GenFds.py @@ -196,10 +196,8 @@ def main(): if (Options.outputDir): OutputDirFromCommandLine = GenFdsGlobalVariable.ReplaceWorkspaceMacro(Options.outputDir) - if not os.path.isabs (Options.outputDir): - Options.outputDir = os.path.join(GenFdsGlobalVariable.WorkSpaceDir, Options.outputDir) - if os.path.normcase (Options.outputDir).find(Workspace) != 0: - EdkLogger.error("GenFds", FILE_NOT_FOUND, "OutputDir doesn't exist in Workspace!") + if not os.path.isabs (OutputDirFromCommandLine): + OutputDirFromCommandLine = os.path.join(GenFdsGlobalVariable.WorkSpaceDir, OutputDirFromCommandLine) for Arch in ArchList: GenFdsGlobalVariable.OutputDirDict[Arch] = OutputDirFromCommandLine else: diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py b/BaseTools/Source/Python/Workspace/MetaFileParser.py index cf165ff507..4c7ea03516 100644 --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py @@ -1,7 +1,7 @@ ## @file # This file is used to parse meta files # -# Copyright (c) 2008, Intel Corporation +# Copyright (c) 2008 - 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 @@ -40,6 +40,28 @@ class MetaFileParser(object): # data type (file content) for specific file type DataType = {} + # Parser objects used to implement singleton + MetaFiles = {} + + ## Factory method + # + # One file, one parser object. This factory method makes sure that there's + # only one object constructed for one meta file. + # + # @param Class class object of real AutoGen class + # (InfParser, DecParser or DscParser) + # @param FilePath The path of meta file + # @param *args The specific class related parameters + # @param **kwargs The specific class related dict parameters + # + def __new__(Class, FilePath, *args, **kwargs): + if FilePath in Class.MetaFiles: + return Class.MetaFiles[FilePath] + else: + ParserObject = super(MetaFileParser, Class).__new__(Class) + Class.MetaFiles[FilePath] = ParserObject + return ParserObject + ## Constructor of MetaFileParser # # Initialize object of MetaFileParser @@ -52,6 +74,9 @@ class MetaFileParser(object): # @param From ID from which the data comes (for !INCLUDE directive) # def __init__(self, FilePath, FileType, Table, Macros=None, Owner=-1, From=-1): + # prevent re-initialization + if hasattr(self, "_Table"): + return self._Table = Table self._FileType = FileType self.MetaFile = FilePath @@ -596,7 +621,9 @@ class DscParser(MetaFileParser): continue self._CurrentLine = Line self._LineIndex = Index - + if self._InSubsection and self._Owner == -1: + self._Owner = self._LastItem + # section header if Line[0] == TAB_SECTION_START and Line[-1] == TAB_SECTION_END: self._SectionHeaderParser() @@ -644,8 +671,6 @@ class DscParser(MetaFileParser): if self._InSubsection: SectionType = self._SubsectionType SectionName = self._SubsectionName - if self._Owner == -1: - self._Owner = self._LastItem else: SectionType = self._SectionType SectionName = self._SectionName @@ -774,13 +799,24 @@ class DscParser(MetaFileParser): else: self._Enabled = len(self._Eval) - ## Evaludate the value of expression in "if/ifdef/ifndef" directives + ## Evaluate the Token for its value; for now only macros are supported. + def _EvaluateToken(self, TokenName, Expression): + if TokenName.startswith("$(") and TokenName.endswith(")"): + Name = TokenName[2:-1] + return self._Macros.get(Name) + else: + EdkLogger.error('Parser', FORMAT_INVALID, "Unknown operand '%(Token)s', " + "please use '$(%(Token)s)' if '%(Token)s' is a macro" % {"Token" : TokenName}, + File=self.MetaFile, Line=self._LineIndex+1, ExtraData=Expression) + + ## Evaluate the value of expression in "if/ifdef/ifndef" directives def _Evaluate(self, Expression): TokenList = Expression.split() TokenNumber = len(TokenList) # one operand, guess it's just a macro name if TokenNumber == 1: - return TokenList[0] in self._Macros + TokenValue = self._EvaluateToken(TokenList[0], Expression) + return TokenValue != None # two operands, suppose it's "!xxx" format elif TokenNumber == 2: Op = TokenList[0] @@ -794,8 +830,8 @@ class DscParser(MetaFileParser): return self._OP_[Op](Value) # three operands elif TokenNumber == 3: - Name = TokenList[0] - if Name not in self._Macros: + TokenValue = self._EvaluateToken(TokenList[0], Expression) + if TokenValue == None: return False Value = TokenList[2] if Value[0] in ["'", '"'] and Value[-1] in ["'", '"']: @@ -804,7 +840,7 @@ class DscParser(MetaFileParser): if Op not in self._OP_: EdkLogger.error('Parser', FORMAT_INVALID, "Unsupported operator [%s]" % Op, File=self.MetaFile, Line=self._LineIndex+1, ExtraData=Expression) - return self._OP_[Op](self._Macros[Name], Value) + return self._OP_[Op](TokenValue, Value) else: EdkLogger.error('Parser', FORMAT_INVALID, File=self.MetaFile, Line=self._LineIndex+1, ExtraData=Expression) diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py index 23e819e5ca..eac21d1495 100644 --- a/BaseTools/Source/Python/build/BuildReport.py +++ b/BaseTools/Source/Python/build/BuildReport.py @@ -667,31 +667,31 @@ class PcdReport(object): if DecDefaultValue == None: DecMatch = True else: - DecMatch = (DecDefaultValue == PcdValue) + DecMatch = (DecDefaultValue.strip() == PcdValue.strip()) if InfDefaultValue == None: InfMatch = True else: - InfMatch = (InfDefaultValue == PcdValue) + InfMatch = (InfDefaultValue.strip() == PcdValue.strip()) if DscDefaultValue == None: DscMatch = True else: - DscMatch = (DscDefaultValue == PcdValue) + DscMatch = (DscDefaultValue.strip() == PcdValue.strip()) # # Report PCD item according to their override relationship # if DecMatch and InfMatch: - FileWrite(File, ' %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue)) + FileWrite(File, ' %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue.strip())) else: if DscMatch: if (Pcd.TokenCName, Key) in self.FdfPcdSet: - FileWrite(File, ' *F %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue)) + FileWrite(File, ' *F %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue.strip())) else: - FileWrite(File, ' *P %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue)) + FileWrite(File, ' *P %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue.strip())) else: - FileWrite(File, ' *M %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue)) + FileWrite(File, ' *M %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue.strip())) if TypeName in ('DYNHII', 'DEXHII', 'DYNVPD', 'DEXVPD'): for SkuInfo in Pcd.SkuInfoList.values(): @@ -701,13 +701,13 @@ class PcdReport(object): FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset)) if not DscMatch and DscDefaultValue != None: - FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', DscDefaultValue)) + FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', DscDefaultValue.strip())) if not InfMatch and InfDefaultValue != None: - FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', InfDefaultValue)) + FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', InfDefaultValue.strip())) if not DecMatch and DecDefaultValue != None: - FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', DecDefaultValue)) + FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', DecDefaultValue.strip())) if ModulePcdSet == None: ModuleOverride = self.ModulePcdOverride.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName), {}) @@ -717,10 +717,10 @@ class PcdReport(object): ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0) Match = (ModulePcdDefaultValueNumber == PcdValueNumber) else: - Match = (ModuleDefault == PcdValue) + Match = (ModuleDefault.strip() == PcdValue.strip()) if Match: continue - FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault)) + FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault.strip())) if ModulePcdSet == None: FileWrite(File, gSectionEnd) @@ -1283,8 +1283,9 @@ class PlatformReport(object): # # @param self The object pointer # @param Wa Workspace context information + # @param MaList The list of modules in the platform build # - def __init__(self, Wa, ReportType): + def __init__(self, Wa, MaList, ReportType): self._WorkspaceDir = Wa.WorkspaceDir self.PlatformName = Wa.Name self.PlatformDscPath = Wa.Platform @@ -1299,7 +1300,7 @@ class PlatformReport(object): self.PcdReport = PcdReport(Wa) self.FdReportList = [] - if "FLASH" in ReportType and Wa.FdfProfile: + if "FLASH" in ReportType and Wa.FdfProfile and MaList == None: for Fd in Wa.FdfProfile.FdDict: self.FdReportList.append(FdReport(Wa.FdfProfile.FdDict[Fd], Wa)) @@ -1308,9 +1309,13 @@ class PlatformReport(object): self.PredictionReport = PredictionReport(Wa) self.ModuleReportList = [] - for Pa in Wa.AutoGenObjectList: - for ModuleKey in Pa.Platform.Modules: - self.ModuleReportList.append(ModuleReport(Pa.Platform.Modules[ModuleKey].M, ReportType)) + if MaList != None: + for Ma in MaList: + self.ModuleReportList.append(ModuleReport(Ma, ReportType)) + else: + for Pa in Wa.AutoGenObjectList: + for ModuleKey in Pa.Platform.Modules: + self.ModuleReportList.append(ModuleReport(Pa.Platform.Modules[ModuleKey].M, ReportType)) @@ -1386,10 +1391,11 @@ class BuildReport(object): # # @param self The object pointer # @param Wa Workspace context information + # @param MaList The list of modules in the platform build # - def AddPlatformReport(self, Wa): + def AddPlatformReport(self, Wa, MaList=None): if self.ReportFile: - self.ReportList.append(Wa) + self.ReportList.append((Wa, MaList)) ## # Generates the final report. @@ -1407,8 +1413,8 @@ class BuildReport(object): except IOError: EdkLogger.error(None, FILE_OPEN_FAILURE, ExtraData=self.ReportFile) try: - for Wa in self.ReportList: - PlatformReport(Wa, self.ReportType).GenerateReport(File, BuildDuration, self.ReportType) + for (Wa, MaList) in self.ReportList: + PlatformReport(Wa, MaList, self.ReportType).GenerateReport(File, BuildDuration, self.ReportType) EdkLogger.quiet("Report successfully saved to %s" % os.path.abspath(self.ReportFile)) except IOError: EdkLogger.error(None, FILE_WRITE_FAILURE, ExtraData=self.ReportFile) diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py index 9705097606..e3a3dd9f3f 100644 --- a/BaseTools/Source/Python/build/build.py +++ b/BaseTools/Source/Python/build/build.py @@ -738,6 +738,16 @@ class Build(): # parse target.txt, tools_def.txt, and platform file #self.RestoreBuildData() self.LoadConfiguration() + + # + # @attention Treat $(TARGET) in meta data files as special macro when it has only one build target. + # This is not a complete support for $(TARGET) macro as it can only support one build target in ONE + # invocation of build command. However, it should cover the frequent usage model that $(TARGET) macro + # is used in DSC files to specify different libraries & PCD setting for debug/release build. + # + if len(self.BuildTargetList) == 1: + self.Db._GlobalMacros.setdefault("TARGET", self.BuildTargetList[0]) + self.InitBuild() # print current build environment and configuration @@ -1336,7 +1346,6 @@ class Build(): self.FvList, self.SkuId ) - self.BuildReport.AddPlatformReport(Wa) Wa.CreateMakeFile(False) self.Progress.Stop("done!") MaList = [] @@ -1345,6 +1354,8 @@ class Build(): if Ma == None: continue MaList.append(Ma) self._Build(self.Target, Ma) + + self.BuildReport.AddPlatformReport(Wa, MaList) if MaList == []: EdkLogger.error( 'build', diff --git a/BaseTools/gcc/mingw-gcc-build.py b/BaseTools/gcc/mingw-gcc-build.py index f01bedc7bc..4133feb256 100755 --- a/BaseTools/gcc/mingw-gcc-build.py +++ b/BaseTools/gcc/mingw-gcc-build.py @@ -225,10 +225,10 @@ class SourceFiles: 'mingw_hdr': { 'url': 'http://sourceforge.net/projects/' + \ 'mingw-w64/files/mingw-w64/mingw-w64-snapshot/' + \ - 'mingw-w64-trunk-snapshot-$version.tar.bz2/download', - 'extract-dir': os.path.join('trunk', 'mingw-w64-headers'), - 'version': '20091222', - 'md5': 'fbcf282d1a05df121088d775e02095d6', + 'mingw-w64-v1.0-snapshot-$version.tar.bz2/download', + 'extract-dir': os.path.join('mingw-w64-v1.0-$version', 'mingw-w64-headers'), + 'version': '20100223', + 'md5': '700b9f54e740b1b962c8a3a0f52b7c04', }, }