From: "Gao, Liming" <liming.gao@intel.com>
To: "Zhu, Yonghong" <yonghong.zhu@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: [Patch V2] BaseTools: enable FixedAtBuild (VOID*) PCD use in the [DEPEX] section
Date: Fri, 6 Jul 2018 02:06:46 +0000 [thread overview]
Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E2B6E1A@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <B9726D6DCCFB8B4CA276A9169B02216D520B8CEF@SHSMSX103.ccr.corp.intel.com>
Yes. It is too late. The error message says the byte value is wrong. But, it doesn't mention which PCD is wrong.
>-----Original Message-----
>From: Zhu, Yonghong
>Sent: Friday, July 06, 2018 9:58 AM
>To: Gao, Liming <liming.gao@intel.com>; edk2-devel@lists.01.org
>Cc: Zhu, Yonghong <yonghong.zhu@intel.com>
>Subject: RE: [edk2] [Patch V2] BaseTools: enable FixedAtBuild (VOID*) PCD
>use in the [DEPEX] section
>
>In GetGuidValue() function it already have this logic to handle it.
>
>Best Regards,
>Zhu Yonghong
>
>
>-----Original Message-----
>From: Gao, Liming
>Sent: Friday, July 06, 2018 9:55 AM
>To: Zhu, Yonghong <yonghong.zhu@intel.com>; edk2-devel@lists.01.org
>Subject: RE: [edk2] [Patch V2] BaseTools: enable FixedAtBuild (VOID*) PCD
>use in the [DEPEX] section
>
>Yonghong:
> On error handling, could you check VOID* PCD length to make sure its size is
>16 when it is used in [Depex] section?
>
>Thanks
>Liming
>>-----Original Message-----
>>From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of
>>Yonghong Zhu
>>Sent: Thursday, July 05, 2018 3:28 PM
>>To: edk2-devel@lists.01.org
>>Cc: Gao, Liming <liming.gao@intel.com>
>>Subject: [edk2] [Patch V2] BaseTools: enable FixedAtBuild (VOID*) PCD
>>use in the [DEPEX] section
>>
>>From: Yunhua Feng <yunhuax.feng@intel.com>
>>
>>V2: limit the PCD used in the [Depex] section should be used in the
>>module
>>
>>The PCD item used in INF [Depex] section must be defined as
>>FixedAtBuild type and VOID* datum type, and the size of the PCD must be
>16 bytes.
>>
>>Fixes: https://bugzilla.tianocore.org/show_bug.cgi?id=443
>>Cc: Liming Gao <liming.gao@intel.com>
>>Cc: Yonghong Zhu <yonghong.zhu@intel.com>
>>Contributed-under: TianoCore Contribution Agreement 1.1
>>Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com>
>>---
>> BaseTools/Source/Python/AutoGen/AutoGen.py | 31
>>++++++++++++++++++++---
>> BaseTools/Source/Python/AutoGen/GenDepex.py | 6 +++++
>> BaseTools/Source/Python/Workspace/InfBuildData.py | 15 +++++++----
>> BaseTools/Source/Python/build/BuildReport.py | 6 +++++
>> 4 files changed, 50 insertions(+), 8 deletions(-)
>>
>>diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py
>>b/BaseTools/Source/Python/AutoGen/AutoGen.py
>>index 6d76afd..7d4539e 100644
>>--- a/BaseTools/Source/Python/AutoGen/AutoGen.py
>>+++ b/BaseTools/Source/Python/AutoGen/AutoGen.py
>>@@ -2745,10 +2745,14 @@ class ModuleAutoGen(AutoGen):
>> ## Store the FixedAtBuild Pcds
>> #
>> self._FixedAtBuildPcds = []
>> self.ConstPcd = {}
>>
>>+ ##Store the VOID* type FixedAtBuild Pcds
>>+ #
>>+ self._FixedPcdVoidTypeDict = {}
>>+
>> def __repr__(self):
>> return "%s [%s]" % (self.MetaFile, self.Arch)
>>
>> # Get FixedAtBuild Pcds of this Module
>> def _GetFixedAtBuildPcds(self):
>>@@ -2758,11 +2762,20 @@ class ModuleAutoGen(AutoGen):
>> if Pcd.Type != TAB_PCDS_FIXED_AT_BUILD:
>> continue
>> if Pcd not in self._FixedAtBuildPcds:
>> self._FixedAtBuildPcds.append(Pcd)
>>
>>- return self._FixedAtBuildPcds
>>+ return self._FixedAtBuildPcds
>>+
>>+ def _GetFixedAtBuildVoidTypePcds(self):
>>+ if self._FixedPcdVoidTypeDict:
>>+ return self._FixedPcdVoidTypeDict
>>+ for Pcd in self.ModulePcdList:
>>+ if Pcd.Type == TAB_PCDS_FIXED_AT_BUILD and Pcd.DatumType
>>+ ==
>>TAB_VOID:
>>+ if '{}.{}'.format(Pcd.TokenSpaceGuidCName,
>>+ Pcd.TokenCName) not
>>in self._FixedPcdVoidTypeDict:
>>+
>>self._FixedPcdVoidTypeDict['{}.{}'.format(Pcd.TokenSpaceGuidCName,
>>Pcd.TokenCName)] = Pcd.DefaultValue
>>+ return self._FixedPcdVoidTypeDict
>>
>> def _GetUniqueBaseName(self):
>> BaseName = self.Name
>> for Module in self.PlatformInfo.ModuleAutoGenList:
>> if Module.MetaFile == self.MetaFile:
>>@@ -3029,11 +3042,11 @@ class ModuleAutoGen(AutoGen):
>> self._DepexDict = {}
>> if self.DxsFile or self.IsLibrary or
>>TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes:
>> return self._DepexDict
>>
>> self._DepexDict[self.ModuleType] = []
>>-
>>+ self._GetFixedAtBuildVoidTypePcds()
>> for ModuleType in self._DepexDict:
>> DepexList = self._DepexDict[ModuleType]
>> #
>> # Append depex from dependent libraries, if not "BEFORE", "AFTER"
>>expresion
>> #
>>@@ -3041,11 +3054,22 @@ class ModuleAutoGen(AutoGen):
>> Inherited = False
>> for D in M.Depex[self.Arch, ModuleType]:
>> if DepexList != []:
>> DepexList.append('AND')
>> DepexList.append('(')
>>- DepexList.extend(D)
>>+ #replace D with value if D is FixedAtBuild PCD
>>+ NewList = []
>>+ for item in D:
>>+ if '.' not in item:
>>+ NewList.append(item)
>>+ else:
>>+ if item not in self._FixedPcdVoidTypeDict:
>>+ EdkLogger.error("build",
>>+ FORMAT_INVALID, "{} used in
>>[Depex] section should be used as FixedAtBuild type and VOID* datum
>>type in the module.".format(item))
>>+ else:
>>+ Value = self._FixedPcdVoidTypeDict[item]
>>+ NewList.append(Value)
>>+ DepexList.extend(NewList)
>> if DepexList[-1] == 'END': # no need of a END at this time
>> DepexList.pop()
>> DepexList.append(')')
>> Inherited = True
>> if Inherited:
>>@@ -4409,10 +4433,11 @@ class ModuleAutoGen(AutoGen):
>> BuildOptionIncPathList = property(_GetBuildOptionIncPathList)
>> BuildCommand = property(_GetBuildCommand)
>>
>> FixedAtBuildPcds = property(_GetFixedAtBuildPcds)
>> UniqueBaseName = property(_GetUniqueBaseName)
>>+ FixedVoidTypePcds = property(_GetFixedAtBuildVoidTypePcds)
>>
>> # This acts like the main() function for the script, unless it is
>>'import'ed into another script.
>> if __name__ == '__main__':
>> pass
>>
>>diff --git a/BaseTools/Source/Python/AutoGen/GenDepex.py
>>b/BaseTools/Source/Python/AutoGen/GenDepex.py
>>index d3b1eae..c12b613 100644
>>--- a/BaseTools/Source/Python/AutoGen/GenDepex.py
>>+++ b/BaseTools/Source/Python/AutoGen/GenDepex.py
>>@@ -20,10 +20,12 @@ from Common.LongFilePathSupport import
>>OpenLongFilePath as open from io import BytesIO from struct import
>>pack from Common.BuildToolError import * from Common.Misc import
>>SaveFileOnChange from Common.Misc import
>>GuidStructureStringToGuidString
>>+from Common.Misc import GuidStructureByteArrayToGuidString
>>+from Common.Misc import GuidStringToGuidStructureString
>> from Common import EdkLogger as EdkLogger from Common.BuildVersion
>> import gBUILD_VERSION from Common.DataType import *
>>
>> ## Regular expression for matching "DEPENDENCY_START ...
>>DEPENDENCY_END"
>>@@ -331,10 +333,14 @@ class DependencyExpression:
>> # @retval array The byte array representing the GUID value
>> #
>> def GetGuidValue(self, Guid):
>> GuidValueString = Guid.replace("{", "").replace("}", "").replace(" ", "")
>> GuidValueList = GuidValueString.split(",")
>>+ if len(GuidValueList) != 11 and len(GuidValueList) == 16:
>>+ GuidValueString =
>>GuidStringToGuidStructureString(GuidStructureByteArrayToGuidString(Guid
>>))
>>+ GuidValueString = GuidValueString.replace("{",
>>+ "").replace("}",
>>"").replace(" ", "")
>>+ GuidValueList = GuidValueString.split(",")
>> if len(GuidValueList) != 11:
>> EdkLogger.error("GenDepex", PARSER_ERROR, "Invalid GUID
>>value string or opcode: %s" % Guid)
>> return pack("1I2H8B", *(int(value, 16) for value in
>>GuidValueList))
>>
>> ## Save the binary form of dependency expression in file diff
>>--git a/BaseTools/Source/Python/Workspace/InfBuildData.py
>>b/BaseTools/Source/Python/Workspace/InfBuildData.py
>>index 165e03f..efb3de1 100644
>>--- a/BaseTools/Source/Python/Workspace/InfBuildData.py
>>+++ b/BaseTools/Source/Python/Workspace/InfBuildData.py
>>@@ -909,16 +909,21 @@ class InfBuildData(ModuleBuildClassObject):
>> if Module is None:
>> EdkLogger.error('build',
>>RESOURCE_NOT_AVAILABLE, "Module is not found in active platform",
>> ExtraData=Token, File=self.MetaFile, Line=Record[-1])
>> DepexList.append(Module.Guid)
>> else:
>>- # get the GUID value now
>>- Value = ProtocolValue(Token, self.Packages, self.MetaFile.Path)
>>- if Value is None:
>>- Value = PpiValue(Token, self.Packages, self.MetaFile.Path)
>>+ # it use the Fixed PCD format
>>+ if '.' in Token:
>>+ Value = Token
>>+ else:
>>+ # get the GUID value now
>>+ Value = ProtocolValue(Token,
>>+ self.Packages,
>>self.MetaFile.Path)
>> if Value is None:
>>- Value = GuidValue(Token, self.Packages, self.MetaFile.Path)
>>+ Value = PpiValue(Token, self.Packages, self.MetaFile.Path)
>>+ if Value is None:
>>+ Value = GuidValue(Token,
>>+ self.Packages,
>>self.MetaFile.Path)
>>+
>> if Value is None:
>> PackageList = "\n\t".join(str(P) for P in self.Packages)
>> EdkLogger.error('build', RESOURCE_NOT_AVAILABLE,
>> "Value of [%s] is not found in" % Token,
>> ExtraData=PackageList,
>>File=self.MetaFile,
>>Line=Record[-1])
>>diff --git a/BaseTools/Source/Python/build/BuildReport.py
>>b/BaseTools/Source/Python/build/BuildReport.py
>>index 897167c..0dbbba0 100644
>>--- a/BaseTools/Source/Python/build/BuildReport.py
>>+++ b/BaseTools/Source/Python/build/BuildReport.py
>>@@ -278,10 +278,16 @@ class DepexParser(object):
>> GuidValue = GuidStructureStringToGuidString(Package.Ppis[Ppi])
>> self._GuidDb[GuidValue.upper()] = Ppi
>> for Guid in Package.Guids:
>> GuidValue =
>GuidStructureStringToGuidString(Package.Guids[Guid])
>> self._GuidDb[GuidValue.upper()] = Guid
>>+ for Ma in Pa.ModuleAutoGenList:
>>+ for Pcd in Ma.FixedVoidTypePcds:
>>+ PcdValue = Ma.FixedVoidTypePcds[Pcd]
>>+ if len(PcdValue.split(',')) == 16:
>>+ GuidValue = GuidStructureByteArrayToGuidString(PcdValue)
>>+ self._GuidDb[GuidValue.upper()] = Pcd
>>
>> ##
>> # Parse the binary dependency expression files.
>> #
>> # This function parses the binary dependency expression file and
>>translate it
>>--
>>2.6.1.windows.1
>>
>>_______________________________________________
>>edk2-devel mailing list
>>edk2-devel@lists.01.org
>>https://lists.01.org/mailman/listinfo/edk2-devel
prev parent reply other threads:[~2018-07-06 2:06 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-05 7:27 [Patch V2] BaseTools: enable FixedAtBuild (VOID*) PCD use in the [DEPEX] section Yonghong Zhu
2018-07-06 1:55 ` Gao, Liming
2018-07-06 1:58 ` Zhu, Yonghong
2018-07-06 2:06 ` Gao, Liming [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A89E2EF3DFEDB4C8BFDE51014F606A14E2B6E1A@SHSMSX104.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox