Re: [edk2] [Patch] BaseTools: Support PCD flexible values format
Reviewed-by: Liming Gao <liming@intel.com> >-Original Message- >From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of >Yonghong Zhu >Sent: Wednesday, December 27, 2017 1:24 PM >To: edk2-devel@lists.01.org >Cc: Feng, YunhuaX <yunhuax.f...@intel.com> >Subject: [edk2] [Patch] BaseTools: Support PCD flexible values format > >https://bugzilla.tianocore.org/show_bug.cgi?id=541 > >Contributed-under: TianoCore Contribution Agreement 1.1 >Signed-off-by: Yunhua Feng <yunhuax.f...@intel.com> >Signed-off-by: Yonghong Zhu <yonghong@intel.com> >--- > BaseTools/Source/Python/AutoGen/AutoGen.py | 39 > BaseTools/Source/Python/AutoGen/GenC.py| 2 + > BaseTools/Source/Python/Common/Expression.py | 246 >- > BaseTools/Source/Python/Common/Misc.py | 203 + > BaseTools/Source/Python/Workspace/DscBuildData.py | 16 +- > BaseTools/Source/Python/Workspace/InfBuildData.py | 7 + > .../Source/Python/Workspace/MetaFileParser.py | 17 +- > .../Source/Python/Workspace/WorkspaceCommon.py | 8 +- > BaseTools/Source/Python/build/BuildReport.py | 6 + > 9 files changed, 430 insertions(+), 114 deletions(-) > >diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py >b/BaseTools/Source/Python/AutoGen/AutoGen.py >index cacd009..8be5bfc 100644 >--- a/BaseTools/Source/Python/AutoGen/AutoGen.py >+++ b/BaseTools/Source/Python/AutoGen/AutoGen.py >@@ -269,10 +269,11 @@ class WorkspaceAutoGen(AutoGen): > self.AutoGenObjectList = [] > self._BuildDir = None > self._FvDir = None > self._MakeFileDir = None > self._BuildCommand = None >+self._GuidDict = {} > > # there's many relative directory operations, so ... > os.chdir(self.WorkspaceDir) > > # >@@ -417,24 +418,42 @@ class WorkspaceAutoGen(AutoGen): > TokenSpaceGuidCNameList = [] > FoundFlag = False > PcdDatumType = '' > NewValue = '' > for package in PGen.PackageList: >+Guids = package.Guids >+self._GuidDict.update(Guids) >+for package in PGen.PackageList: > for key in package.Pcds: > PcdItem = package.Pcds[key] > if HasTokenSpace: > if (PcdItem.TokenCName, > PcdItem.TokenSpaceGuidCName) >== (TokenCName, TokenSpaceGuidCName): > PcdDatumType = PcdItem.DatumType >+if pcdvalue.startswith('H'): >+try: >+pcdvalue = >ValueExpressionEx(pcdvalue[1:], >PcdDatumType, self._GuidDict)(True) >+except BadExpression, Value: >+if Value.result > 1: >+EdkLogger.error('Parser', >FORMAT_INVALID, 'PCD >[%s.%s] Value "%s", %s' % >+ >(TokenSpaceGuidCName, TokenCName, >pcdvalue, Value)) >+pcdvalue = 'H' + pcdvalue > NewValue = >BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, >PcdDatumType, pcdvalue) > FoundFlag = True > else: > if PcdItem.TokenCName == TokenCName: > if not PcdItem.TokenSpaceGuidCName in >TokenSpaceGuidCNameList: > if len (TokenSpaceGuidCNameList) < 1: > >TokenSpaceGuidCNameList.append(PcdItem.TokenSpaceGuidCName) > PcdDatumType = PcdItem.DatumType > TokenSpaceGuidCName = >PcdItem.TokenSpaceGuidCName >+if pcdvalue.startswith('H'): >+try: >+pcdvalue = >ValueExpressionEx(pcdvalue[1:], >PcdDatumType, self._GuidDict)(True) >+except BadExpression, Value: >+EdkLogger.error('Parser', >FORMAT_INVALID, 'PCD >[%s.%s] Value "%s", %s' % >+ >(TokenSpaceGuidCName, TokenCName, &g
[edk2] [Patch] BaseTools: Support PCD flexible values format
https://bugzilla.tianocore.org/show_bug.cgi?id=541 Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Yunhua FengSigned-off-by: Yonghong Zhu --- BaseTools/Source/Python/AutoGen/AutoGen.py | 39 BaseTools/Source/Python/AutoGen/GenC.py| 2 + BaseTools/Source/Python/Common/Expression.py | 246 - BaseTools/Source/Python/Common/Misc.py | 203 + BaseTools/Source/Python/Workspace/DscBuildData.py | 16 +- BaseTools/Source/Python/Workspace/InfBuildData.py | 7 + .../Source/Python/Workspace/MetaFileParser.py | 17 +- .../Source/Python/Workspace/WorkspaceCommon.py | 8 +- BaseTools/Source/Python/build/BuildReport.py | 6 + 9 files changed, 430 insertions(+), 114 deletions(-) diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index cacd009..8be5bfc 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -269,10 +269,11 @@ class WorkspaceAutoGen(AutoGen): self.AutoGenObjectList = [] self._BuildDir = None self._FvDir = None self._MakeFileDir = None self._BuildCommand = None +self._GuidDict = {} # there's many relative directory operations, so ... os.chdir(self.WorkspaceDir) # @@ -417,24 +418,42 @@ class WorkspaceAutoGen(AutoGen): TokenSpaceGuidCNameList = [] FoundFlag = False PcdDatumType = '' NewValue = '' for package in PGen.PackageList: +Guids = package.Guids +self._GuidDict.update(Guids) +for package in PGen.PackageList: for key in package.Pcds: PcdItem = package.Pcds[key] if HasTokenSpace: if (PcdItem.TokenCName, PcdItem.TokenSpaceGuidCName) == (TokenCName, TokenSpaceGuidCName): PcdDatumType = PcdItem.DatumType +if pcdvalue.startswith('H'): +try: +pcdvalue = ValueExpressionEx(pcdvalue[1:], PcdDatumType, self._GuidDict)(True) +except BadExpression, Value: +if Value.result > 1: +EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) +pcdvalue = 'H' + pcdvalue NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue) FoundFlag = True else: if PcdItem.TokenCName == TokenCName: if not PcdItem.TokenSpaceGuidCName in TokenSpaceGuidCNameList: if len (TokenSpaceGuidCNameList) < 1: TokenSpaceGuidCNameList.append(PcdItem.TokenSpaceGuidCName) PcdDatumType = PcdItem.DatumType TokenSpaceGuidCName = PcdItem.TokenSpaceGuidCName +if pcdvalue.startswith('H'): +try: +pcdvalue = ValueExpressionEx(pcdvalue[1:], PcdDatumType, self._GuidDict)(True) +except BadExpression, Value: +EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) +pcdvalue = 'H' + pcdvalue NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue) FoundFlag = True else: EdkLogger.error( 'build', @@ -2444,10 +2463,30 @@ class PlatformAutoGen(AutoGen): ToPcd.MaxDatumSize = FromPcd.MaxDatumSize if FromPcd.DatumType not in [None, '']: ToPcd.DatumType = FromPcd.DatumType if FromPcd.SkuInfoList not in [None, '', []]: