On Mon, 14 Jan 2019 at 08:01, Gao, Liming <liming....@intel.com> wrote: > > Ard: > Sorry for this break, Bob just sent hot fix for this issue in > https://lists.01.org/pipermail/edk2-devel/2019-January/034947.html. Could you > verify it? > In fact, it is caused by previous patch to remove EDK support in BaseTools > Python code. >
OK, that patch fixes it for me. But may I kindly suggest that Bob tests his code before pushing it? Thanks. > >-----Original Message----- > >From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] > >Sent: Monday, January 14, 2019 2:58 PM > >To: Gao, Liming <liming....@intel.com> > >Cc: Feng, Bob C <bob.c.f...@intel.com>; edk2-devel@lists.01.org; Carsey, > >Jaben <jaben.car...@intel.com> > >Subject: Re: [edk2] [Patch] BaseTools: Enable component override > >functionality > > > >On Mon, 14 Jan 2019 at 04:00, Gao, Liming <liming....@intel.com> wrote: > >> > >> Reviewed-by: Liming Gao <liming....@intel.com> > >> > > > >This patch breaks the build on AArch64/GGC: > > > >(Python 2.7.13 on linux2) Traceback (most recent call last): > > File "<https://ci.linaro.org/job/leg-virt-tianocore-edk2- > >upstream/ws/edk2/BaseTools/BinWrappers/PosixLike/../../Source/Python/b > >uild/build.py",> > >line 2403, in Main > > MyBuild.Launch() > > File "<https://ci.linaro.org/job/leg-virt-tianocore-edk2- > >upstream/ws/edk2/BaseTools/BinWrappers/PosixLike/../../Source/Python/b > >uild/build.py",> > >line 2137, in Launch > > self._MultiThreadBuildPlatform() > > File "<https://ci.linaro.org/job/leg-virt-tianocore-edk2- > >upstream/ws/edk2/BaseTools/BinWrappers/PosixLike/../../Source/Python/b > >uild/build.py",> > >line 1917, in _MultiThreadBuildPlatform > > self.Progress > > File "<https://ci.linaro.org/job/leg-virt-tianocore-edk2- > >upstream/ws/edk2/BaseTools/Source/Python/AutoGen/AutoGen.py",> > >line 239, in __init__ > > self._InitWorker(Workspace, MetaFile, Target, Toolchain, Arch, > >*args, **kwargs) > > File "<https://ci.linaro.org/job/leg-virt-tianocore-edk2- > >upstream/ws/edk2/BaseTools/Source/Python/AutoGen/AutoGen.py",> > >line 403, in _InitWorker > > PlatformPcds = Platform.Pcds > > File "<https://ci.linaro.org/job/leg-virt-tianocore-edk2- > >upstream/ws/edk2/BaseTools/Source/Python/Workspace/DscBuildData.py",> > >line 1194, in Pcds > > self._Pcds = self.UpdateStructuredPcds(MODEL_PCD_TYPE_LIST, self._Pcds) > > File "<https://ci.linaro.org/job/leg-virt-tianocore-edk2- > >upstream/ws/edk2/BaseTools/Source/Python/Workspace/DscBuildData.py",> > >line 1486, in UpdateStructuredPcds > > for Pcd in self.DecPcds: > > File "<https://ci.linaro.org/job/leg-virt-tianocore-edk2- > >upstream/ws/edk2/BaseTools/Source/Python/Workspace/DscBuildData.py",> > >line 3183, in DecPcds > > self._DecPcds, self._GuidDict = GetDeclaredPcd(self, self._Bdb, > >self._Arch, self._Target, self._Toolchain, PkgSet) > > File "<https://ci.linaro.org/job/leg-virt-tianocore-edk2- > >upstream/ws/edk2/BaseTools/Source/Python/Workspace/WorkspaceComm > >on.py",> > >line 62, in GetDeclaredPcd > > PkgList = GetPackageList(Platform, BuildDatabase, Arch, Target, > > Toolchain) > > File "<https://ci.linaro.org/job/leg-virt-tianocore-edk2- > >upstream/ws/edk2/BaseTools/Source/Python/Workspace/WorkspaceComm > >on.py",> > >line 44, in GetPackageList > > for ModuleFile in Platform.Modules: > > File "<https://ci.linaro.org/job/leg-virt-tianocore-edk2- > >upstream/ws/edk2/BaseTools/Source/Python/Workspace/DscBuildData.py",> > >line 728, in Modules > > self.OverrideDuplicateModule() > > File "<https://ci.linaro.org/job/leg-virt-tianocore-edk2- > >upstream/ws/edk2/BaseTools/Source/Python/Workspace/DscBuildData.py",> > >line 712, in OverrideDuplicateModule > > Macros["EDK_SOURCE"] = GlobalData.gEcpSource > >AttributeError: 'module' object has no attribute 'gEcpSource' > > > > > > > >> >-----Original Message----- > >> >From: Feng, Bob C > >> >Sent: Friday, January 11, 2019 10:39 AM > >> >To: edk2-devel@lists.01.org > >> >Cc: Feng, Bob C <bob.c.f...@intel.com>; Gao, Liming > >> ><liming....@intel.com>; Carsey, Jaben <jaben.car...@intel.com> > >> >Subject: [Patch] BaseTools: Enable component override functionality > >> > > >> >https://bugzilla.tianocore.org/show_bug.cgi?id=1449 > >> >This patch enable build tools to recognize that > >> >when two given files have the same GUID, file path and ARCH in Dsc, > >> >The later one's definition will be used. > >> > > >> >Contributed-under: TianoCore Contribution Agreement 1.1 > >> >Signed-off-by: Bob Feng <bob.c.f...@intel.com> > >> >Cc: Liming Gao <liming....@intel.com> > >> >Cc: Carsey Jaben <jaben.car...@intel.com> > >> >--- > >> > .../Source/Python/Workspace/DscBuildData.py | 24 ++++++++++++------ > >- > >> > .../Source/Python/Workspace/MetaFileParser.py | 5 ++++ > >> > .../Source/Python/Workspace/MetaFileTable.py | 7 ++++-- > >> > 3 files changed, 25 insertions(+), 11 deletions(-) > >> > > >> >diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py > >> >b/BaseTools/Source/Python/Workspace/DscBuildData.py > >> >index 7e82e8e934..f9805f58f5 100644 > >> >--- a/BaseTools/Source/Python/Workspace/DscBuildData.py > >> >+++ b/BaseTools/Source/Python/Workspace/DscBuildData.py > >> >@@ -704,36 +704,44 @@ class DscBuildData(PlatformBuildClassObject): > >> > if TAB_DEFAULT_STORES_DEFAULT not in self.DefaultStores: > >> > self.DefaultStores[TAB_DEFAULT_STORES_DEFAULT] = (0, > >> >TAB_DEFAULT_STORES_DEFAULT) > >> > GlobalData.gDefaultStores = sorted(self.DefaultStores.keys()) > >> > return self.DefaultStores > >> > > >> >+ def OverrideDuplicateModule(self): > >> >+ RecordList = self._RawData[MODEL_META_DATA_COMPONENT, > >> >self._Arch] > >> >+ Macros = self._Macros > >> >+ Macros["EDK_SOURCE"] = GlobalData.gEcpSource > >> >+ Components = {} > >> >+ for Record in RecordList: > >> >+ ModuleId = Record[6] > >> >+ file_guid = self._RawData[MODEL_META_DATA_HEADER, > >self._Arch, > >> >None, ModuleId] > >> >+ file_guid_str = file_guid[0][2] if file_guid else "NULL" > >> >+ ModuleFile = PathClass(NormPath(Record[0], Macros), > >> >GlobalData.gWorkspace, Arch=self._Arch) > >> >+ if self._Arch != TAB_ARCH_COMMON and > >> >(file_guid_str,str(ModuleFile)) in Components: > >> >+ > >> >self._RawData.DisableOverrideComponent(Components[(file_guid_str,str > >(M > >> >oduleFile))]) > >> >+ Components[(file_guid_str,str(ModuleFile))] = ModuleId > >> >+ self._RawData._PostProcessed = False > >> > ## Retrieve [Components] section information > >> > @property > >> > def Modules(self): > >> > if self._Modules is not None: > >> > return self._Modules > >> >- > >> >+ self.OverrideDuplicateModule() > >> > self._Modules = OrderedDict() > >> > RecordList = self._RawData[MODEL_META_DATA_COMPONENT, > >> >self._Arch] > >> > Macros = self._Macros > >> > Macros["EDK_SOURCE"] = GlobalData.gEcpSource > >> > for Record in RecordList: > >> >- DuplicatedFile = False > >> >- > >> > ModuleFile = PathClass(NormPath(Record[0], Macros), > >> >GlobalData.gWorkspace, Arch=self._Arch) > >> > ModuleId = Record[6] > >> > LineNo = Record[7] > >> > > >> > # check the file validation > >> > ErrorCode, ErrorInfo = ModuleFile.Validate('.inf') > >> > if ErrorCode != 0: > >> > EdkLogger.error('build', ErrorCode, File=self.MetaFile, > >Line=LineNo, > >> > ExtraData=ErrorInfo) > >> >- # Check duplication > >> >- # If arch is COMMON, no duplicate module is checked since all > >modules > >> >in all component sections are selected > >> >- if self._Arch != TAB_ARCH_COMMON and ModuleFile in > >self._Modules: > >> >- DuplicatedFile = True > >> > > >> > Module = ModuleBuildClassObject() > >> > Module.MetaFile = ModuleFile > >> > > >> > # get module private library instance > >> >@@ -792,12 +800,10 @@ class DscBuildData(PlatformBuildClassObject): > >> > else: > >> > OptionString = Module.BuildOptions[ToolChainFamily, > >> > ToolChain] > >> > Module.BuildOptions[ToolChainFamily, ToolChain] = > >OptionString + > >> >" " + Option > >> > > >> > RecordList = self._RawData[MODEL_META_DATA_HEADER, > >self._Arch, > >> >None, ModuleId] > >> >- if DuplicatedFile and not RecordList: > >> >- EdkLogger.error('build', FILE_DUPLICATED, > >> >File=self.MetaFile, > >> >ExtraData=str(ModuleFile), Line=LineNo) > >> > if RecordList: > >> > if len(RecordList) != 1: > >> > EdkLogger.error('build', OPTION_UNKNOWN, 'Only > >> > FILE_GUID > >can > >> >be listed in <Defines> section.', > >> > File=self.MetaFile, > >> > ExtraData=str(ModuleFile), > >Line=LineNo) > >> > ModuleFile = ProcessDuplicatedInf(ModuleFile, > >> > RecordList[0][2], > >> >GlobalData.gWorkspace) > >> >diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py > >> >b/BaseTools/Source/Python/Workspace/MetaFileParser.py > >> >index 032220813b..a52e9229df 100644 > >> >--- a/BaseTools/Source/Python/Workspace/MetaFileParser.py > >> >+++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py > >> >@@ -1711,10 +1711,15 @@ class DscParser(MetaFileParser): > >> > > >> > def __ProcessBuildOption(self): > >> > self._ValueList = [ReplaceMacro(Value, self._Macros, > >> > RaiseError=False) > >> > for Value in self._ValueList] > >> > > >> >+ def DisableOverrideComponent(self,module_id): > >> >+ for ori_id in self._IdMapping: > >> >+ if self._IdMapping[ori_id] == module_id: > >> >+ self._RawTable.DisableComponent(ori_id) > >> >+ > >> > _SectionParser = { > >> > MODEL_META_DATA_HEADER : > >> > _DefineParser, > >> > MODEL_EFI_SKU_ID : _SkuIdParser, > >> > MODEL_EFI_DEFAULT_STORES : > >> > _DefaultStoresParser, > >> > MODEL_EFI_LIBRARY_INSTANCE : > >> > _LibraryInstanceParser, > >> >diff --git a/BaseTools/Source/Python/Workspace/MetaFileTable.py > >> >b/BaseTools/Source/Python/Workspace/MetaFileTable.py > >> >index 004e9494c3..823a87e057 100644 > >> >--- a/BaseTools/Source/Python/Workspace/MetaFileTable.py > >> >+++ b/BaseTools/Source/Python/Workspace/MetaFileTable.py > >> >@@ -74,11 +74,11 @@ class MetaFileTable(): > >> > > >> > def SetEndFlag(self): > >> > self.CurrentContent.append(self._DUMMY_) > >> > > >> > def GetAll(self): > >> >- return [item for item in self.CurrentContent if item[0] >= 0 ] > >> >+ return [item for item in self.CurrentContent if item[0] >= 0 and > >> >item[- > >> >1]>=0] > >> > > >> > ## Python class representation of table storing module data > >> > class ModuleTable(MetaFileTable): > >> > _COLUMN_ = ''' > >> > ID REAL PRIMARY KEY, > >> >@@ -371,11 +371,10 @@ class PlatformTable(MetaFileTable): > >> > # > >> > def Query(self, Model, Scope1=None, Scope2=None, > >> >BelongsToItem=None, FromItem=None): > >> > > >> > QueryTab = self.CurrentContent > >> > result = [item for item in QueryTab if item[1] == Model and > >> > item[-1]>0 ] > >> >- > >> > if Scope1 is not None and Scope1 != TAB_ARCH_COMMON: > >> > Sc1 = set(['COMMON']) > >> > Sc1.add(Scope1) > >> > result = [item for item in result if item[5] in Sc1] > >> > Sc2 = set( ['COMMON','DEFAULT']) > >> >@@ -395,10 +394,14 @@ class PlatformTable(MetaFileTable): > >> > result = [item for item in result if item[9] == FromItem] > >> > > >> > result = [ [r[2],r[3],r[4],r[5],r[6],r[7],r[0],r[9]] for r in > >> > result ] > >> > return result > >> > > >> >+ def DisableComponent(self,comp_id): > >> >+ for item in self.CurrentContent: > >> >+ if item[0] == comp_id or item[8] == comp_id: > >> >+ item[-1] = -1 > >> > > >> > ## Factory class to produce different storage for different type of meta- > >file > >> > class MetaFileStorage(object): > >> > _FILE_TABLE_ = { > >> > MODEL_FILE_INF : ModuleTable, > >> >-- > >> >2.19.1.windows.1 > >> > >> _______________________________________________ > >> edk2-devel mailing list > >> edk2-devel@lists.01.org > >> https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel