From: "Fan, ZhijuX" <zhijux.fan@intel.com>
To: "Gao, Liming" <liming.gao@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Feng, Bob C" <bob.c.feng@intel.com>
Subject: Re: [PATCH V2] BaseTools:Add [packages] section in dsc file
Date: Wed, 20 Nov 2019 02:45:45 +0000 [thread overview]
Message-ID: <FAD0D7E0AE0FA54D987F6E72435CAFD50AFE14B5@SHSMSX101.ccr.corp.intel.com> (raw)
In-Reply-To: <4A89E2EF3DFEDB4C8BFDE51014F606A14E54145B@SHSMSX104.ccr.corp.intel.com>
Hi:
regression test:
pass build for minplatforms, WhitleyRp, TigerLake
functional test:
Define a PCD in a dec file (e.g. StandaloneMmPkg.dec) that none of the modules depend on,
it is defined in a [PcdsFixedAtBuild] or [PcdsFeatureFlag] section
Create the [Packages] section in the DSC file and add " StandaloneMmPkg.dec" in [Packages] section
Test whether this PCD can be used in conditional statements in DSC/FDF files
Any question, please let me know. Thanks.
Best Regards
Fan Zhiju
> -----Original Message-----
> From: Gao, Liming <liming.gao@intel.com>
> Sent: Friday, November 15, 2019 9:55 AM
> To: Fan, ZhijuX <zhijux.fan@intel.com>; devel@edk2.groups.io
> Cc: Feng, Bob C <bob.c.feng@intel.com>
> Subject: RE: [PATCH V2] BaseTools:Add [packages] section in dsc file
>
> Zhiju:
> Can you show what test are done for this new support?
>
> Thanks
> Liming
> >-----Original Message-----
> >From: Fan, ZhijuX
> >Sent: Thursday, November 14, 2019 9:28 AM
> >To: devel@edk2.groups.io
> >Cc: Gao, Liming <liming.gao@intel.com>; Feng, Bob C
> ><bob.c.feng@intel.com>
> >Subject: [PATCH V2] BaseTools:Add [packages] section in dsc file
> >
> >BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=2270
> >
> >Currently a PCD (e.g. FeaturePCD) cannot be used in a conditional
> >statement in a DSC/FDF file without a module in the build referencing
> >the PCD package DEC file.
> >
> >An example implementation that to support this is to allow a [Packages]
> >section in the DSC file to list additional package dependencies for PCD
> >references in the package DSC/FDF files.
> >
> >this patch is going to add the ability to have the [packages] section
> >defined in the DSC file
> >
> >Cc: Liming Gao <liming.gao@intel.com>
> >Cc: Bob Feng <bob.c.feng@intel.com>
> >Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com>
> >---
> > BaseTools/Source/Python/AutoGen/ModuleAutoGen.py | 29
> >+++++++++++++++++-----
> > BaseTools/Source/Python/AutoGen/PlatformAutoGen.py | 1 +
> > .../Source/Python/AutoGen/WorkspaceAutoGen.py | 1 +
> > BaseTools/Source/Python/Common/DataType.py | 1 +
> > BaseTools/Source/Python/Workspace/DscBuildData.py | 23
> >++++++++++++++++-
> > .../Source/Python/Workspace/MetaFileParser.py | 14 +++++++++++
> > .../Source/Python/Workspace/WorkspaceCommon.py | 2 ++
> > .../Source/Python/Workspace/WorkspaceDatabase.py | 4 +++
> > 8 files changed, 68 insertions(+), 7 deletions(-)
> >
> >diff --git a/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py
> >b/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py
> >index f0812b6887..e6d6c43810 100755
> >--- a/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py
> >+++ b/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py
> >@@ -462,14 +462,31 @@ class ModuleAutoGen(AutoGen):
> > def BuildCommand(self):
> > return self.PlatformInfo.BuildCommand
> >
> >- ## Get object list of all packages the module and its dependent libraries
> >belong to
> >+ ## Get Module package and Platform package
> >+ #
> >+ # @retval list The list of package object
> >+ #
> >+ @cached_property
> >+ def PackageList(self):
> >+ PkagList = []
> >+ if self.Module.Packages:
> >+ PkagList.extend(self.Module.Packages)
> >+ Platform = self.BuildDatabase[self.PlatformInfo.MetaFile,
> >+ self.Arch,
> >self.BuildTarget, self.ToolChain]
> >+ for Package in Platform.Packages:
> >+ if Package in PkagList:
> >+ continue
> >+ PkagList.append(Package)
> >+ return PkagList
> >+
> >+ ## Get object list of all packages the module and its dependent
> >+ libraries
> >belong to and the Platform depends on
> > #
> > # @retval list The list of package object
> > #
> > @cached_property
> > def DerivedPackageList(self):
> > PackageList = []
> >- for M in [self.Module] + self.DependentLibraryList:
> >+ PackageList.extend(self.PackageList)
> >+ for M in self.DependentLibraryList:
> > for Package in M.Packages:
> > if Package in PackageList:
> > continue
> >@@ -938,13 +955,13 @@ class ModuleAutoGen(AutoGen):
> > self.Targets
> > return self._FileTypes
> >
> >- ## Get the list of package object the module depends on
> >+ ## Get the list of package object the module depends on and the
> >+ Platform
> >depends on
> > #
> > # @retval list The package object list
> > #
> > @cached_property
> > def DependentPackageList(self):
> >- return self.Module.Packages
> >+ return self.PackageList
> >
> > ## Return the list of auto-generated code file
> > #
> >@@ -1101,7 +1118,7 @@ class ModuleAutoGen(AutoGen):
> > RetVal.append(self.MetaFile.Dir)
> > RetVal.append(self.DebugDir)
> >
> >- for Package in self.Module.Packages:
> >+ for Package in self.PackageList:
> > PackageDir = mws.join(self.WorkspaceDir, Package.MetaFile.Dir)
> > if PackageDir not in RetVal:
> > RetVal.append(PackageDir) @@ -1125,7 +1142,7 @@ class
> >ModuleAutoGen(AutoGen):
> > @cached_property
> > def PackageIncludePathList(self):
> > IncludesList = []
> >- for Package in self.Module.Packages:
> >+ for Package in self.PackageList:
> > PackageDir = mws.join(self.WorkspaceDir, Package.MetaFile.Dir)
> > IncludesList = Package.Includes
> > if Package._PrivateIncludes:
> >diff --git a/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py
> >b/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py
> >index debeb46f58..4c3cdf82d5 100644
> >--- a/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py
> >+++ b/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py
> >@@ -975,6 +975,7 @@ class PlatformAutoGen(AutoGen):
> > continue
> > ModuleData = self.BuildDatabase[ModuleFile, self.Arch,
> >self.BuildTarget, self.ToolChain]
> > RetVal.update(ModuleData.Packages)
> >+ RetVal.update(self.Platform.Packages)
> > return list(RetVal)
> >
> > @cached_property
> >diff --git a/BaseTools/Source/Python/AutoGen/WorkspaceAutoGen.py
> >b/BaseTools/Source/Python/AutoGen/WorkspaceAutoGen.py
> >index 9d8040905e..fde48b4b27 100644
> >--- a/BaseTools/Source/Python/AutoGen/WorkspaceAutoGen.py
> >+++ b/BaseTools/Source/Python/AutoGen/WorkspaceAutoGen.py
> >@@ -420,6 +420,7 @@ class WorkspaceAutoGen(AutoGen):
> > continue
> > ModuleData = self.BuildDatabase[ModuleFile, Arch,
> >self.BuildTarget, self.ToolChain]
> > PkgSet.update(ModuleData.Packages)
> >+ PkgSet.update(Platform.Packages)
> > Pkgs[Arch] = list(PkgSet)
> > return Pkgs
> >
> >diff --git a/BaseTools/Source/Python/Common/DataType.py
> >b/BaseTools/Source/Python/Common/DataType.py
> >index 5d49afb0a9..8d80b41089 100644
> >--- a/BaseTools/Source/Python/Common/DataType.py
> >+++ b/BaseTools/Source/Python/Common/DataType.py
> >@@ -519,6 +519,7 @@ SECTIONS_HAVE_ITEM_AFTER_ARCH_SET =
> >{TAB_LIBRARY_CLASSES.upper(), TAB_DEPEX.uppe
> > PCDS_DYNAMICEX_VPD.upper(),
> > PCDS_DYNAMICEX_HII.upper(),
> > TAB_BUILD_OPTIONS.upper(),
> >+ TAB_PACKAGES.upper(),
> > TAB_INCLUDES.upper()}
> >
> > #
> >diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py
> >b/BaseTools/Source/Python/Workspace/DscBuildData.py
> >index 9192077f90..03a15bbf3e 100644
> >--- a/BaseTools/Source/Python/Workspace/DscBuildData.py
> >+++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
> >@@ -719,6 +719,24 @@ class DscBuildData(PlatformBuildClassObject):
> >
> >self._RawData.DisableOverrideComponent(Components[(file_guid_str,str(
> M
> >oduleFile))])
> > Components[(file_guid_str,str(ModuleFile))] = ModuleId
> > self._RawData._PostProcessed = False
> >+
> >+ ## Retrieve packages this Platform depends on
> >+ @cached_property
> >+ def Packages(self):
> >+ RetVal = set()
> >+ RecordList = self._RawData[MODEL_META_DATA_PACKAGE,
> self._Arch]
> >+ Macros = self._Macros
> >+ for Record in RecordList:
> >+ File = PathClass(NormPath(Record[0], Macros),
> >GlobalData.gWorkspace, Arch=self._Arch)
> >+ # check the file validation
> >+ ErrorCode, ErrorInfo = File.Validate('.dec')
> >+ if ErrorCode != 0:
> >+ LineNo = Record[-1]
> >+ EdkLogger.error('build', ErrorCode,
> >+ ExtraData=ErrorInfo,
> >File=self.MetaFile, Line=LineNo)
> >+ # parse this package now. we need it to get protocol/ppi/guid value
> >+ RetVal.add(self._Bdb[File, self._Arch, self._Target, self._Toolchain])
> >+ return RetVal
> >+
> > ## Retrieve [Components] section information
> > @property
> > def Modules(self):
> >@@ -896,7 +914,8 @@ class DscBuildData(PlatformBuildClassObject):
> > continue
> > ModuleData = self._Bdb[ModuleFile, self._Arch,
> >self._Target, self._Toolchain]
> > PkgSet.update(ModuleData.Packages)
> >-
> >+ if self.Packages:
> >+ PkgSet.update(self.Packages)
> > self._DecPcds, self._GuidDict = GetDeclaredPcd(self,
> >self._Bdb, self._Arch, self._Target, self._Toolchain, PkgSet)
> > self._GuidDict.update(GlobalData.gPlatformPcds)
> >
> >@@ -3320,6 +3339,8 @@ class DscBuildData(PlatformBuildClassObject):
> > continue
> > ModuleData = self._Bdb[ModuleFile, self._Arch,
> >self._Target, self._Toolchain]
> > PkgSet.update(ModuleData.Packages)
> >+ if self.Packages:
> >+ PkgSet.update(self.Packages)
> > self._DecPcds, self._GuidDict = GetDeclaredPcd(self,
> >self._Bdb, self._Arch, self._Target, self._Toolchain, PkgSet)
> > self._GuidDict.update(GlobalData.gPlatformPcds)
> > return self._DecPcds
> >diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py
> >b/BaseTools/Source/Python/Workspace/MetaFileParser.py
> >index 806fc322c5..3f96ce0564 100644
> >--- a/BaseTools/Source/Python/Workspace/MetaFileParser.py
> >+++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py
> >@@ -160,6 +160,7 @@ class MetaFileParser(object):
> > self.MetaFile = FilePath
> > self._FileDir = self.MetaFile.Dir
> > self._Defines = {}
> >+ self._Packages = []
> > self._FileLocalMacros = {}
> > self._SectionsMacroDict = defaultdict(dict)
> >
> >@@ -351,6 +352,13 @@ class MetaFileParser(object):
> > # If the section information is needed later, it should be
> >stored in database
> > self._ValueList[0] = self._SectionName
> >
> >+ ## [packages] section parser
> >+ @ParseMacro
> >+ def _PackageParser(self):
> >+ self._CurrentLine = CleanString(self._CurrentLine)
> >+ self._Packages.append(self._CurrentLine)
> >+ self._ValueList[0] = self._CurrentLine
> >+
> > ## [defines] section parser
> > @ParseMacro
> > def _DefineParser(self):
> >@@ -848,6 +856,7 @@ class DscParser(MetaFileParser):
> > TAB_LIBRARIES.upper() : MODEL_EFI_LIBRARY_INSTANCE,
> > TAB_LIBRARY_CLASSES.upper() : MODEL_EFI_LIBRARY_CLASS,
> > TAB_BUILD_OPTIONS.upper() :
> >MODEL_META_DATA_BUILD_OPTION,
> >+ TAB_PACKAGES.upper() :
> MODEL_META_DATA_PACKAGE,
> > TAB_PCDS_FIXED_AT_BUILD_NULL.upper() :
> >MODEL_PCD_FIXED_AT_BUILD,
> > TAB_PCDS_PATCHABLE_IN_MODULE_NULL.upper() :
> >MODEL_PCD_PATCHABLE_IN_MODULE,
> > TAB_PCDS_FEATURE_FLAG_NULL.upper() :
> >MODEL_PCD_FEATURE_FLAG,
> >@@ -1339,6 +1348,7 @@ class DscParser(MetaFileParser):
> > MODEL_META_DATA_DEFINE : self.__ProcessDefine,
> > MODEL_META_DATA_GLOBAL_DEFINE :
> >self.__ProcessDefine,
> > MODEL_META_DATA_INCLUDE :
> self.__ProcessDirective,
> >+ MODEL_META_DATA_PACKAGE :
> self.__ProcessPackages,
> > MODEL_META_DATA_CONDITIONAL_STATEMENT_IF :
> >self.__ProcessDirective,
> > MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE :
> >self.__ProcessDirective,
> > MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF :
> >self.__ProcessDirective,
> >@@ -1642,6 +1652,9 @@ class DscParser(MetaFileParser):
> > self._ValueList = None
> > self._ContentIndex -= 1
> >
> >+ def __ProcessPackages(self):
> >+ self._ValueList[0] = ReplaceMacro(self._ValueList[0],
> >+ self._Macros)
> >+
> > def __ProcessSkuId(self):
> > self._ValueList = [ReplaceMacro(Value, self._Macros, RaiseError=True)
> > for Value in self._ValueList] @@ -1720,6
> >+1733,7 @@ class DscParser(MetaFileParser):
> > MODEL_META_DATA_COMPONENT : _ComponentParser,
> > MODEL_META_DATA_BUILD_OPTION : _BuildOptionParser,
> > MODEL_UNKNOWN : MetaFileParser._Skip,
> >+ MODEL_META_DATA_PACKAGE :
> >MetaFileParser._PackageParser,
> > MODEL_META_DATA_USER_EXTENSION :
> >MetaFileParser._SkipUserExtension,
> > MODEL_META_DATA_SECTION_HEADER :
> >MetaFileParser._SectionHeaderParser,
> > MODEL_META_DATA_SUBSECTION_HEADER :
> >_SubsectionHeaderParser,
> >diff --git a/BaseTools/Source/Python/Workspace/WorkspaceCommon.py
> >b/BaseTools/Source/Python/Workspace/WorkspaceCommon.py
> >index 0b11ec2d59..913e710fd9 100644
> >--- a/BaseTools/Source/Python/Workspace/WorkspaceCommon.py
> >+++ b/BaseTools/Source/Python/Workspace/WorkspaceCommon.py
> >@@ -37,6 +37,8 @@ class OrderedListDict(OrderedDict):
> > #
> > def GetPackageList(Platform, BuildDatabase, Arch, Target, Toolchain):
> > PkgSet = set()
> >+ if Platform.Packages:
> >+ PkgSet.update(Platform.Packages)
> > for ModuleFile in Platform.Modules:
> > Data = BuildDatabase[ModuleFile, Arch, Target, Toolchain]
> > PkgSet.update(Data.Packages)
> >diff --git a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
> >b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
> >index ab7b4506c1..9420eaa608 100644
> >--- a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
> >+++ b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
> >@@ -186,6 +186,10 @@ class WorkspaceDatabase(object):
> > for Package in LibObj.Packages:
> > if Package not in PackageList:
> > PackageList.append(Package)
> >+ for Package in Pa.Packages:
> >+ if Package in PackageList:
> >+ continue
> >+ PackageList.append(Package)
> >
> > return PackageList
> >
> >--
> >2.14.1.windows.1
next prev parent reply other threads:[~2019-11-20 2:45 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-14 1:27 [PATCH V2] BaseTools:Add [packages] section in dsc file Fan, ZhijuX
2019-11-14 2:59 ` Bob Feng
2019-11-15 1:55 ` Liming Gao
2019-11-20 2:45 ` Fan, ZhijuX [this message]
2019-11-20 5:13 ` Liming Gao
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=FAD0D7E0AE0FA54D987F6E72435CAFD50AFE14B5@SHSMSX101.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