From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.43; helo=mga05.intel.com; envelope-from=yonghong.zhu@intel.com; receiver=edk2-devel@lists.01.org Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 281F6223972A6 for ; Tue, 6 Feb 2018 16:24:33 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Feb 2018 16:30:16 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,471,1511856000"; d="scan'208";a="32660521" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga002.jf.intel.com with ESMTP; 06 Feb 2018 16:30:16 -0800 Received: from fmsmsx102.amr.corp.intel.com (10.18.124.200) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 6 Feb 2018 16:30:16 -0800 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by FMSMSX102.amr.corp.intel.com (10.18.124.200) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 6 Feb 2018 16:30:15 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.116]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.253]) with mapi id 14.03.0319.002; Wed, 7 Feb 2018 08:30:13 +0800 From: "Zhu, Yonghong" To: "Feng, YunhuaX" , "edk2-devel@lists.01.org" CC: "Gao, Liming" , "Zhu, Yonghong" Thread-Topic: [PATCH] BaseTools: Fix build argument --pcd for flexible format bugs Thread-Index: AdOeK1ncW6JNASeUScilPpiS2neKVQBf3asw Date: Wed, 7 Feb 2018 00:30:13 +0000 Message-ID: References: <47C64442C08CCD4089DC43B6B5E46BC4829625@shsmsx102.ccr.corp.intel.com> In-Reply-To: <47C64442C08CCD4089DC43B6B5E46BC4829625@shsmsx102.ccr.corp.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH] BaseTools: Fix build argument --pcd for flexible format bugs X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Feb 2018 00:24:34 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Yonghong Zhu =20 Best Regards, Zhu Yonghong -----Original Message----- From: Feng, YunhuaX=20 Sent: Monday, February 05, 2018 11:43 AM To: edk2-devel@lists.01.org Cc: Zhu, Yonghong ; Gao, Liming Subject: [PATCH] BaseTools: Fix build argument --pcd for flexible format bu= gs Build argument --pcd flexible format, like as: 1. VOID* type gTokenSpaceGuid.Test=3DH"{flexible format}" gTokenSpaceGuid.Test=3DL"string" gTokenSpaceGuid.Test=3D"string" gTokenSpaceGuid.Test=3DL'string' gTokenSpaceGuid.Test=3D'string' 2. UINT8/UINT16/UINT32/UINT64 type gTokenSpaceGuid.Test=3DH"{flexible format}" gTokenSpaceGuid.Test=3DL"string" gTokenSpaceGuid.Test=3D"string" gTokenSpaceGuid.Test=3DL'string' gTokenSpaceGuid.Test=3D'string' In linux, single quotes need escape gTokenSpaceGuid.Test=3DL\'string\' gTokenSpaceGuid.Test=3D\'string\' Cc: Liming Gao Cc: Yonghong Zhu Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Yunhua Feng --- BaseTools/Source/Python/AutoGen/GenMake.py | 2 + BaseTools/Source/Python/Common/Misc.py | 4 +- BaseTools/Source/Python/Workspace/DscBuildData.py | 73 +++++++++++++++++++= ++-- 3 files changed, 72 insertions(+), 7 deletions(-) diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/= Python/AutoGen/GenMake.py index 7d3374a493..9df5d8e2d7 100644 --- a/BaseTools/Source/Python/AutoGen/GenMake.py +++ b/BaseTools/Source/Python/AutoGen/GenMake.py @@ -1554,6 +1554,8 @@ class TopLevelMakefile(BuildFile): if pcdValue.startswith('H'): pcdValue =3D 'H' + '"' + pcdValue[1:] + '"' ExtraOption +=3D " --pcd " + pcdName + '=3D' + pcd= Value + elif pcdValue.startswith("L'"): + ExtraOption +=3D "--pcd " + pcdName + '=3D' +=20 + pcdValue elif pcdValue.startswith('L'): pcdValue =3D 'L' + '"' + pcdValue[1:] + '"' ExtraOption +=3D " --pcd " + pcdName + '=3D' + pcd= Value diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Sourc= e/Python/Common/Misc.py index d80f645d2e..b8c2ce1ddc 100644 --- a/BaseTools/Source/Python/Common/Misc.py +++ b/BaseTools/Source/Python/Common/Misc.py @@ -2353,10 +2353,10 @@ def PackRegistryFormatGuid(Guid): =20 def BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumTyp= e, Value): if PcdDatumType not in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64,= 'BOOLEAN']: - if Value.startswith('L'): + if Value.startswith('L') or Value.startswith('"'): if not Value[1]: EdkLogger.error("build", FORMAT_INVALID, 'For Void* type P= CD, when specify the Value in the command line, please use the following fo= rmat: "string", L"string", H"{...}"') - Value =3D Value[0] + '"' + Value[1:] + '"' + Value =3D Value elif Value.startswith('H'): if not Value[1]: EdkLogger.error("build", FORMAT_INVALID, 'For Void* type P= CD, when specify the Value in the command line, please use the following fo= rmat: "string", L"string", H"{...}"') diff --git a/BaseTools/Source/Python/= Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.= py index 1da4f03ab8..d9165f2ac7 100644 --- a/BaseTools/Source/Python/Workspace/DscBuildData.py +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py @@ -999,10 +999,39 @@ class DscBuildData(PlatformBuildClassObject): try: pcdvalue =3D ValueExpressionEx(pcd= value[1:], PcdDatumType, self._GuidDict)(True) except BadExpression, Value: - if Value.result > 1: - EdkLogger.error('Parser', FORM= AT_INVALID, 'PCD [%s.%s] Value "%s", %s' % - (TokenSpaceGui= dCName, TokenCName, pcdvalue, Value)) - pcdvalue =3D 'H' + pcdvalue + EdkLogger.error('Parser', FORMAT_I= NVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCNa= me, TokenCName, pcdvalue, Value)) + if PcdDatumType =3D=3D "VOID*": + pcdvalue =3D 'H' + pcdvalue + elif pcdvalue.startswith("L'"): + try: + pcdvalue =3D ValueExpressionEx(pcd= value, PcdDatumType, self._GuidDict)(True) + except BadExpression, Value: + EdkLogger.error('Parser', FORMAT_I= NVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCNa= me, TokenCName, pcdvalue, Value)) + if pcdvalue.startswith('{'): + pcdvalue =3D 'H' + pcdvalue + elif pcdvalue.startswith("'"): + try: + pcdvalue =3D ValueExpressionEx(pcd= value, PcdDatumType, self._GuidDict)(True) + except BadExpression, Value: + EdkLogger.error('Parser', FORMAT_I= NVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCNa= me, TokenCName, pcdvalue, Value)) + if pcdvalue.startswith('{'): + pcdvalue =3D 'H' + pcdvalue + elif pcdvalue.startswith('L'): + pcdvalue =3D 'L"' + pcdvalue[1:] + '"' + try: + pcdvalue =3D ValueExpressionEx(pcd= value, PcdDatumType, self._GuidDict)(True) + except BadExpression, Value: + EdkLogger.error('Parser', FORMAT_I= NVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCNa= me, TokenCName, pcdvalue, Value)) + else: + try: + pcdvalue =3D ValueExpressionEx(pcd= value, PcdDatumType, self._GuidDict)(True) + except BadExpression, Value: + EdkLogger.error('Parser', FORMAT_I= NVALID, 'PCD [%s.%s] Value "%s", %s' % + =20 + (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) NewValue =3D BuildOptionPcdValueFormat(Tok= enSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue) FoundFlag =3D True else: @@ -1018,7 +1047,41 @@ class DscBuildData(PlatformBuildClassObject): except BadExpression, Value: EdkLogger.error('Parser', = FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % (TokenSpac= eGuidCName, TokenCName, pcdvalue, Value)) - pcdvalue =3D 'H' + pcdvalue + if PcdDatumType =3D=3D "VOID*"= : + pcdvalue =3D 'H' + pcdvalu= e + elif pcdvalue.startswith("L'"): + try: + pcdvalue =3D ValueExpressi= onEx(pcdvalue, PcdDatumType, self._GuidDict)( + True) + except BadExpression, Value: + EdkLogger.error('Parser', = FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpac= eGuidCName, TokenCName, pcdvalue, Value)) + if pcdvalue.startswith('{'): + pcdvalue =3D 'H' + pcdvalu= e + elif pcdvalue.startswith("'"): + try: + pcdvalue =3D ValueExpressi= onEx(pcdvalue, PcdDatumType, self._GuidDict)( + True) + except BadExpression, Value: + EdkLogger.error('Parser', = FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpac= eGuidCName, TokenCName, pcdvalue, Value)) + if pcdvalue.startswith('{'): + pcdvalue =3D 'H' + pcdvalu= e + elif pcdvalue.startswith('L'): + pcdvalue =3D 'L"' + pcdvalue[1= :] + '"' + try: + pcdvalue =3D ValueExpressi= onEx(pcdvalue, PcdDatumType, self._GuidDict)( + True) + except BadExpression, Value: + EdkLogger.error('Parser', = FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpac= eGuidCName, TokenCName, pcdvalue, Value)) + else: + try: + pcdvalue =3D ValueExpressi= onEx(pcdvalue, PcdDatumType, self._GuidDict)(True) + except BadExpression, Value: + EdkLogger.error('Parser', = FORMAT_INVALID, + 'PCD [%s.%= s] Value "%s", %s' % + =20 + (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) NewValue =3D BuildOptionPcdValueFo= rmat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue) FoundFlag =3D True else: -- 2.12.2.windows.2