"$(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
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
*_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
*_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
*_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
#\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
*_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
#\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
*_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
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
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
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
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
## @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
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
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
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
## @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
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
\r
self.Rewind()\r
\r
+ \r
## PreprocessIncludeFile() method\r
#\r
# Preprocess file contents, replace !include statements with file contents.\r
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
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
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:
## @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
# 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
# @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
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()
if self._InSubsection:
SectionType = self._SubsectionType
SectionName = self._SubsectionName
- if self._Owner == -1:
- self._Owner = self._LastItem
else:
SectionType = self._SectionType
SectionName = self._SectionName
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]
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 ["'", '"']:
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)
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
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
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
#\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
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
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
#\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
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
# 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
self.FvList,\r
self.SkuId\r
)\r
- self.BuildReport.AddPlatformReport(Wa)\r
Wa.CreateMakeFile(False)\r
self.Progress.Stop("done!")\r
MaList = []\r
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
'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',
},
}