mirror of https://github.com/acidanthera/audk.git
Sync EDKII BaseTools to BaseTools project r1911.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10177 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
545312ad92
commit
d5d56f1bc5
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 <buildtools_project>\BaseTools\Source\ + r1707 VfrCompiler tool update
|
||||
r1911 <buildtools_project>\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 <buildtools_project>\BaseTools\Source\Python\MigrationMsa2Inf
|
||||
|
||||
|
||||
Brief Usage for PcdSyntax Update:
|
||||
Usage:
|
||||
PcdSyntaxUpdate.exe <directory_name>
|
||||
It searches all INF, DEC and DSC file under <directory_name> 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.
|
||||
<LibraryClass> {
|
||||
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
|
||||
}
|
||||
To
|
||||
<LibraryClasses> {
|
||||
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 <buildtools_project>\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 <buildtools_project>\BaseTools\Source\Python\Fpd2Dsc
|
||||
BaseTools\Source\Python\fpd2dsc
|
||||
|
||||
10-Sep-2009
|
||||
4-Mar-2010
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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',
|
||||
},
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue