Sync BaseTool trunk (version r2599) into EDKII BaseTools.
Signed-off-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Heshen Chen <chen.heshen@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14591 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -13,4 +13,4 @@
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#
|
||||
|
||||
gBUILD_VERSION = "Build 2524"
|
||||
gBUILD_VERSION = ""
|
||||
|
@ -1,7 +1,8 @@
|
||||
## @file
|
||||
# This file is used to define common static strings used by INF/DEC/DSC files
|
||||
#
|
||||
# Copyright (c) 2007 - 2008, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
# Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>
|
||||
# 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
|
||||
@ -18,6 +19,7 @@ TAB_COMMENT_EDK_START = '/*'
|
||||
TAB_COMMENT_EDK_END = '*/'
|
||||
TAB_COMMENT_EDK_SPLIT = '//'
|
||||
TAB_COMMENT_SPLIT = '#'
|
||||
TAB_SPECIAL_COMMENT = '##'
|
||||
TAB_EQUAL_SPLIT = '='
|
||||
TAB_VALUE_SPLIT = '|'
|
||||
TAB_COMMA_SPLIT = ','
|
||||
@ -26,10 +28,18 @@ TAB_SEMI_COLON_SPLIT = ';'
|
||||
TAB_SECTION_START = '['
|
||||
TAB_SECTION_END = ']'
|
||||
TAB_OPTION_START = '<'
|
||||
TAB_OPTION_END = '>'
|
||||
TAB_OPTION_END = '>'
|
||||
TAB_SLASH = '\\'
|
||||
TAB_BACK_SLASH = '/'
|
||||
TAB_LINE_BREAK = '\n'
|
||||
TAB_PRINTCHAR_VT = '\x0b'
|
||||
TAB_PRINTCHAR_BS = '\b'
|
||||
TAB_PRINTCHAR_NUL = '\0'
|
||||
TAB_UINT8 = 'UINT8'
|
||||
TAB_UINT16 = 'UINT16'
|
||||
TAB_UINT32 = 'UINT32'
|
||||
TAB_UINT64 = 'UINT64'
|
||||
TAB_VOID = 'VOID*'
|
||||
|
||||
TAB_EDK_SOURCE = '$(EDK_SOURCE)'
|
||||
TAB_EFI_SOURCE = '$(EFI_SOURCE)'
|
||||
@ -42,8 +52,9 @@ TAB_ARCH_X64 = 'X64'
|
||||
TAB_ARCH_IPF = 'IPF'
|
||||
TAB_ARCH_ARM = 'ARM'
|
||||
TAB_ARCH_EBC = 'EBC'
|
||||
TAB_ARCH_AARCH64 = 'AARCH64'
|
||||
|
||||
ARCH_LIST = [TAB_ARCH_IA32, TAB_ARCH_X64, TAB_ARCH_IPF, TAB_ARCH_ARM, TAB_ARCH_EBC]
|
||||
ARCH_LIST = [TAB_ARCH_IA32, TAB_ARCH_X64, TAB_ARCH_IPF, TAB_ARCH_ARM, TAB_ARCH_EBC, TAB_ARCH_AARCH64]
|
||||
ARCH_LIST_FULL = [TAB_ARCH_COMMON] + ARCH_LIST
|
||||
|
||||
SUP_MODULE_BASE = 'BASE'
|
||||
@ -75,7 +86,7 @@ EDK_COMPONENT_TYPE_BS_DRIVER = 'BS_DRIVER'
|
||||
EDK_COMPONENT_TYPE_RT_DRIVER = 'RT_DRIVER'
|
||||
EDK_COMPONENT_TYPE_SAL_RT_DRIVER = 'SAL_RT_DRIVER'
|
||||
EDK_COMPONENT_TYPE_APPLICATION = 'APPLICATION'
|
||||
EDK_NAME = 'EDK'
|
||||
EDK_NAME = 'EDK'
|
||||
EDKII_NAME = 'EDKII'
|
||||
|
||||
BINARY_FILE_TYPE_FW = 'FW'
|
||||
@ -109,6 +120,7 @@ TAB_SOURCES_X64 = TAB_SOURCES + TAB_SPLIT + TAB_ARCH_X64
|
||||
TAB_SOURCES_IPF = TAB_SOURCES + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_SOURCES_ARM = TAB_SOURCES + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_SOURCES_EBC = TAB_SOURCES + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_SOURCES_AARCH64 = TAB_SOURCES + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_BINARIES = 'Binaries'
|
||||
TAB_BINARIES_COMMON = TAB_BINARIES + TAB_SPLIT + TAB_ARCH_COMMON
|
||||
@ -117,6 +129,7 @@ TAB_BINARIES_X64 = TAB_BINARIES + TAB_SPLIT + TAB_ARCH_X64
|
||||
TAB_BINARIES_IPF = TAB_BINARIES + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_BINARIES_ARM = TAB_BINARIES + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_BINARIES_EBC = TAB_BINARIES + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_BINARIES_AARCH64 = TAB_BINARIES + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_INCLUDES = 'Includes'
|
||||
TAB_INCLUDES_COMMON = TAB_INCLUDES + TAB_SPLIT + TAB_ARCH_COMMON
|
||||
@ -125,6 +138,7 @@ TAB_INCLUDES_X64 = TAB_INCLUDES + TAB_SPLIT + TAB_ARCH_X64
|
||||
TAB_INCLUDES_IPF = TAB_INCLUDES + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_INCLUDES_ARM = TAB_INCLUDES + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_INCLUDES_EBC = TAB_INCLUDES + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_INCLUDES_AARCH64 = TAB_INCLUDES + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_GUIDS = 'Guids'
|
||||
TAB_GUIDS_COMMON = TAB_GUIDS + TAB_SPLIT + TAB_ARCH_COMMON
|
||||
@ -133,6 +147,7 @@ TAB_GUIDS_X64 = TAB_GUIDS + TAB_SPLIT + TAB_ARCH_X64
|
||||
TAB_GUIDS_IPF = TAB_GUIDS + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_GUIDS_ARM = TAB_GUIDS + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_GUIDS_EBC = TAB_GUIDS + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_GUIDS_AARCH64 = TAB_GUIDS + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_PROTOCOLS = 'Protocols'
|
||||
TAB_PROTOCOLS_COMMON = TAB_PROTOCOLS + TAB_SPLIT + TAB_ARCH_COMMON
|
||||
@ -141,6 +156,7 @@ TAB_PROTOCOLS_X64 = TAB_PROTOCOLS + TAB_SPLIT + TAB_ARCH_X64
|
||||
TAB_PROTOCOLS_IPF = TAB_PROTOCOLS + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_PROTOCOLS_ARM = TAB_PROTOCOLS + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_PROTOCOLS_EBC = TAB_PROTOCOLS + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_PROTOCOLS_AARCH64 = TAB_PROTOCOLS + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_PPIS = 'Ppis'
|
||||
TAB_PPIS_COMMON = TAB_PPIS + TAB_SPLIT + TAB_ARCH_COMMON
|
||||
@ -149,6 +165,7 @@ TAB_PPIS_X64 = TAB_PPIS + TAB_SPLIT + TAB_ARCH_X64
|
||||
TAB_PPIS_IPF = TAB_PPIS + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_PPIS_ARM = TAB_PPIS + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_PPIS_EBC = TAB_PPIS + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_PPIS_AARCH64 = TAB_PPIS + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_LIBRARY_CLASSES = 'LibraryClasses'
|
||||
TAB_LIBRARY_CLASSES_COMMON = TAB_LIBRARY_CLASSES + TAB_SPLIT + TAB_ARCH_COMMON
|
||||
@ -157,6 +174,7 @@ TAB_LIBRARY_CLASSES_X64 = TAB_LIBRARY_CLASSES + TAB_SPLIT + TAB_ARCH_X64
|
||||
TAB_LIBRARY_CLASSES_IPF = TAB_LIBRARY_CLASSES + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_LIBRARY_CLASSES_ARM = TAB_LIBRARY_CLASSES + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_LIBRARY_CLASSES_EBC = TAB_LIBRARY_CLASSES + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_LIBRARY_CLASSES_AARCH64 = TAB_LIBRARY_CLASSES + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_PACKAGES = 'Packages'
|
||||
TAB_PACKAGES_COMMON = TAB_PACKAGES + TAB_SPLIT + TAB_ARCH_COMMON
|
||||
@ -165,6 +183,7 @@ TAB_PACKAGES_X64 = TAB_PACKAGES + TAB_SPLIT + TAB_ARCH_X64
|
||||
TAB_PACKAGES_IPF = TAB_PACKAGES + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_PACKAGES_ARM = TAB_PACKAGES + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_PACKAGES_EBC = TAB_PACKAGES + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_PACKAGES_AARCH64 = TAB_PACKAGES + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_PCDS = 'Pcds'
|
||||
TAB_PCDS_FIXED_AT_BUILD = 'FixedAtBuild'
|
||||
@ -192,6 +211,7 @@ TAB_PCDS_FIXED_AT_BUILD_X64 = TAB_PCDS + TAB_PCDS_FIXED_AT_BUILD + TAB_SPLIT + T
|
||||
TAB_PCDS_FIXED_AT_BUILD_IPF = TAB_PCDS + TAB_PCDS_FIXED_AT_BUILD + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_PCDS_FIXED_AT_BUILD_ARM = TAB_PCDS + TAB_PCDS_FIXED_AT_BUILD + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_PCDS_FIXED_AT_BUILD_EBC = TAB_PCDS + TAB_PCDS_FIXED_AT_BUILD + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_PCDS_FIXED_AT_BUILD_AARCH64 = TAB_PCDS + TAB_PCDS_FIXED_AT_BUILD + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_PCDS_PATCHABLE_IN_MODULE_NULL = TAB_PCDS + TAB_PCDS_PATCHABLE_IN_MODULE
|
||||
TAB_PCDS_PATCHABLE_IN_MODULE_COMMON = TAB_PCDS + TAB_PCDS_PATCHABLE_IN_MODULE + TAB_SPLIT + TAB_ARCH_COMMON
|
||||
@ -200,6 +220,7 @@ TAB_PCDS_PATCHABLE_IN_MODULE_X64 = TAB_PCDS + TAB_PCDS_PATCHABLE_IN_MODULE + TAB
|
||||
TAB_PCDS_PATCHABLE_IN_MODULE_IPF = TAB_PCDS + TAB_PCDS_PATCHABLE_IN_MODULE + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_PCDS_PATCHABLE_IN_MODULE_ARM = TAB_PCDS + TAB_PCDS_PATCHABLE_IN_MODULE + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_PCDS_PATCHABLE_IN_MODULE_EBC = TAB_PCDS + TAB_PCDS_PATCHABLE_IN_MODULE + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_PCDS_PATCHABLE_IN_MODULE_AARCH64 = TAB_PCDS + TAB_PCDS_PATCHABLE_IN_MODULE + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_PCDS_FEATURE_FLAG_NULL = TAB_PCDS + TAB_PCDS_FEATURE_FLAG
|
||||
TAB_PCDS_FEATURE_FLAG_COMMON = TAB_PCDS + TAB_PCDS_FEATURE_FLAG + TAB_SPLIT + TAB_ARCH_COMMON
|
||||
@ -208,6 +229,7 @@ TAB_PCDS_FEATURE_FLAG_X64 = TAB_PCDS + TAB_PCDS_FEATURE_FLAG + TAB_SPLIT + TAB_A
|
||||
TAB_PCDS_FEATURE_FLAG_IPF = TAB_PCDS + TAB_PCDS_FEATURE_FLAG + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_PCDS_FEATURE_FLAG_ARM = TAB_PCDS + TAB_PCDS_FEATURE_FLAG + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_PCDS_FEATURE_FLAG_EBC = TAB_PCDS + TAB_PCDS_FEATURE_FLAG + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_PCDS_FEATURE_FLAG_AARCH64 = TAB_PCDS + TAB_PCDS_FEATURE_FLAG + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_PCDS_DYNAMIC_EX_NULL = TAB_PCDS + TAB_PCDS_DYNAMIC_EX
|
||||
TAB_PCDS_DYNAMIC_EX_DEFAULT_NULL = TAB_PCDS + TAB_PCDS_DYNAMIC_EX_DEFAULT
|
||||
@ -219,6 +241,7 @@ TAB_PCDS_DYNAMIC_EX_X64 = TAB_PCDS + TAB_PCDS_DYNAMIC_EX + TAB_SPLIT + TAB_ARCH_
|
||||
TAB_PCDS_DYNAMIC_EX_IPF = TAB_PCDS + TAB_PCDS_DYNAMIC_EX + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_PCDS_DYNAMIC_EX_ARM = TAB_PCDS + TAB_PCDS_DYNAMIC_EX + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_PCDS_DYNAMIC_EX_EBC = TAB_PCDS + TAB_PCDS_DYNAMIC_EX + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_PCDS_DYNAMIC_EX_AARCH64 = TAB_PCDS + TAB_PCDS_DYNAMIC_EX + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_PCDS_DYNAMIC_NULL = TAB_PCDS + TAB_PCDS_DYNAMIC
|
||||
TAB_PCDS_DYNAMIC_DEFAULT_NULL = TAB_PCDS + TAB_PCDS_DYNAMIC_DEFAULT
|
||||
@ -230,6 +253,7 @@ TAB_PCDS_DYNAMIC_X64 = TAB_PCDS + TAB_PCDS_DYNAMIC + TAB_SPLIT + TAB_ARCH_X64
|
||||
TAB_PCDS_DYNAMIC_IPF = TAB_PCDS + TAB_PCDS_DYNAMIC + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_PCDS_DYNAMIC_ARM = TAB_PCDS + TAB_PCDS_DYNAMIC + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_PCDS_DYNAMIC_EBC = TAB_PCDS + TAB_PCDS_DYNAMIC + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_PCDS_DYNAMIC_AARCH64 = TAB_PCDS + TAB_PCDS_DYNAMIC + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_PCD_DYNAMIC_TYPE_LIST = [TAB_PCDS_DYNAMIC_DEFAULT_NULL, TAB_PCDS_DYNAMIC_VPD_NULL, TAB_PCDS_DYNAMIC_HII_NULL]
|
||||
TAB_PCD_DYNAMIC_EX_TYPE_LIST = [TAB_PCDS_DYNAMIC_EX_DEFAULT_NULL, TAB_PCDS_DYNAMIC_EX_VPD_NULL, TAB_PCDS_DYNAMIC_EX_HII_NULL]
|
||||
@ -254,6 +278,7 @@ TAB_DEPEX_X64 = TAB_DEPEX + TAB_SPLIT + TAB_ARCH_X64
|
||||
TAB_DEPEX_IPF = TAB_DEPEX + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_DEPEX_ARM = TAB_DEPEX + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_DEPEX_EBC = TAB_DEPEX + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_DEPEX_AARCH64 = TAB_DEPEX + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_SKUIDS = 'SkuIds'
|
||||
|
||||
@ -264,6 +289,7 @@ TAB_LIBRARIES_X64 = TAB_LIBRARIES + TAB_SPLIT + TAB_ARCH_X64
|
||||
TAB_LIBRARIES_IPF = TAB_LIBRARIES + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_LIBRARIES_ARM = TAB_LIBRARIES + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_LIBRARIES_EBC = TAB_LIBRARIES + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_LIBRARIES_AARCH64 = TAB_LIBRARIES + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_COMPONENTS = 'Components'
|
||||
TAB_COMPONENTS_COMMON = TAB_COMPONENTS + TAB_SPLIT + TAB_ARCH_COMMON
|
||||
@ -272,6 +298,7 @@ TAB_COMPONENTS_X64 = TAB_COMPONENTS + TAB_SPLIT + TAB_ARCH_X64
|
||||
TAB_COMPONENTS_IPF = TAB_COMPONENTS + TAB_SPLIT + TAB_ARCH_IPF
|
||||
TAB_COMPONENTS_ARM = TAB_COMPONENTS + TAB_SPLIT + TAB_ARCH_ARM
|
||||
TAB_COMPONENTS_EBC = TAB_COMPONENTS + TAB_SPLIT + TAB_ARCH_EBC
|
||||
TAB_COMPONENTS_AARCH64 = TAB_COMPONENTS + TAB_SPLIT + TAB_ARCH_AARCH64
|
||||
|
||||
TAB_COMPONENTS_SOURCE_OVERRIDE_PATH = 'SOURCE_OVERRIDE_PATH'
|
||||
|
||||
@ -328,6 +355,25 @@ TAB_INF_FEATURE_PCD = 'FeaturePcd'
|
||||
TAB_INF_PATCH_PCD = 'PatchPcd'
|
||||
TAB_INF_PCD = 'Pcd'
|
||||
TAB_INF_PCD_EX = 'PcdEx'
|
||||
TAB_INF_USAGE_PRO = 'PRODUCES'
|
||||
TAB_INF_USAGE_SOME_PRO = 'SOMETIMES_PRODUCES'
|
||||
TAB_INF_USAGE_CON = 'CONSUMES'
|
||||
TAB_INF_USAGE_SOME_CON = 'SOMETIMES_CONSUMES'
|
||||
TAB_INF_USAGE_NOTIFY = 'NOTIFY'
|
||||
TAB_INF_USAGE_TO_START = 'TO_START'
|
||||
TAB_INF_USAGE_BY_START = 'BY_START'
|
||||
TAB_INF_GUIDTYPE_EVENT = 'Event'
|
||||
TAB_INF_GUIDTYPE_FILE = 'File'
|
||||
TAB_INF_GUIDTYPE_FV = 'FV'
|
||||
TAB_INF_GUIDTYPE_GUID = 'GUID'
|
||||
TAB_INF_GUIDTYPE_HII = 'HII'
|
||||
TAB_INF_GUIDTYPE_HOB = 'HOB'
|
||||
TAB_INF_GUIDTYPE_ST = 'SystemTable'
|
||||
TAB_INF_GUIDTYPE_TSG = 'TokenSpaceGuid'
|
||||
TAB_INF_GUIDTYPE_VAR = 'Variable'
|
||||
TAB_INF_GUIDTYPE_PROTOCOL = 'PROTOCOL'
|
||||
TAB_INF_GUIDTYPE_PPI = 'PPI'
|
||||
TAB_INF_GUIDTYPE_UNDEFINED = 'UNDEFINED'
|
||||
|
||||
#
|
||||
# Dec Definitions
|
||||
@ -430,3 +476,22 @@ TAB_BRG_LIBRARY = 'Library'
|
||||
# Build Rule File Version Definition
|
||||
#
|
||||
TAB_BUILD_RULE_VERSION = "build_rule_version"
|
||||
|
||||
# section name for PCDs
|
||||
PCDS_DYNAMIC_DEFAULT = "PcdsDynamicDefault"
|
||||
PCDS_DYNAMIC_VPD = "PcdsDynamicVpd"
|
||||
PCDS_DYNAMIC_HII = "PcdsDynamicHii"
|
||||
PCDS_DYNAMICEX_DEFAULT = "PcdsDynamicExDefault"
|
||||
PCDS_DYNAMICEX_VPD = "PcdsDynamicExVpd"
|
||||
PCDS_DYNAMICEX_HII = "PcdsDynamicExHii"
|
||||
|
||||
# Section allowed to have items after arch
|
||||
SECTIONS_HAVE_ITEM_AFTER_ARCH = [TAB_LIBRARY_CLASSES.upper(), TAB_DEPEX.upper(), TAB_USER_EXTENSIONS.upper(),
|
||||
PCDS_DYNAMIC_DEFAULT.upper(),
|
||||
PCDS_DYNAMIC_VPD.upper(),
|
||||
PCDS_DYNAMIC_HII.upper(),
|
||||
PCDS_DYNAMICEX_DEFAULT.upper(),
|
||||
PCDS_DYNAMICEX_VPD.upper(),
|
||||
PCDS_DYNAMICEX_HII.upper(),
|
||||
TAB_BUILD_OPTIONS.upper(),
|
||||
TAB_INCLUDES.upper()]
|
||||
|
@ -405,7 +405,7 @@ class ItemBuild(object):
|
||||
#
|
||||
# @var WorkspaceDir: To store value for WorkspaceDir
|
||||
# @var SupArchList: To store value for SupArchList, selection scope is in below list
|
||||
# EBC | IA32 | X64 | IPF | ARM | PPC
|
||||
# EBC | IA32 | X64 | IPF | ARM | PPC | AARCH64
|
||||
# @var BuildTarget: To store value for WorkspaceDir, selection scope is in below list
|
||||
# RELEASE | DEBUG
|
||||
# @var SkuId: To store value for SkuId
|
||||
|
@ -246,12 +246,14 @@ class ValueExpression(object):
|
||||
# @return: True or False if RealValue is False
|
||||
# Evaluated value of string format if RealValue is True
|
||||
#
|
||||
def __call__(self, RealValue=False):
|
||||
def __call__(self, RealValue=False, Depth=0):
|
||||
if self._NoProcess:
|
||||
return self._Expr
|
||||
|
||||
self._Depth = Depth
|
||||
|
||||
self._Expr = self._Expr.strip()
|
||||
if RealValue:
|
||||
if RealValue and Depth == 0:
|
||||
self._Token = self._Expr
|
||||
if self.__IsNumberToken():
|
||||
return self._Expr
|
||||
@ -471,7 +473,7 @@ class ValueExpression(object):
|
||||
Ex = BadExpression(ERR_PCD_RESOLVE % self._Token)
|
||||
Ex.Pcd = self._Token
|
||||
raise Ex
|
||||
self._Token = ValueExpression(self._Symb[self._Token], self._Symb)(True)
|
||||
self._Token = ValueExpression(self._Symb[self._Token], self._Symb)(True, self._Depth+1)
|
||||
if type(self._Token) != type(''):
|
||||
self._LiteralToken = hex(self._Token)
|
||||
return
|
||||
@ -551,7 +553,7 @@ class ValueExpression(object):
|
||||
if Match and not Expr[Match.end():Match.end()+1].isalnum() \
|
||||
and Expr[Match.end():Match.end()+1] != '_':
|
||||
self._Idx += Match.end()
|
||||
self._Token = ValueExpression(GuidStringToGuidStructureString(Expr[0:Match.end()]))(True)
|
||||
self._Token = ValueExpression(GuidStringToGuidStructureString(Expr[0:Match.end()]))(True, self._Depth+1)
|
||||
return self._Token
|
||||
elif self.__IsIdChar(Ch):
|
||||
return self.__GetIdToken()
|
||||
|
@ -2769,7 +2769,7 @@ class FdfParser(object):
|
||||
raise Warning("expected '.' At Line ", self.FileName, self.CurrentLineNumber)
|
||||
|
||||
Arch = self.__SkippedChars.rstrip(".")
|
||||
if Arch.upper() not in ("IA32", "X64", "IPF", "EBC", "ARM", "COMMON"):
|
||||
if Arch.upper() not in ("IA32", "X64", "IPF", "EBC", "ARM", "AARCH64", "COMMON"):
|
||||
raise Warning("Unknown Arch '%s'" % Arch, self.FileName, self.CurrentLineNumber)
|
||||
|
||||
ModuleType = self.__GetModuleType()
|
||||
@ -3356,7 +3356,7 @@ class FdfParser(object):
|
||||
raise Warning("expected '.' At Line ", self.FileName, self.CurrentLineNumber)
|
||||
|
||||
Arch = self.__SkippedChars.rstrip(".").upper()
|
||||
if Arch not in ("IA32", "X64", "IPF", "ARM"):
|
||||
if Arch not in ("IA32", "X64", "IPF", "ARM", "AARCH64"):
|
||||
raise Warning("Unknown Arch At line ", self.FileName, self.CurrentLineNumber)
|
||||
|
||||
if not self.__GetNextWord():
|
||||
@ -3370,7 +3370,7 @@ class FdfParser(object):
|
||||
if self.__IsToken(","):
|
||||
if not self.__GetNextWord():
|
||||
raise Warning("expected Arch list At Line ", self.FileName, self.CurrentLineNumber)
|
||||
if self.__Token.upper() not in ("IA32", "X64", "IPF", "ARM"):
|
||||
if self.__Token.upper() not in ("IA32", "X64", "IPF", "ARM", "AARCH64"):
|
||||
raise Warning("Unknown Arch At line ", self.FileName, self.CurrentLineNumber)
|
||||
VtfObj.ArchList = self.__Token.upper()
|
||||
|
||||
|
@ -360,7 +360,7 @@ def StoreTextFile(TextFile, Content):
|
||||
# The possible duplication is ensured to be removed.
|
||||
#
|
||||
# @param Section Section dictionary indexed by CPU architecture.
|
||||
# @param Arch CPU architecture: Ia32, X64, Ipf, ARM, Ebc or Common.
|
||||
# @param Arch CPU architecture: Ia32, X64, Ipf, ARM, AARCH64, Ebc or Common.
|
||||
# @param Item The Item to be added to section dictionary.
|
||||
#
|
||||
def AddToSection(Section, Arch, Item):
|
||||
@ -382,7 +382,7 @@ def AddToSection(Section, Arch, Item):
|
||||
# @retval Section The string content of a section.
|
||||
#
|
||||
def GetSection(SectionName, Method, ObjectList):
|
||||
SupportedArches = ["common", "Ia32", "X64", "Ipf", "Ebc", "ARM"]
|
||||
SupportedArches = ["common", "Ia32", "X64", "Ipf", "Ebc", "ARM", "AARCH64"]
|
||||
SectionDict = {}
|
||||
for Object in ObjectList:
|
||||
Item = Method(Object)
|
||||
|
@ -30,6 +30,7 @@ from Common import EdkLogger as EdkLogger
|
||||
from Common import GlobalData as GlobalData
|
||||
from DataType import *
|
||||
from BuildToolError import *
|
||||
from CommonDataClass.DataClass import *
|
||||
|
||||
## Regular expression used to find out place holders in string template
|
||||
gPlaceholderPattern = re.compile("\$\{([^$()\s]+)\}", re.MULTILINE|re.UNICODE)
|
||||
@ -1176,6 +1177,113 @@ def ParseConsoleLog(Filename):
|
||||
Opr.close()
|
||||
Opw.close()
|
||||
|
||||
## AnalyzeDscPcd
|
||||
#
|
||||
# Analyze DSC PCD value, since there is no data type info in DSC
|
||||
# This fuction is used to match functions (AnalyzePcdData, AnalyzeHiiPcdData, AnalyzeVpdPcdData) used for retrieving PCD value from database
|
||||
# 1. Feature flag: TokenSpace.PcdCName|PcdValue
|
||||
# 2. Fix and Patch:TokenSpace.PcdCName|PcdValue[|MaxSize]
|
||||
# 3. Dynamic default:
|
||||
# TokenSpace.PcdCName|PcdValue[|VOID*[|MaxSize]]
|
||||
# TokenSpace.PcdCName|PcdValue
|
||||
# 4. Dynamic VPD:
|
||||
# TokenSpace.PcdCName|VpdOffset[|VpdValue]
|
||||
# TokenSpace.PcdCName|VpdOffset[|MaxSize[|VpdValue]]
|
||||
# 5. Dynamic HII:
|
||||
# TokenSpace.PcdCName|HiiString|VaiableGuid|VariableOffset[|HiiValue]
|
||||
# PCD value needs to be located in such kind of string, and the PCD value might be an expression in which
|
||||
# there might have "|" operator, also in string value.
|
||||
#
|
||||
# @param Setting: String contain information described above with "TokenSpace.PcdCName|" stripped
|
||||
# @param PcdType: PCD type: feature, fixed, dynamic default VPD HII
|
||||
# @param DataType: The datum type of PCD: VOID*, UNIT, BOOL
|
||||
# @retval:
|
||||
# ValueList: A List contain fields described above
|
||||
# IsValid: True if conforming EBNF, otherwise False
|
||||
# Index: The index where PcdValue is in ValueList
|
||||
#
|
||||
def AnalyzeDscPcd(Setting, PcdType, DataType=''):
|
||||
Setting = Setting.strip()
|
||||
# There might be escaped quote in a string: \", \\\"
|
||||
Data = Setting.replace('\\\\', '//').replace('\\\"', '\\\'')
|
||||
# There might be '|' in string and in ( ... | ... ), replace it with '-'
|
||||
NewStr = ''
|
||||
InStr = False
|
||||
Pair = 0
|
||||
for ch in Data:
|
||||
if ch == '"':
|
||||
InStr = not InStr
|
||||
elif ch == '(' and not InStr:
|
||||
Pair += 1
|
||||
elif ch == ')' and not InStr:
|
||||
Pair -= 1
|
||||
|
||||
if (Pair > 0 or InStr) and ch == TAB_VALUE_SPLIT:
|
||||
NewStr += '-'
|
||||
else:
|
||||
NewStr += ch
|
||||
FieldList = []
|
||||
StartPos = 0
|
||||
while True:
|
||||
Pos = NewStr.find(TAB_VALUE_SPLIT, StartPos)
|
||||
if Pos < 0:
|
||||
FieldList.append(Setting[StartPos:].strip())
|
||||
break
|
||||
FieldList.append(Setting[StartPos:Pos].strip())
|
||||
StartPos = Pos + 1
|
||||
|
||||
IsValid = True
|
||||
if PcdType in (MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE, MODEL_PCD_FEATURE_FLAG):
|
||||
Value = FieldList[0]
|
||||
Size = ''
|
||||
if len(FieldList) > 1:
|
||||
Size = FieldList[1]
|
||||
if DataType == 'VOID*':
|
||||
IsValid = (len(FieldList) <= 2)
|
||||
else:
|
||||
IsValid = (len(FieldList) <= 1)
|
||||
return [Value, '', Size], IsValid, 0
|
||||
elif PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):
|
||||
Value = FieldList[0]
|
||||
Size = Type = ''
|
||||
if len(FieldList) > 1:
|
||||
Type = FieldList[1]
|
||||
if len(FieldList) > 2:
|
||||
Size = FieldList[2]
|
||||
if DataType == 'VOID*':
|
||||
IsValid = (len(FieldList) <= 3)
|
||||
else:
|
||||
IsValid = (len(FieldList) <= 1)
|
||||
return [Value, Type, Size], IsValid, 0
|
||||
elif PcdType in (MODEL_PCD_DYNAMIC_VPD, MODEL_PCD_DYNAMIC_EX_VPD):
|
||||
VpdOffset = FieldList[0]
|
||||
Value = Size = ''
|
||||
if not DataType == 'VOID*':
|
||||
if len(FieldList) > 1:
|
||||
Value = FieldList[1]
|
||||
else:
|
||||
if len(FieldList) > 1:
|
||||
Size = FieldList[1]
|
||||
if len(FieldList) > 2:
|
||||
Value = FieldList[2]
|
||||
if DataType == 'VOID*':
|
||||
IsValid = (len(FieldList) <= 3)
|
||||
else:
|
||||
IsValid = (len(FieldList) <= 2)
|
||||
return [VpdOffset, Size, Value], IsValid, 2
|
||||
elif PcdType in (MODEL_PCD_DYNAMIC_HII, MODEL_PCD_DYNAMIC_EX_HII):
|
||||
HiiString = FieldList[0]
|
||||
Guid = Offset = Value = ''
|
||||
if len(FieldList) > 1:
|
||||
Guid = FieldList[1]
|
||||
if len(FieldList) > 2:
|
||||
Offset = FieldList[2]
|
||||
if len(FieldList) > 3:
|
||||
Value = FieldList[3]
|
||||
IsValid = (3 <= len(FieldList) <= 4)
|
||||
return [HiiString, Guid, Offset, Value], IsValid, 3
|
||||
return [], False, 0
|
||||
|
||||
## AnalyzePcdData
|
||||
#
|
||||
# Analyze the pcd Value, Datum type and TokenNumber.
|
||||
@ -1236,12 +1344,12 @@ def AnalyzeHiiPcdData(Setting):
|
||||
|
||||
## AnalyzeVpdPcdData
|
||||
#
|
||||
# Analyze the vpd pcd Value, Datum type and TokenNumber.
|
||||
# Analyze the vpd pcd VpdOffset, MaxDatumSize and InitialValue.
|
||||
# Used to avoid split issue while the value string contain "|" character
|
||||
#
|
||||
# @param[in] Setting: A String contain value/datum type/token number information;
|
||||
# @param[in] Setting: A String contain VpdOffset/MaxDatumSize/InitialValue information;
|
||||
#
|
||||
# @retval ValueList: A List contain value, datum type and toke number.
|
||||
# @retval ValueList: A List contain VpdOffset, MaxDatumSize and InitialValue.
|
||||
#
|
||||
def AnalyzeVpdPcdData(Setting):
|
||||
ValueList = ['', '', '']
|
||||
@ -1269,22 +1377,38 @@ def AnalyzeVpdPcdData(Setting):
|
||||
#
|
||||
def CheckPcdDatum(Type, Value):
|
||||
if Type == "VOID*":
|
||||
ValueRe = re.compile(r'\s*L?\".*\"\s*$')
|
||||
if not (((Value.startswith('L"') or Value.startswith('"')) and Value.endswith('"'))
|
||||
or (Value.startswith('{') and Value.endswith('}'))
|
||||
):
|
||||
return False, "Invalid value [%s] of type [%s]; must be in the form of {...} for array"\
|
||||
", or \"...\" for string, or L\"...\" for unicode string" % (Value, Type)
|
||||
", or \"...\" for string, or L\"...\" for unicode string" % (Value, Type)
|
||||
elif ValueRe.match(Value):
|
||||
# Check the chars in UnicodeString or CString is printable
|
||||
if Value.startswith("L"):
|
||||
Value = Value[2:-1]
|
||||
else:
|
||||
Value = Value[1:-1]
|
||||
Printset = set(string.printable)
|
||||
Printset.remove(TAB_PRINTCHAR_VT)
|
||||
Printset.add(TAB_PRINTCHAR_BS)
|
||||
Printset.add(TAB_PRINTCHAR_NUL)
|
||||
if not set(Value).issubset(Printset):
|
||||
PrintList = list(Printset)
|
||||
PrintList.sort()
|
||||
return False, "Invalid PCD string value of type [%s]; must be printable chars %s." % (Type, PrintList)
|
||||
elif Type == 'BOOLEAN':
|
||||
if Value not in ['TRUE', 'True', 'true', '0x1', '0x01', '1', 'FALSE', 'False', 'false', '0x0', '0x00', '0']:
|
||||
return False, "Invalid value [%s] of type [%s]; must be one of TRUE, True, true, 0x1, 0x01, 1"\
|
||||
", FALSE, False, false, 0x0, 0x00, 0" % (Value, Type)
|
||||
elif type(Value) == type(""):
|
||||
elif Type in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64]:
|
||||
try:
|
||||
Value = long(Value, 0)
|
||||
except:
|
||||
return False, "Invalid value [%s] of type [%s];"\
|
||||
" must be a hexadecimal, decimal or octal in C language format."\
|
||||
% (Value, Type)
|
||||
" must be a hexadecimal, decimal or octal in C language format." % (Value, Type)
|
||||
else:
|
||||
return False, "Invalid type [%s]; must be one of VOID*, BOOLEAN, UINT8, UINT16, UINT32, UINT64." % (Type)
|
||||
|
||||
return True, ""
|
||||
|
||||
|
Binary file not shown.
@ -368,7 +368,7 @@ def CleanString(Line, CommentCharacter=DataType.TAB_COMMENT_SPLIT, AllowCppStyle
|
||||
|
||||
## CleanString2
|
||||
#
|
||||
# Split comments in a string
|
||||
# Split statement with comments in a string
|
||||
# Remove spaces
|
||||
#
|
||||
# @param Line: The string to be cleaned
|
||||
@ -387,15 +387,21 @@ def CleanString2(Line, CommentCharacter=DataType.TAB_COMMENT_SPLIT, AllowCppStyl
|
||||
if AllowCppStyleComment:
|
||||
Line = Line.replace(DataType.TAB_COMMENT_EDK_SPLIT, CommentCharacter)
|
||||
#
|
||||
# separate comments and statements
|
||||
# separate comments and statements, but we should escape comment character in string
|
||||
#
|
||||
LineParts = Line.split(CommentCharacter, 1);
|
||||
#
|
||||
# remove whitespace again
|
||||
#
|
||||
Line = LineParts[0].strip();
|
||||
if len(LineParts) > 1:
|
||||
Comment = LineParts[1].strip()
|
||||
InString = False
|
||||
CommentInString = False
|
||||
Comment = ''
|
||||
for Index in range(0, len(Line)):
|
||||
if Line[Index] == '"':
|
||||
InString = not InString
|
||||
elif Line[Index] == CommentCharacter and InString:
|
||||
CommentInString = True
|
||||
elif Line[Index] == CommentCharacter and not InString:
|
||||
Comment = Line[Index:].strip()
|
||||
Line = Line[0:Index].strip()
|
||||
break
|
||||
if Comment:
|
||||
# Remove prefixed and trailing comment characters
|
||||
Start = 0
|
||||
End = len(Comment)
|
||||
@ -405,8 +411,6 @@ def CleanString2(Line, CommentCharacter=DataType.TAB_COMMENT_SPLIT, AllowCppStyl
|
||||
End -= 1
|
||||
Comment = Comment[Start:End]
|
||||
Comment = Comment.strip()
|
||||
else:
|
||||
Comment = ''
|
||||
|
||||
return Line, Comment
|
||||
|
||||
|
Reference in New Issue
Block a user