Sync EDKII BaseTools to BaseTools project r1911.
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 4 Mar 2010 05:29:52 +0000 (05:29 +0000)
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 4 Mar 2010 05:29:52 +0000 (05:29 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk@10177 6f19259b-4bc3-4df7-8a09-765794883524

28 files changed:
edk2/BaseTools/Bin/Win32/BootSectImage.exe
edk2/BaseTools/Bin/Win32/EfiLdrImage.exe
edk2/BaseTools/Bin/Win32/EfiRom.exe
edk2/BaseTools/Bin/Win32/GenBootSector.exe
edk2/BaseTools/Bin/Win32/GenCrc32.exe
edk2/BaseTools/Bin/Win32/GenFds.exe
edk2/BaseTools/Bin/Win32/GenFfs.exe
edk2/BaseTools/Bin/Win32/GenFv.exe
edk2/BaseTools/Bin/Win32/GenFw.exe
edk2/BaseTools/Bin/Win32/GenPage.exe
edk2/BaseTools/Bin/Win32/GenSec.exe
edk2/BaseTools/Bin/Win32/GenVtf.exe
edk2/BaseTools/Bin/Win32/LzmaCompress.exe
edk2/BaseTools/Bin/Win32/Split.exe
edk2/BaseTools/Bin/Win32/TianoCompress.exe
edk2/BaseTools/Bin/Win32/VfrCompile.exe
edk2/BaseTools/Bin/Win32/VolInfo.exe
edk2/BaseTools/Bin/Win32/build.exe
edk2/BaseTools/Conf/build_rule.template
edk2/BaseTools/Conf/tools_def.template
edk2/BaseTools/ReadMe.txt
edk2/BaseTools/Source/Python/Common/FdfParserLite.py
edk2/BaseTools/Source/Python/GenFds/FdfParser.py
edk2/BaseTools/Source/Python/GenFds/GenFds.py
edk2/BaseTools/Source/Python/Workspace/MetaFileParser.py
edk2/BaseTools/Source/Python/build/BuildReport.py
edk2/BaseTools/Source/Python/build/build.py
edk2/BaseTools/gcc/mingw-gcc-build.py

index 06cdd4e..cb7cf6a 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/BootSectImage.exe and b/edk2/BaseTools/Bin/Win32/BootSectImage.exe differ
index 6c80b40..558b09a 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/EfiLdrImage.exe and b/edk2/BaseTools/Bin/Win32/EfiLdrImage.exe differ
index a36b64a..5967c54 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/EfiRom.exe and b/edk2/BaseTools/Bin/Win32/EfiRom.exe differ
index 7d3b398..3542bac 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/GenBootSector.exe and b/edk2/BaseTools/Bin/Win32/GenBootSector.exe differ
index a77006e..8c8d018 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/GenCrc32.exe and b/edk2/BaseTools/Bin/Win32/GenCrc32.exe differ
index d9b5169..6dcfc84 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/GenFds.exe and b/edk2/BaseTools/Bin/Win32/GenFds.exe differ
index 32c8139..272ae26 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/GenFfs.exe and b/edk2/BaseTools/Bin/Win32/GenFfs.exe differ
index df202d3..1eefa3a 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/GenFv.exe and b/edk2/BaseTools/Bin/Win32/GenFv.exe differ
index 7a816a2..8773b71 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/GenFw.exe and b/edk2/BaseTools/Bin/Win32/GenFw.exe differ
index 0dd72b8..8a3005c 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/GenPage.exe and b/edk2/BaseTools/Bin/Win32/GenPage.exe differ
index 62b04ee..b3a7bc2 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/GenSec.exe and b/edk2/BaseTools/Bin/Win32/GenSec.exe differ
index ee60e62..d0ba8e1 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/GenVtf.exe and b/edk2/BaseTools/Bin/Win32/GenVtf.exe differ
index 5397a5c..f34c530 100644 (file)
Binary files a/edk2/BaseTools/Bin/Win32/LzmaCompress.exe and b/edk2/BaseTools/Bin/Win32/LzmaCompress.exe differ
index ce172e9..0dc4b74 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/Split.exe and b/edk2/BaseTools/Bin/Win32/Split.exe differ
index 58afbab..2789735 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/TianoCompress.exe and b/edk2/BaseTools/Bin/Win32/TianoCompress.exe differ
index dfbff8c..1431841 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/VfrCompile.exe and b/edk2/BaseTools/Bin/Win32/VfrCompile.exe differ
index 915ec65..1ce534e 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/VolInfo.exe and b/edk2/BaseTools/Bin/Win32/VolInfo.exe differ
index 5bf7135..0803c85 100755 (executable)
Binary files a/edk2/BaseTools/Bin/Win32/build.exe and b/edk2/BaseTools/Bin/Win32/build.exe differ
index 0f2921c..8a7663d 100644 (file)
         "$(MTOC)" -subsystem $(MODULE_TYPE)  $(MTOC_FLAGS)  ${src}  $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff\r
         # create symbol file for GDB debug\r
         -$(DSYMUTIL) ${src}\r
-        GenFw -e $(MODULE_TYPE) -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff \r
+        GenFw --xip -e $(MODULE_TYPE) -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff \r
         $(CP) ${dst} $(OUTPUT_DIR)\r
         $(CP) ${dst} $(BIN_DIR)\r
         -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR)\r
