From nobody Sun May 5 05:33:51 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail(p=none dis=none) header.from=intel.com Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1526821057442362.7215288972642; Sun, 20 May 2018 05:57:37 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 31C2220985992; Sun, 20 May 2018 05:57:36 -0700 (PDT) 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 5729620985988 for ; Sun, 20 May 2018 05:57:35 -0700 (PDT) Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 May 2018 05:57:34 -0700 Received: from shwdeopenpsi168.ccr.corp.intel.com ([10.239.158.129]) by orsmga007.jf.intel.com with ESMTP; 20 May 2018 05:57:33 -0700 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.126; helo=mga18.intel.com; envelope-from=yonghong.zhu@intel.com; receiver=edk2-devel@lists.01.org X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,423,1520924400"; d="scan'208";a="42417621" From: Yonghong Zhu To: edk2-devel@lists.01.org Date: Sun, 20 May 2018 20:57:32 +0800 Message-Id: <1526821052-34192-1-git-send-email-yonghong.zhu@intel.com> X-Mailer: git-send-email 2.6.1.windows.1 Subject: [edk2] [Patch] BaseTools: Report more clear error message when PCD type mismatch X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Yunhua Feng , Liming Gao MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" From: Yunhua Feng Error message is not clear when PCD type defined in driver's Library is different with PCD type defined in DSC components or PCD type defined in DSC PCD section. Case as below: DSC: [PcdsFixedAtBuild] PcdToken.PcdCName | "A" [Components] TestPkg/TestDriver.inf { PcdToken.PcdCName | "B" } Library: [Pcd] PcdToken.PcdCName Cc: Liming Gao Cc: Yonghong Zhu Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Yunhua Feng Reviewed-by: Yonghong Zhu =20 --- BaseTools/Source/Python/AutoGen/AutoGen.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/= Python/AutoGen/AutoGen.py index 1715101..584971e 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -2330,11 +2330,11 @@ class PlatformAutoGen(AutoGen): ## Override PCD setting (type, value, ...) # # @param ToPcd The PCD to be overrided # @param FromPcd The PCD overrideing from # - def _OverridePcd(self, ToPcd, FromPcd, Module=3D""): + def _OverridePcd(self, ToPcd, FromPcd, Module=3D"", Msg=3D"", Library= =3D""): # # in case there's PCDs coming from FDF file, which have no type gi= ven. # at this point, ToPcd.Type has the type found from dependent # package # @@ -2350,14 +2350,16 @@ class PlatformAutoGen(AutoGen): and (ToPcd.Type !=3D FromPcd.Type) and (ToPcd.Type in From= Pcd.Type): if ToPcd.Type.strip() =3D=3D TAB_PCDS_DYNAMIC_EX: ToPcd.Type =3D FromPcd.Type elif ToPcd.Type and FromPcd.Type \ and ToPcd.Type !=3D FromPcd.Type: + if Library: + Module =3D str(Module) + " 's library file (" + str(Li= brary) + ")" EdkLogger.error("build", OPTION_CONFLICT, "Mismatched PCD = type", - ExtraData=3D"%s.%s is defined as [%s] in m= odule %s, but as [%s] in platform."\ + ExtraData=3D"%s.%s is used as [%s] in modu= le %s, but as [%s] in %s."\ % (ToPcd.TokenSpaceGuidCName, To= kenCName, - ToPcd.Type, Module, FromPcd.T= ype), + ToPcd.Type, Module, FromPcd.T= ype, Msg), File=3Dself.MetaFile) =20 if FromPcd.MaxDatumSize: ToPcd.MaxDatumSize =3D FromPcd.MaxDatumSize ToPcd.MaxSizeUserSet =3D FromPcd.MaxDatumSize @@ -2414,21 +2416,21 @@ class PlatformAutoGen(AutoGen): # # @param Module The module from which the PCD setting will be over= rided # # @retval PCD_list The list PCDs with settings from platform # - def ApplyPcdSetting(self, Module, Pcds): + def ApplyPcdSetting(self, Module, Pcds, Library=3D""): # for each PCD in module for Name, Guid in Pcds: PcdInModule =3D Pcds[Name, Guid] # find out the PCD setting in platform if (Name, Guid) in self.Platform.Pcds: PcdInPlatform =3D self.Platform.Pcds[Name, Guid] else: PcdInPlatform =3D None # then override the settings if any - self._OverridePcd(PcdInModule, PcdInPlatform, Module) + self._OverridePcd(PcdInModule, PcdInPlatform, Module, Msg=3D"D= SC PCD sections", Library=3DLibrary) # resolve the VariableGuid value for SkuId in PcdInModule.SkuInfoList: Sku =3D PcdInModule.SkuInfoList[SkuId] if Sku.VariableGuid =3D=3D '': continue Sku.VariableGuidValue =3D GuidValue(Sku.VariableGuid, self= .PackageList, self.MetaFile.Path) @@ -2456,11 +2458,11 @@ class PlatformAutoGen(AutoGen): if PcdItem in Pcds: ToPcd =3D Pcds[PcdItem] Flag =3D True break if Flag: - self._OverridePcd(ToPcd, PlatformModule.Pcds[Key], Mod= ule) + self._OverridePcd(ToPcd, PlatformModule.Pcds[Key], Mod= ule, Msg=3D"DSC Components Module scoped PCD section", Library=3DLibrary) # use PCD value to calculate the MaxDatumSize when it is not speci= fied for Name, Guid in Pcds: Pcd =3D Pcds[Name, Guid] if Pcd.DatumType =3D=3D TAB_VOID and not Pcd.MaxDatumSize: Pcd.MaxSizeUserSet =3D None @@ -3669,19 +3671,21 @@ class ModuleAutoGen(AutoGen): def _GetLibraryPcdList(self): if self._LibraryPcdList is None: Pcds =3D OrderedDict() if not self.IsLibrary: # get PCDs from dependent libraries + self._LibraryPcdList =3D [] for Library in self.DependentLibraryList: + PcdsInLibrary =3D OrderedDict() self.UpdateComments(self._PcdComments, Library.PcdComm= ents) for Key in Library.Pcds: # skip duplicated PCDs if Key in self.Module.Pcds or Key in Pcds: continue Pcds[Key] =3D copy.copy(Library.Pcds[Key]) - # apply PCD settings from platform - self._LibraryPcdList =3D self.PlatformInfo.ApplyPcdSetting= (self.Module, Pcds) + PcdsInLibrary[Key] =3D Pcds[Key] + self._LibraryPcdList.extend(self.PlatformInfo.ApplyPcd= Setting(self.Module, PcdsInLibrary, Library=3DLibrary)) else: self._LibraryPcdList =3D [] return self._LibraryPcdList =20 ## Get the GUID value mapping --=20 2.6.1.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel