4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync## @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# This file is used to define class objects of INF file [Pcds] section.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# It will consumed by InfParser.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# This program and the accompanying materials are licensed and made available
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# under the terms and conditions of the BSD License which accompanies this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync'''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInfPcdObject
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync'''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncimport os
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncimport re
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Logger import StringTable as ST
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Logger import ToolError
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncimport Logger.Log as Logger
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library import GlobalData
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library import DataType as DT
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library.Misc import Sdict
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library.Misc import GetHelpStringByRemoveHashKey
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library.ParserValidate import IsValidPcdType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library.ParserValidate import IsValidCVariableName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library.ParserValidate import IsValidPcdValue
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library.ParserValidate import IsValidArch
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library.CommentParsing import ParseComment
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library.String import GetSplitValueList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library.String import IsHexDigitUINT32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library.ExpressionValidate import IsValidFeatureFlagExp
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Parser.InfAsBuiltProcess import GetPackageListInfo
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Parser.DecParser import Dec
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Object.Parser.InfPackagesObject import InfPackageItem
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncdef ValidateArch(ArchItem, PcdTypeItem1, LineNo, SupArchDict, SupArchList):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Validate Arch
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ArchItem == '' or ArchItem == None):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ArchItem = 'COMMON'
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if PcdTypeItem1.upper != DT.TAB_INF_FEATURE_PCD.upper():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ArchList = GetSplitValueList(ArchItem, ' ')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for ArchItemNew in ArchList:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not IsValidArch(ArchItemNew):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_INF_PARSER_DEFINE_FROMAT_INVALID%(ArchItemNew),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=GlobalData.gINF_MODULE_NAME,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=LineNo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ExtraData=ArchItemNew)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SupArchDict[PcdTypeItem1] = ArchList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SupArchList.append(ArchItem)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return SupArchList, SupArchDict
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncdef ParsePcdComment(CommentList, PcdTypeItem, PcdItemObj):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentInsList = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PreUsage = None
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PreHelpText = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BlockFlag = -1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FFEHelpText = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemHelpText = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Count = 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for CommentItem in CommentList:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Count = Count + 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemUsage, CommentType, CommentString, CommentItemHelpText = ParseComment(CommentItem,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DT.ALL_USAGE_TOKENS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync [],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync False)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if CommentType and CommentString:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync pass
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if PcdTypeItem == 'FeaturePcd':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemUsage = DT.USAGE_ITEM_CONSUMES
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if CommentItemHelpText == None:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemHelpText = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if Count == 1:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FFEHelpText = CommentItemHelpText
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FFEHelpText = FFEHelpText + DT.END_OF_LINE + CommentItemHelpText
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if Count == len(CommentList):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemHelpText = FFEHelpText
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BlockFlag = 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if CommentItemHelpText == None:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemHelpText = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if Count == len(CommentList) and CommentItemUsage == DT.ITEM_UNDEFINED:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemHelpText = DT.END_OF_LINE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if Count == len(CommentList) and (BlockFlag == 1 or BlockFlag == 2):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if CommentItemUsage == DT.ITEM_UNDEFINED:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BlockFlag = 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BlockFlag = 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync elif BlockFlag == -1 and Count == len(CommentList):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BlockFlag = 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if BlockFlag == -1 or BlockFlag == 1 or BlockFlag == 2:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if CommentItemUsage == DT.ITEM_UNDEFINED:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if BlockFlag == -1:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BlockFlag = 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync elif BlockFlag == 1:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BlockFlag = 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if BlockFlag == 1 or BlockFlag == 2:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BlockFlag = 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync elif BlockFlag == -1:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BlockFlag = 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Combine two comment line if they are generic comment
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if CommentItemUsage == PreUsage == DT.ITEM_UNDEFINED:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemHelpText = PreHelpText + DT.END_OF_LINE + CommentItemHelpText
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PreHelpText = CommentItemHelpText
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if BlockFlag == 4:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemIns = InfPcdItemCommentContent()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemIns.SetUsageItem(CommentItemUsage)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemIns.SetHelpStringItem(CommentItemHelpText)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentInsList.append(CommentItemIns)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BlockFlag = -1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PreUsage = None
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PreHelpText = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync elif BlockFlag == 3:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Add previous help string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemIns = InfPcdItemCommentContent()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemIns.SetUsageItem(DT.ITEM_UNDEFINED)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if PreHelpText == '' or PreHelpText.endswith(DT.END_OF_LINE):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PreHelpText += DT.END_OF_LINE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemIns.SetHelpStringItem(PreHelpText)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentInsList.append(CommentItemIns)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Add Current help string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemIns = InfPcdItemCommentContent()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemIns.SetUsageItem(CommentItemUsage)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemIns.SetHelpStringItem(CommentItemHelpText)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentInsList.append(CommentItemIns)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BlockFlag = -1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PreUsage = None
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PreHelpText = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PreUsage = CommentItemUsage
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PreHelpText = CommentItemHelpText
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetHelpStringList(CommentInsList)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return PcdItemObj
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncclass InfPcdItemCommentContent():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def __init__(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # ## SOMETIMES_CONSUMES ## HelpString
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.UsageItem = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Help String
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.HelpStringItem = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetUsageItem(self, UsageItem):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.UsageItem = UsageItem
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetUsageItem(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.UsageItem
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetHelpStringItem(self, HelpStringItem):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.HelpStringItem = HelpStringItem
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetHelpStringItem(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.HelpStringItem
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync## InfPcdItem
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# This class defined Pcd item used in Module files
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param CName: Input value for CName, default is ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param Token: Input value for Token, default is ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param TokenSpaceGuidCName: Input value for TokenSpaceGuidCName, default
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# is ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param DatumType: Input value for DatumType, default is ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param MaxDatumSize: Input value for MaxDatumSize, default is ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param DefaultValue: Input value for DefaultValue, default is ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param ItemType: Input value for ItemType, default is ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param ValidUsage: Input value for ValidUsage, default is []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param SkuInfoList: Input value for SkuInfoList, default is {}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param SupModuleList: Input value for SupModuleList, default is []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncclass InfPcdItem():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def __init__(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.CName = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.Token = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.TokenSpaceGuidCName = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.TokenSpaceGuidValue = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.DatumType = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.MaxDatumSize = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.DefaultValue = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.Offset = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.ValidUsage = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.ItemType = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.SupModuleList = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.HelpStringList = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.FeatureFlagExp = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.SupArchList = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.PcdErrorsList = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetCName(self, CName):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.CName = CName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetCName(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.CName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetToken(self, Token):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.Token = Token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetToken(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.Token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetTokenSpaceGuidCName(self, TokenSpaceGuidCName):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.TokenSpaceGuidCName = TokenSpaceGuidCName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetTokenSpaceGuidCName(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.TokenSpaceGuidCName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetTokenSpaceGuidValue(self, TokenSpaceGuidValue):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.TokenSpaceGuidValue = TokenSpaceGuidValue
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetTokenSpaceGuidValue(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.TokenSpaceGuidValue
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetDatumType(self, DatumType):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.DatumType = DatumType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetDatumType(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.DatumType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetMaxDatumSize(self, MaxDatumSize):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.MaxDatumSize = MaxDatumSize
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetMaxDatumSize(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.MaxDatumSize
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetDefaultValue(self, DefaultValue):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.DefaultValue = DefaultValue
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetDefaultValue(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.DefaultValue
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetPcdErrorsList(self, PcdErrorsList):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.PcdErrorsList = PcdErrorsList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetPcdErrorsList(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.PcdErrorsList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetItemType(self, ItemType):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.ItemType = ItemType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetItemType(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.ItemType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetSupModuleList(self, SupModuleList):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.SupModuleList = SupModuleList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetSupModuleList(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.SupModuleList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetHelpStringList(self, HelpStringList):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.HelpStringList = HelpStringList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetHelpStringList(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.HelpStringList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetFeatureFlagExp(self, FeatureFlagExp):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.FeatureFlagExp = FeatureFlagExp
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetFeatureFlagExp(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.FeatureFlagExp
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetSupportArchList(self, ArchList):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.SupArchList = ArchList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetSupportArchList(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.SupArchList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetOffset(self, Offset):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.Offset = Offset
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetOffset(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.Offset
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync##
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncclass InfPcdObject():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def __init__(self, FileName):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.Pcds = Sdict()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.FileName = FileName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetPcds(self, PcdContent, KeysList = None, PackageInfo = None):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if GlobalData.gIS_BINARY_INF:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.SetAsBuildPcds(PcdContent, KeysList, PackageInfo)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return True
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Validate Arch
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SupArchList = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SupArchDict = {}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdTypeItem = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (PcdTypeItem1, ArchItem, LineNo) in KeysList:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SupArchList, SupArchDict = ValidateArch(ArchItem, PcdTypeItem1, LineNo, SupArchDict, SupArchList)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Validate PcdType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (PcdTypeItem1 == '' or PcdTypeItem1 == None):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return False
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not IsValidPcdType(PcdTypeItem1):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_INF_PARSER_PCD_SECTION_TYPE_ERROR%(DT.PCD_USAGE_TYPE_LIST_OF_MODULE),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=GlobalData.gINF_MODULE_NAME,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=LineNo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ExtraData=PcdTypeItem1)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return False
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdTypeItem = PcdTypeItem1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for PcdItem in PcdContent:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj = InfPcdItem()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentList = PcdItem[1]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CurrentLineOfPcdItem = PcdItem[2]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItem = PcdItem[0]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if CommentList != None and len(CommentList) != 0:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj = ParsePcdComment(CommentList, PcdTypeItem, PcdItemObj)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemIns = InfPcdItemCommentContent()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentItemIns.SetUsageItem(DT.ITEM_UNDEFINED)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetHelpStringList([CommentItemIns])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if len(PcdItem) >= 1 and len(PcdItem) <= 3:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj = SetPcdName(PcdItem, CurrentLineOfPcdItem, PcdItemObj)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if len(PcdItem) >= 2 and len(PcdItem) <= 3:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Contain PcdName and Value, validate value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if IsValidPcdValue(PcdItem[1]) or PcdItem[1].strip() == "":
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetDefaultValue(PcdItem[1])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_INF_PARSER_PCD_VALUE_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=CurrentLineOfPcdItem[2],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=CurrentLineOfPcdItem[1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ExtraData=PcdItem[1])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if len(PcdItem) == 3:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Contain PcdName, value, and FeatureFlag express
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Validate Feature Flag Express
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if PcdItem[2].strip() == '':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_MISSING,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=CurrentLineOfPcdItem[2],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=CurrentLineOfPcdItem[1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ExtraData=CurrentLineOfPcdItem[0])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Validate FFE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FeatureFlagRtv = IsValidFeatureFlagExp(PcdItem[2].strip())
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not FeatureFlagRtv[0]:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_SYNTAX_INVLID%(FeatureFlagRtv[1]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=CurrentLineOfPcdItem[2],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=CurrentLineOfPcdItem[1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ExtraData=CurrentLineOfPcdItem[0])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetFeatureFlagExp(PcdItem[2])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if len(PcdItem) < 1 or len(PcdItem) > 3:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_INF_PARSER_PCD_SECTION_CONTENT_ERROR,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=CurrentLineOfPcdItem[2],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=CurrentLineOfPcdItem[1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ExtraData=CurrentLineOfPcdItem[0])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return False
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if PcdTypeItem.upper != DT.TAB_INF_FEATURE_PCD.upper():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetSupportArchList(SupArchDict[PcdTypeItem])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetSupportArchList(SupArchList)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if self.Pcds.has_key((PcdTypeItem, PcdItemObj)):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdsList = self.Pcds[PcdTypeItem, PcdItemObj]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdsList.append(PcdItemObj)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.Pcds[PcdTypeItem, PcdItemObj] = PcdsList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdsList = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdsList.append(PcdItemObj)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.Pcds[PcdTypeItem, PcdItemObj] = PcdsList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return True
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetAsBuildPcds(self, PcdContent, KeysList = None, PackageInfo = None):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for PcdItem in PcdContent:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj = InfPcdItem()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentList = PcdItem[1]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CurrentLineOfPcdItem = PcdItem[2]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItem = PcdItem[0]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentString = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for CommmentLine in CommentList:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CommentString += GetHelpStringByRemoveHashKey(CommmentLine)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetHelpStringList(CommentString)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetItemType(KeysList[0][0])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Set PcdTokenSpaceCName and CName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj = SetPcdName(PcdItem, CurrentLineOfPcdItem, PcdItemObj)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Set Value/DatumType/MaxDatumSize/Token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj = SetValueDatumTypeMaxSizeToken(PcdItem,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CurrentLineOfPcdItem,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync KeysList[0][1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PackageInfo)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdTypeItem = KeysList[0][0]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if self.Pcds.has_key((PcdTypeItem, PcdItemObj)):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdsList = self.Pcds[PcdTypeItem, PcdItemObj]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdsList.append(PcdItemObj)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.Pcds[PcdTypeItem, PcdItemObj] = PcdsList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdsList = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdsList.append(PcdItemObj)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.Pcds[PcdTypeItem, PcdItemObj] = PcdsList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetPcds(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.Pcds
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncdef ParserPcdInfoInDec(String):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ValueList = GetSplitValueList(String, DT.TAB_VALUE_SPLIT, 3)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # DatumType, Token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ValueList[2], ValueList[3]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncdef SetValueDatumTypeMaxSizeToken(PcdItem, CurrentLineOfPcdItem, PcdItemObj, Arch, PackageInfo = None):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Package information not been generated currently, we need to parser INF file to get information.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not PackageInfo:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PackageInfo = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InfFileName = CurrentLineOfPcdItem[2]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PackageInfoList = GetPackageListInfo(InfFileName, GlobalData.gWORKSPACE, -1)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for PackageInfoListItem in PackageInfoList:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PackageInfoIns = InfPackageItem()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PackageInfoIns.SetPackageName(PackageInfoListItem)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PackageInfo.append(PackageInfoIns)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdInfoInDecHasFound = False
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for PackageItem in PackageInfo:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if PcdInfoInDecHasFound:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PackageName = PackageItem.PackageName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Open DEC file to get information
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FullFileName = os.path.normpath(os.path.realpath(os.path.join(GlobalData.gWORKSPACE, PackageName)))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DecParser = Dec(FullFileName)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Find PCD information.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DecPcdsDict = DecParser.GetPcdSectionObject().ValueDict
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for Key in DecPcdsDict.keys():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Key[0] == 'PCDSDYNAMICEX' and PcdItemObj.GetItemType() == 'PcdEx') and \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (Key[1] == 'COMMON' or Key[1] == Arch):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for PcdInDec in DecPcdsDict[Key]:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if PcdInDec.TokenCName == PcdItemObj.CName and \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdInDec.TokenSpaceGuidCName == PcdItemObj.TokenSpaceGuidCName:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetToken(PcdInDec.TokenValue)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetDatumType(PcdInDec.DatumType)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetSupportArchList([Arch])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Key[0] == 'PCDSPATCHABLEINMODULE' and PcdItemObj.GetItemType() == 'PatchPcd') and \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (Key[1] == 'COMMON' or Key[1] == Arch):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for PcdInDec in DecPcdsDict[Key]:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if PcdInDec.TokenCName == PcdItemObj.CName and \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdInDec.TokenSpaceGuidCName == PcdItemObj.TokenSpaceGuidCName:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetToken(PcdInDec.TokenValue)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetDatumType(PcdInDec.DatumType)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetSupportArchList([Arch])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if PcdItemObj.GetDatumType() == 'VOID*':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetMaxDatumSize('%s'%(len(GetSplitValueList(PcdItem[1], DT.TAB_COMMA_SPLIT))))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DecGuidsDict = DecParser.GetGuidSectionObject().ValueDict
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for Key in DecGuidsDict.keys():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if Key == 'COMMON' or Key == Arch:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for GuidInDec in DecGuidsDict[Key]:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if GuidInDec.GuidCName == PcdItemObj.TokenSpaceGuidCName:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetTokenSpaceGuidValue(GuidInDec.GuidString)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Validate Value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ValidatePcdValueOnDatumType(PcdItem[1], PcdItemObj.GetDatumType()):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetDefaultValue(PcdItem[1])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_ASBUILD_PCD_VALUE_INVALID%("\"" + PcdItem[1] + "\"", "\"" +
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.GetDatumType() + "\""),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=CurrentLineOfPcdItem[2],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=CurrentLineOfPcdItem[1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ExtraData=CurrentLineOfPcdItem[0])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # validate offset
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if PcdItemObj.GetItemType().upper() == DT.TAB_INF_PATCH_PCD.upper():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not IsHexDigitUINT32(PcdItem[2]):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_ASBUILD_PCD_OFFSET_FORMAT_INVALID%("\"" + PcdItem[2] + "\""),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=CurrentLineOfPcdItem[2],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=CurrentLineOfPcdItem[1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ExtraData=CurrentLineOfPcdItem[0])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetOffset(PcdItem[2])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if PcdItemObj.GetToken() == '' or PcdItemObj.GetDatumType() == '':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_ASBUILD_PCD_DECLARITION_MISS%("\"" + PcdItem[0] + "\""),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=CurrentLineOfPcdItem[2],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=CurrentLineOfPcdItem[1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ExtraData=CurrentLineOfPcdItem[0])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return PcdItemObj
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncdef ValidatePcdValueOnDatumType(Value, Type):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Value = Value.strip()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Boolean type only allow 0x00 or 0x01 as value per INF spec
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if Type == 'BOOLEAN':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not (Value == '0x00' or Value == '0x01'):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return False
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync elif Type == 'VOID*':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not Value.startswith("{"):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return False
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not Value.endswith("}"):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return False
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Strip "{" at head and "}" at tail.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Value = Value[1:-1]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ValueList = GetSplitValueList(Value, DT.TAB_COMMA_SPLIT)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ReIsValidHexByte = re.compile("^0x[0-9a-f]{1,2}$", re.IGNORECASE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for ValueItem in ValueList:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not ReIsValidHexByte.match(ValueItem):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return False
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync elif Type == 'UINT8' or Type == 'UINT16' or Type == 'UINT32' or Type == 'UINT64':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ReIsValidUint8z = re.compile('^0[x|X][a-fA-F0-9]{2}$')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ReIsValidUint16z = re.compile('^0[x|X][a-fA-F0-9]{4}$')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ReIsValidUint32z = re.compile('^0[x|X][a-fA-F0-9]{8}$')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ReIsValidUint64z = re.compile('^0[x|X][a-fA-F0-9]{16}$')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not ReIsValidUint8z.match(Value) and Type == 'UINT8':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return False
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync elif not ReIsValidUint16z.match(Value) and Type == 'UINT16':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return False
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync elif not ReIsValidUint32z.match(Value) and Type == 'UINT32':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return False
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync elif not ReIsValidUint64z.match(Value) and Type == 'UINT64':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return False
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Since we assume the DEC file always correct, should never go to here.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync pass
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return True
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncdef SetPcdName(PcdItem, CurrentLineOfPcdItem, PcdItemObj):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Only PCD Name specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # <PcdName> ::= <TokenSpaceGuidCName> "." <TokenCName>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdId = GetSplitValueList(PcdItem[0], DT.TAB_SPLIT)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if len(PcdId) != 2:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_INF_PARSER_PCD_NAME_FORMAT_ERROR,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=CurrentLineOfPcdItem[2],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=CurrentLineOfPcdItem[1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ExtraData=CurrentLineOfPcdItem[0])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Validate PcdTokenSpaceGuidCName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not IsValidCVariableName(PcdId[0]):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_INF_PARSER_PCD_CVAR_GUID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=CurrentLineOfPcdItem[2],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=CurrentLineOfPcdItem[1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ExtraData=PcdId[0])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not IsValidCVariableName(PcdId[1]):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_INF_PARSER_PCD_CVAR_PCDCNAME,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=CurrentLineOfPcdItem[2],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=CurrentLineOfPcdItem[1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ExtraData=PcdId[1])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetTokenSpaceGuidCName(PcdId[0])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdItemObj.SetCName(PcdId[1])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return PcdItemObj