index e797f15..2dbc776 100644 (file)
@@ -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\r
 \r
 DEFINE IPHONE_TOOLS            = /Developer/Platforms/iPhoneOS.platform/Developer\r
-DEFINE RVCT31_TOOLS_PATH       = c:/Program Files/ARM/RVCT/Programs/3.1/569/win_32-pentium\r
-DEFINE RVCT31CYGWIN_TOOLS_PATH = /cygdrive/c/Program Files/ARM/RVCT/Programs/3.1/569/win_32-pentium\r
+DEFINE RVCT31_TOOLS_PATH       = c:/Program Files/ARM/RVCT/Programs/3.1/761/win_32-pentium\r
+DEFINE RVCT31CYGWIN_TOOLS_PATH = /cygdrive/c/Program Files/ARM/RVCT/Programs/3.1/761/win_32-pentium\r
 \r
 # Update to the location of the gcc executables\r
 DEFINE ARMGCC_BIN              = /\r
@@ -1745,6 +1745,7 @@ DEFINE GCC44_ASM_FLAGS               = DEF(GCC_ASM_FLAGS)
 *_CYGGCC_IA32_ASLPP_PATH         = DEF(CYGWIN_BINIA32)gcc\r
 *_CYGGCC_IA32_ASLDLINK_PATH      = DEF(CYGWIN_BINIA32)ld\r
 *_CYGGCC_IA32_RC_PATH            = DEF(CYGWIN_BINIA32)objcopy\r
+*_CYGGCC_IA32_OBJECT_PATH        = DEF(CYGWIN_BINIA32)objcopy\r
 \r
 *_CYGGCC_IA32_CC_FLAGS           = DEF(GCC_IA32_CC_FLAGS)\r
 *_CYGGCC_IA32_RC_FLAGS           = DEF(GCC_IA32_RC_FLAGS)\r
@@ -1763,6 +1764,7 @@ DEFINE GCC44_ASM_FLAGS               = DEF(GCC_ASM_FLAGS)
 *_CYGGCC_X64_ASLPP_PATH          = DEF(CYGWIN_BINX64)gcc\r
 *_CYGGCC_X64_ASLDLINK_PATH       = DEF(CYGWIN_BINX64)ld\r
 *_CYGGCC_X64_RC_PATH             = DEF(CYGWIN_BINX64)objcopy\r
+*_CYGGCC_X64_OBJECT_PATH         = DEF(CYGWIN_BINX64)objcopy\r
 \r
 *_CYGGCC_X64_CC_FLAGS            = DEF(GCC_X64_CC_FLAGS)\r
 *_CYGGCC_X64_RC_FLAGS            = DEF(GCC_X64_RC_FLAGS)\r
