From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.126; helo=mga18.intel.com; envelope-from=liming.gao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) (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 07E6821F0DA76 for ; Fri, 2 Mar 2018 20:07:25 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Mar 2018 20:13:35 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.47,415,1515484800"; d="scan'208";a="208473398" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga005.fm.intel.com with ESMTP; 02 Mar 2018 20:13:35 -0800 Received: from fmsmsx114.amr.corp.intel.com (10.18.116.8) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 2 Mar 2018 20:13:34 -0800 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX114.amr.corp.intel.com (10.18.116.8) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 2 Mar 2018 20:13:34 -0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.125]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.116]) with mapi id 14.03.0319.002; Sat, 3 Mar 2018 12:13:32 +0800 From: "Gao, Liming" To: "Feng, Bob C" , "edk2-devel@lists.01.org" Thread-Topic: [Patch] BaseTools: Pcd Value override issue. Thread-Index: AQHTsj50tvVBa5Fqx0ygqiox8rsgKqO9517Q Date: Sat, 3 Mar 2018 04:13:32 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E1D6AC9@SHSMSX104.ccr.corp.intel.com> References: <20180302155156.11660-1-bob.c.feng@intel.com> In-Reply-To: <20180302155156.11660-1-bob.c.feng@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch] BaseTools: Pcd Value override issue. 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: Sat, 03 Mar 2018 04:07:26 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Liming Gao > -----Original Message----- > From: Feng, Bob C > Sent: Friday, March 2, 2018 11:52 PM > To: edk2-devel@lists.01.org > Cc: Feng, Bob C ; Gao, Liming > Subject: [Patch] BaseTools: Pcd Value override issue. >=20 > For the case that the structure PCD has no value assignment in DSC, > but has value assignment in command line. >=20 > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Bob Feng > Cc: Liming Gao > --- > BaseTools/Source/Python/Workspace/DscBuildData.py | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) >=20 > diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTool= s/Source/Python/Workspace/DscBuildData.py > index cd633e964d..9d787702c2 100644 > --- a/BaseTools/Source/Python/Workspace/DscBuildData.py > +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py > @@ -1264,10 +1264,12 @@ class DscBuildData(PlatformBuildClassObject): > else: > MaxSize =3D max([len(Pcd.DefaultValue),MaxSi= ze]) > Pcd.MaxDatumSize =3D str(MaxSize) > else: > PcdInDec =3D self.DecPcds.get((Name,Guid)) > + if isinstance(PcdInDec,StructurePcd): > + PcdInDec.PcdValueFromComm =3D NoFiledValues[(Guid,Na= me)][0] > if PcdInDec: > if PcdInDec.Type in [self._PCD_TYPE_STRING_[MODEL_PC= D_FIXED_AT_BUILD], > self._PCD_TYPE_STRING_[MODEL_PCD= _PATCHABLE_IN_MODULE]]: > self.Pcds[Name, Guid] =3D copy.deepcopy(PcdInDec= ) > self.Pcds[Name, Guid].DefaultValue =3D NoFiledVa= lues[( Guid,Name)][0] > @@ -1667,30 +1669,30 @@ class DscBuildData(PlatformBuildClassObject): > CApp =3D CApp + ' __FLEXIBLE_SIZE(*Size= , %s, %s, %d); // From %s Line %d Value %s \n' % > (Pcd.DatumType, FieldName.strip("."), ArrayIndex + 1, FieldList[FieldName= _ori][1], FieldList[FieldName_ori][2], > FieldList[FieldName_ori][0]) > if Pcd.PcdFieldValueFromComm: > CApp =3D CApp + "// From Command Line \n" > for FieldName in Pcd.PcdFieldValueFromComm: > FieldName =3D "." + FieldName > - IsArray =3D self.IsFieldValueAnArray(FieldList[FieldName.str= ip(".")][0]) > - if IsArray and not (FieldList[FieldName.strip(".")][0].start= swith('{GUID') and > FieldList[FieldName.strip(".")][0].endswith('}')): > + IsArray =3D self.IsFieldValueAnArray(Pcd.PcdFieldValueFromCo= mm[FieldName.strip(".")][0]) > + if IsArray and not (Pcd.PcdFieldValueFromComm[FieldName.stri= p(".")][0].startswith('{GUID') and > Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0].endswith('}')): > try: > - Value =3D ValueExpressionEx(FieldList[FieldName.stri= p(".")][0], "VOID*", self._GuidDict)(True) > + Value =3D ValueExpressionEx(Pcd.PcdFieldValueFromCom= m[FieldName.strip(".")][0], "VOID*", > self._GuidDict)(True) > except BadExpression: > EdkLogger.error('Build', FORMAT_INVALID, "Invalid va= lue format for %s. From %s Line %d " % > - (".".join((Pcd.TokenSpaceGuidCName, = Pcd.TokenCName, FieldName.strip('.'))), > FieldList[FieldName.strip(".")][1], FieldList[FieldName.strip(".")][2])) > + (".".join((Pcd.TokenSpaceGuidCName, = Pcd.TokenCName, FieldName.strip('.'))), > Pcd.PcdFieldValueFromComm[FieldName.strip(".")][1], Pcd.PcdFieldValueFrom= Comm[FieldName.strip(".")][2])) > Value, ValueSize =3D ParseFieldValue(Value) > - CApp =3D CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d / _= _ARRAY_ELEMENT_SIZE(%s, %s) + ((%d %% > __ARRAY_ELEMENT_SIZE(%s, %s)) ? 1 : 0)); // From %s Line %d Value %s\n' %= (Pcd.DatumType, FieldName.strip("."), ValueSize, > Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, FieldName.= strip("."), FieldList[FieldName.strip(".")][1], > FieldList[FieldName.strip(".")][2], FieldList[FieldName.strip(".")][0]); > + CApp =3D CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d / _= _ARRAY_ELEMENT_SIZE(%s, %s) + ((%d %% > __ARRAY_ELEMENT_SIZE(%s, %s)) ? 1 : 0)); // From %s Line %d Value %s\n' %= (Pcd.DatumType, FieldName.strip("."), ValueSize, > Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, FieldName.= strip("."), > Pcd.PcdFieldValueFromComm[FieldName.strip(".")][1], Pcd.PcdFieldValueFrom= Comm[FieldName.strip(".")][2], > Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0]); > else: > NewFieldName =3D '' > FieldName_ori =3D FieldName.strip('.') > while '[' in FieldName: > NewFieldName =3D NewFieldName + FieldName.split('[',= 1)[0] + '[0]' > ArrayIndex =3D int(FieldName.split('[', 1)[1].split(= ']', 1)[0]) > FieldName =3D FieldName.split(']', 1)[1] > FieldName =3D NewFieldName + FieldName > while '[' in FieldName: > FieldName =3D FieldName.rsplit('[', 1)[0] > - CApp =3D CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d= ); // From %s Line %d Value %s \n' % (Pcd.DatumType, > FieldName.strip("."), ArrayIndex + 1, FieldList[FieldName_ori][1], FieldL= ist[FieldName_ori][2], FieldList[FieldName_ori][0]) > + CApp =3D CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d= ); // From %s Line %d Value %s \n' % (Pcd.DatumType, > FieldName.strip("."), ArrayIndex + 1, Pcd.PcdFieldValueFromComm[FieldName= _ori][1], > Pcd.PcdFieldValueFromComm[FieldName_ori][2], Pcd.PcdFieldValueFromComm[Fi= eldName_ori][0]) > CApp =3D CApp + " *Size =3D (%d > *Size ? %d : *Size); // The P= cd maxsize is %d \n" % > (self.GetPcdMaxSize(Pcd),self.GetPcdMaxSize(Pcd),self.GetPcdMaxSize(Pcd)) > CApp =3D CApp + "}\n" > return CApp > def GenerateSizeStatments(self,Pcd): > CApp =3D ' Size =3D sizeof(%s);\n' % (Pcd.DatumType) > -- > 2.14.3.windows.1