@@ -1782,6 +1784,7 @@ DEFINE GCC44_ASM_FLAGS               = DEF(GCC_ASM_FLAGS)
 *_CYGGCC_IPF_OBJCOPY_PATH        = DEF(CYGWIN_BINIPF)objcopy\r
 *_CYGGCC_IPF_SYMRENAME_PATH      = DEF(CYGWIN_BINIPF)objcopy\r
 *_CYGGCC_IPF_RC_PATH             = DEF(CYGWIN_BINIPF)objcopy\r
+*_CYGGCC_IPF_OBJECT_PATH         = DEF(CYGWIN_BINIPF)objcopy\r
 \r
 *_CYGGCC_IPF_CC_FLAGS             = DEF(GCC_IPF_CC_FLAGS)\r
 *_CYGGCC_IPF_DLINK_FLAGS          = DEF(GCC_IPF_DLINK_FLAGS)\r
@@ -2757,8 +2760,8 @@ RELEASE_XCODE32_ARM_CC_FLAGS   = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -mthumb-inter
 #\r
 # Use default values, or override in DSC file\r
 #\r
-*_RVCT31_ARM_ARCHCC_FLAGS    = --thumb --cpu 7-A\r
-*_RVCT31_ARM_ARCHASM_FLAGS   = --cpu 7-A\r
+*_RVCT31_ARM_ARCHCC_FLAGS    = --thumb --cpu ARM1176JZF-S\r
+*_RVCT31_ARM_ARCHASM_FLAGS   = --cpu ARM1176JZF-S\r
 *_RVCT31_ARM_ARCHDLINK_FLAGS = \r
 *_RVCT31_ARM_PLATFORM_FLAGS  =\r
 \r
@@ -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\r
 *_RVCT31_ARM_MAKE_PATH       = nmake\r
 *_RVCT31_ARM_SLINK_FLAGS     = --partial -o\r
-  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\r
-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\r
+  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\r
+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\r
 \r
 ##################\r
 # ARM definitions\r
@@ -2807,8 +2810,8 @@ RELEASE_RVCT31_ARM_CC_FLAGS  = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90    -Ospac
 #\r
 # Use default values, or override in DSC file\r
 #\r
-*_RVCT31CYGWIN_ARM_ARCHCC_FLAGS    = --thumb --cpu 7-A\r
-*_RVCT31CYGWIN_ARM_ARCHASM_FLAGS   = --cpu 7-A\r
+*_RVCT31CYGWIN_ARM_ARCHCC_FLAGS    = --thumb --cpu ARM1176JZF-S\r
+*_RVCT31CYGWIN_ARM_ARCHASM_FLAGS   = --cpu ARM1176JZF-S\r
 *_RVCT31CYGWIN_ARM_ARCHDLINK_FLAGS = \r
 *_RVCT31CYGWIN_ARM_PLATFORM_FLAGS  =\r
 \r
@@ -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`\r
 *_RVCT31CYGWIN_ARM_MAKE_PATH       = make\r
 *_RVCT31CYGWIN_ARM_SLINK_FLAGS     = "$(SLINKPATH_FLAG)" --partial -o\r
-  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\r
-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\r
+  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\r
+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\r
 \r
 ##################\r
 # ARM definitions\r
index 82b3d58..37691e9 100644 (file)
@@ -66,7 +66,7 @@ Notes:
         or modules because the AutoGen.* files have been be removed. The "makefile" itself\r
         cannot generate AutoGen.* files. Only "build" command can.\r
 3) All .exe binary file including C and python tools are generated from:\r
-    r1707 <buildtools_project>\BaseTools\Source\ + r1707 VfrCompiler tool update\r
+    r1911 <buildtools_project>\BaseTools\Source\.\r
 \r
 Brief usage for Migration Tool MigrationMsa2Inf.exe:\r
 1. Command line format:\r
@@ -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)\r
  \r
 7. Pyton Source\r
-   r682 <buildtools_project>\BaseTools\Source\Python\MigrationMsa2Inf\r
-\r
-\r
-Brief Usage for PcdSyntax Update:\r
-Usage:\r
-  PcdSyntaxUpdate.exe <directory_name>\r
-It searches all INF, DEC and DSC file under <directory_name> and update them with the following rules:\r
-1. Update INF files to conform to INF spec 0.44: \r
-   a. Rename PCD section name: e.g. [PcdsFeatureFlag] -> [FeaturePcd]\r
-   b. Adjust PCD section item format: e.g. PcdDebugClearMemoryValue|gEfiMdePkgTokenSpaceGuid -> gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue\r
-   c. Update the syntax of binary INF file (not PCD related) \r
-2. Update DEC files to confirm to DEC spec 0.36\r
-   Adjust PCD section item format: e.g. PcdWinNtPhysicalDisk|0x00001000|gEfiNt32PkgTokenSpaceGuid|VOID*|L"E:RW;245760;512"-> gEfiNt32PkgTokenSpaceGuid.PcdWinNtFlashFvRecoverySize|0x0|UINT32|0x00001011\r
-3. Update DSC files to confirm to DSC spec \r
-   a. Adjust string/array typed PCD item format: e.g. PcdWinNtMemorySizeForSecMain|gEfiNt32PkgTokenSpaceGuid|L"64!64"|12 -> gEfiNt32PkgTokenSpaceGuid.PcdWinNtMemorySizeForSecMain|L"64!64"|VOID*|12\r
-   b. Adjust non-string/array typed PCD item format: e.g. PcdWinNtBootMode|gEfiNt32PkgTokenSpaceGuid|1 -> gEfiNt32PkgTokenSpaceGuid.PcdWinNtBootMode|1\r
-   c. Update the override library class in [Components] section: e.g.\r
-   <LibraryClass> {\r
-      PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf\r
-   }\r
-   To \r
-   <LibraryClasses> {\r
-      PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf\r
-   }\r
+   BaseTools\Source\Python\MigrationMsa2Inf\r
 \r
 Brief usage for Migration Tool Spd2Dec.exe:\r
 1. Command line format:\r
@@ -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.\r
   \r
 6. Pyton Source\r
-   r777 <buildtools_project>\BaseTools\Source\Python\spd2Dec\r
+   BaseTools\Source\Python\spd2dec\r
 \r
 Brief usage for Migration Tool Fpd2Dsc.exe:\r
 1. Command line format:\r
@@ -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.\r
  \r
 7. Pyton Source\r
-   r767 <buildtools_project>\BaseTools\Source\Python\Fpd2Dsc\r
+   BaseTools\Source\Python\fpd2dsc\r
 \r
-10-Sep-2009\r
+4-Mar-2010\r
index e9b69ff..eb7b0d7 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # parse FDF file\r
 #\r
-#  Copyright (c) 2007, Intel Corporation\r
+#  Copyright (c) 2007 - 2010, Intel Corporation\r
 #\r
 #  All rights reserved. This program and the accompanying materials\r
 #  are licensed and made available under the terms and conditions of the BSD License\r
@@ -383,7 +383,22 @@ class FdfParser(object):
         while Offset <= EndPos[1]:\r
             self.Profile.FileLinesList[EndPos[0]][Offset] = Value\r
             Offset += 1\r
-            \r
+\r
+\r
+    def __GetMacroName(self):\r
+        if not self.__GetNextToken():\r
+            raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber)\r
+        MacroName = self.__Token\r
+        NotFlag = False\r
+        if MacroName.startswith('!'):\r
+            NotFlag = True\r
+            MacroName = MacroName[1:].strip()\r
+         \r
+        if not MacroName.startswith('$(') or not MacroName.endswith(')'):\r
+            raise Warning("Macro name expected(Please use '$(%(Token)s)' if '%(Token)s' is a macro.)" % {"Token" : MacroName},\r
+                          self.FileName, self.CurrentLineNumber)\r
+        MacroName = MacroName[2:-1]\r
+        return MacroName, NotFlag\r
     \r
     ## PreprocessFile() method\r
     #\r
@@ -554,14 +569,7 @@ class FdfParser(object):
                 IfList.append([IfStartPos, None, None])\r
                 CondLabel = self.__Token\r
                 \r
-                if not self.__GetNextToken():\r
-                    raise Warning("expected Macro name At Line ", self.FileName, self.CurrentLineNumber)\r
-                MacroName = self.__Token\r
-                NotFlag = False\r
-                if MacroName.startswith('!'):\r
-                    NotFlag = True\r
-                    MacroName = MacroName[1:]\r
-\r
+                MacroName, NotFlag = self.__GetMacroName() \r
                 NotDefineFlag = False\r
                 if CondLabel == '!ifndef':\r
                     NotDefineFlag = True\r
@@ -615,14 +623,7 @@ class FdfParser(object):
                     self.__WipeOffArea.append((IfList[-1][0], ElseStartPos))\r
                     IfList[-1] = [ElseStartPos, True, IfList[-1][2]]\r
                     if self.__Token == '!elseif':\r
-                        if not self.__GetNextToken():\r
-                            raise Warning("expected Macro name At Line ", self.FileName, self.CurrentLineNumber)\r
-                        MacroName = self.__Token\r
-                        NotFlag = False\r
-                        if MacroName.startswith('!'):\r
-                            NotFlag = True\r
-                            MacroName = MacroName[1:]\r
-\r
+                        MacroName, NotFlag = self.__GetMacroName() \r
                         if not self.__GetNextOp():\r
                             raise Warning("expected !endif At Line ", self.FileName, self.CurrentLineNumber)\r
                     \r
index 4ce2761..92d6ab6 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # parse FDF file\r
 #\r
-#  Copyright (c) 2007, Intel Corporation\r
+#  Copyright (c) 2007 - 2010, Intel Corporation\r
 #\r
 #  All rights reserved. This program and the accompanying materials\r
 #  are licensed and made available under the terms and conditions of the BSD License\r
@@ -415,6 +415,21 @@ class FdfParser:
             Offset += 1\r
 \r
 \r
+    def __GetMacroName(self):\r
+        if not self.__GetNextToken():\r
+            raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber)\r
+        MacroName = self.__Token\r
+        NotFlag = False\r
+        if MacroName.startswith('!'):\r
+            NotFlag = True\r
+            MacroName = MacroName[1:].strip()\r
+         \r
+        if not MacroName.startswith('$(') or not MacroName.endswith(')'):\r
+            raise Warning("Macro name expected(Please use '$(%(Token)s)' if '%(Token)s' is a macro.)" % {"Token" : MacroName},\r
+                          self.FileName, self.CurrentLineNumber)\r
+        MacroName = MacroName[2:-1]\r
+        return MacroName, NotFlag\r
+    \r
     ## PreprocessFile() method\r
     #\r
     #   Preprocess file contents, replace comments with spaces.\r
@@ -545,6 +560,7 @@ class FdfParser:
 \r
         self.Rewind()\r
 \r
+    \r
     ## PreprocessIncludeFile() method\r
     #\r
     #   Preprocess file contents, replace !include statements with file contents.\r
@@ -583,15 +599,8 @@ class FdfParser:
                 IfStartPos = (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - len(self.__Token))\r
                 IfList.append([IfStartPos, None, None])\r
                 CondLabel = self.__Token\r
-\r
-                if not self.__GetNextToken():\r
-                    raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber)\r
-                MacroName = self.__Token\r
-                NotFlag = False\r
-                if MacroName.startswith('!'):\r
-                    NotFlag = True\r
-                    MacroName = MacroName[1:]\r
-\r
+                \r
+                MacroName, NotFlag = self.__GetMacroName() \r
                 NotDefineFlag = False\r
                 if CondLabel == '!ifndef':\r
                     NotDefineFlag = True\r
@@ -645,14 +654,7 @@ class FdfParser:
                     self.__WipeOffArea.append((IfList[-1][0], ElseStartPos))\r
                     IfList[-1] = [ElseStartPos, True, IfList[-1][2]]\r
                     if self.__Token == '!elseif':\r
-                        if not self.__GetNextToken():\r
-                            raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber)\r
-                        MacroName = self.__Token\r
-                        NotFlag = False\r
-                        if MacroName.startswith('!'):\r
-                            NotFlag = True\r
-                            MacroName = MacroName[1:]\r
-\r
+                        MacroName, NotFlag = self.__GetMacroName() \r
                         if not self.__GetNextOp():\r
                             raise Warning("expected !endif", self.FileName, self.CurrentLineNumber)\r
 \r
index 1285103..d586346 100644 (file)
@@ -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:
index cf165ff..4c7ea03 100644 (file)
@@ -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)
index 23e819e..eac21d1 100644 (file)
@@ -667,31 +667,31 @@ class PcdReport(object):
                         if DecDefaultValue == None:\r
                             DecMatch = True\r
                         else:\r
-                            DecMatch = (DecDefaultValue == PcdValue)\r
+                            DecMatch = (DecDefaultValue.strip() == PcdValue.strip())\r
 \r
                         if InfDefaultValue == None:\r
                             InfMatch = True\r
                         else:\r
-                            InfMatch = (InfDefaultValue == PcdValue)\r
+                            InfMatch = (InfDefaultValue.strip() == PcdValue.strip())\r
 \r
                         if DscDefaultValue == None:\r
                             DscMatch = True\r
                         else:\r
-                            DscMatch = (DscDefaultValue == PcdValue)\r
+                            DscMatch = (DscDefaultValue.strip() == PcdValue.strip())\r
 \r
                     #\r
                     # Report PCD item according to their override relationship\r
                     #\r
                     if DecMatch and InfMatch:\r
-                        FileWrite(File, '    %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue))\r
+                        FileWrite(File, '    %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue.strip()))\r
                     else:\r
                         if DscMatch:\r
                             if (Pcd.TokenCName, Key) in self.FdfPcdSet:\r
-                                FileWrite(File, ' *F %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue))\r
+                                FileWrite(File, ' *F %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue.strip()))\r
                             else:\r
-                                FileWrite(File, ' *P %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue))\r
+                                FileWrite(File, ' *P %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue.strip()))\r
                         else:\r
-                            FileWrite(File, ' *M %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue))\r
+                            FileWrite(File, ' *M %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue.strip()))\r
                     \r
                     if TypeName in ('DYNHII', 'DEXHII', 'DYNVPD', 'DEXVPD'):\r
                         for SkuInfo in Pcd.SkuInfoList.values():\r
@@ -701,13 +701,13 @@ class PcdReport(object):
                                 FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))\r
                                \r
                     if not DscMatch and DscDefaultValue != None:\r
-                        FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', DscDefaultValue))\r
+                        FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', DscDefaultValue.strip()))\r
 \r
                     if not InfMatch and InfDefaultValue != None:\r
-                        FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', InfDefaultValue))\r
+                        FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', InfDefaultValue.strip()))\r
 \r
                     if not DecMatch and DecDefaultValue != None:\r
-                        FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', DecDefaultValue))\r
+                        FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', DecDefaultValue.strip()))\r
 \r
                     if ModulePcdSet == None:\r
                         ModuleOverride = self.ModulePcdOverride.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName), {})\r
@@ -717,10 +717,10 @@ class PcdReport(object):
                                 ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0)\r
                                 Match = (ModulePcdDefaultValueNumber == PcdValueNumber)\r
                             else:\r
-                                Match = (ModuleDefault == PcdValue)\r
+                                Match = (ModuleDefault.strip() == PcdValue.strip())\r
                             if Match:\r
                                 continue\r
-                            FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault))\r
+                            FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault.strip()))\r
 \r
         if ModulePcdSet == None:\r
             FileWrite(File, gSectionEnd)\r
@@ -1283,8 +1283,9 @@ class PlatformReport(object):
     #\r
     # @param self            The object pointer\r
     # @param Wa              Workspace context information\r
+    # @param MaList          The list of modules in the platform build\r
     #\r
-    def __init__(self, Wa, ReportType):\r
+    def __init__(self, Wa, MaList, ReportType):\r
         self._WorkspaceDir = Wa.WorkspaceDir\r
         self.PlatformName = Wa.Name\r
         self.PlatformDscPath = Wa.Platform\r
@@ -1299,7 +1300,7 @@ class PlatformReport(object):
             self.PcdReport = PcdReport(Wa)\r
 \r
         self.FdReportList = []\r
-        if "FLASH" in ReportType and Wa.FdfProfile:\r
+        if "FLASH" in ReportType and Wa.FdfProfile and MaList == None:\r
             for Fd in Wa.FdfProfile.FdDict:\r
                 self.FdReportList.append(FdReport(Wa.FdfProfile.FdDict[Fd], Wa))\r
 \r
@@ -1308,9 +1309,13 @@ class PlatformReport(object):
             self.PredictionReport = PredictionReport(Wa)\r
 \r
         self.ModuleReportList = []\r
-        for Pa in Wa.AutoGenObjectList:\r
-            for ModuleKey in Pa.Platform.Modules:\r
-                self.ModuleReportList.append(ModuleReport(Pa.Platform.Modules[ModuleKey].M, ReportType))\r
+        if MaList != None:\r
+            for Ma in MaList:\r
+                self.ModuleReportList.append(ModuleReport(Ma, ReportType))\r
+        else:\r
+            for Pa in Wa.AutoGenObjectList:\r
+                for ModuleKey in Pa.Platform.Modules:\r
+                    self.ModuleReportList.append(ModuleReport(Pa.Platform.Modules[ModuleKey].M, ReportType))\r
 \r
 \r
 \r
@@ -1386,10 +1391,11 @@ class BuildReport(object):
     #\r
     # @param self            The object pointer\r
     # @param Wa              Workspace context information\r
+    # @param MaList          The list of modules in the platform build\r
     #\r
-    def AddPlatformReport(self, Wa):\r
+    def AddPlatformReport(self, Wa, MaList=None):\r
         if self.ReportFile:\r
-            self.ReportList.append(Wa)\r
+            self.ReportList.append((Wa, MaList))\r
 \r
     ##\r
     # Generates the final report.\r
@@ -1407,8 +1413,8 @@ class BuildReport(object):
             except IOError:\r
                 EdkLogger.error(None, FILE_OPEN_FAILURE, ExtraData=self.ReportFile)\r
             try:\r
-                for Wa in self.ReportList:\r
-                    PlatformReport(Wa, self.ReportType).GenerateReport(File, BuildDuration, self.ReportType)\r
+                for (Wa, MaList) in self.ReportList:\r
+                    PlatformReport(Wa, MaList, self.ReportType).GenerateReport(File, BuildDuration, self.ReportType)\r
                 EdkLogger.quiet("Report successfully saved to %s" % os.path.abspath(self.ReportFile))\r
             except IOError:\r
                 EdkLogger.error(None, FILE_WRITE_FAILURE, ExtraData=self.ReportFile)\r
index 9705097..e3a3dd9 100644 (file)
@@ -738,6 +738,16 @@ class Build():
         # parse target.txt, tools_def.txt, and platform file\r
         #self.RestoreBuildData()\r
         self.LoadConfiguration()\r
+        \r
+        #\r
+        # @attention Treat $(TARGET) in meta data files as special macro when it has only one build target.\r
+        # This is not a complete support for $(TARGET) macro as it can only support one build target in ONE\r
+        # invocation of build command. However, it should cover the frequent usage model that $(TARGET) macro\r
+        # is used in DSC files to specify different libraries & PCD setting for debug/release build.\r
+        #\r
+        if len(self.BuildTargetList) == 1:\r
+            self.Db._GlobalMacros.setdefault("TARGET", self.BuildTargetList[0])\r
+        \r
         self.InitBuild()\r
 \r
         # print current build environment and configuration\r
@@ -1336,7 +1346,6 @@ class Build():
                         self.FvList,\r
                         self.SkuId\r
                         )\r
-                self.BuildReport.AddPlatformReport(Wa)\r
                 Wa.CreateMakeFile(False)\r
                 self.Progress.Stop("done!")\r
                 MaList = []\r
@@ -1345,6 +1354,8 @@ class Build():
                     if Ma == None: continue\r
                     MaList.append(Ma)\r
                     self._Build(self.Target, Ma)\r
+\r
+                self.BuildReport.AddPlatformReport(Wa, MaList)\r
                 if MaList == []:\r
                     EdkLogger.error(\r
                                 'build',\r
index f01bedc..4133feb 100755 (executable)
@@ -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',
             },
         }