Reviewed-by: Liming Gao <liming....@intel.com>
> -----Original Message----- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of BobCF > Sent: Friday, November 2, 2018 1:57 PM > To: edk2-devel@lists.01.org > Cc: Gao, Liming <liming....@intel.com> > Subject: [edk2] [Patch V3] BaseTools: Use common cc flag for building > PcdValueInit. > > V3: > > Update the patch to avoid "reduce" function fail. > > V2: > Support to extract the common cc flag from a > combined cc flag string. For example > MSFT:*_*_IA32_CC_FLAGS = /D DISABLE_NEW_DEPRECATED_INTERFACES /DDEF_IA32 > MSFT:*_*_X64_CC_FLAGS = /DDEF_X64 /D DISABLE_NEW_DEPRECATED_INTERFACES > > V1: > Use common cc flags for building PcdValueInit. The common > cc flags include the cc flag which is under common arch and > under all build arches. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Bob Feng <bob.c.f...@intel.com> > Cc: Liming Gao <liming....@intel.com> > --- > .../Source/Python/Workspace/DscBuildData.py | 55 +++++++++++-------- > 1 file changed, 31 insertions(+), 24 deletions(-) > > diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py > b/BaseTools/Source/Python/Workspace/DscBuildData.py > index 6d596b2b54..11aa63fb26 100644 > --- a/BaseTools/Source/Python/Workspace/DscBuildData.py > +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py > @@ -2182,10 +2182,23 @@ class DscBuildData(PlatformBuildClassObject): > for key in OverrideValues: > if OverrideValues[key]: > return False > return True > > + def ParseCCFlags(self, ccflag): > + ccflags = set() > + flag = "" > + for ch in ccflag: > + if ch in (r"/", "-"): > + if flag.strip(): > + ccflags.add(flag.strip()) > + flag = ch > + else: > + flag += ch > + if flag.strip(): > + ccflags.add(flag.strip()) > + return ccflags > def GenerateByteArrayValue (self, StructuredPcds): > # > # Generate/Compile/Run C application to determine if there are any > flexible array members > # > if not StructuredPcds: > @@ -2298,38 +2311,32 @@ class DscBuildData(PlatformBuildClassObject): > if Family and Family != self.ToolChainFamily: > continue > Target, Tag, Arch, Tool, Attr = Options[1].split("_") > if Tool != 'CC': > continue > - > + if Attr != "FLAGS": > + continue > if Target == "*" or Target == self._Target: > if Tag == "*" or Tag == self._Toolchain: > + if 'COMMON' not in BuildOptions: > + BuildOptions['COMMON'] = set() > if Arch == "*": > - if Tool not in BuildOptions: > - BuildOptions[Tool] = OrderedDict() > - if Attr != "FLAGS" or Attr not in BuildOptions[Tool] > or self.BuildOptions[Options].startswith('='): > - BuildOptions[Tool][Attr] = > self.BuildOptions[Options] > - else: > - # append options for the same tool except PATH > - if Attr != 'PATH': > - BuildOptions[Tool][Attr] += " " + > self.BuildOptions[Options] > - else: > - BuildOptions[Tool][Attr] = > self.BuildOptions[Options] > + > BuildOptions['COMMON'].add(self.BuildOptions[Options]) > + if Arch in self.SupArchList: > + if Arch not in BuildOptions: > + BuildOptions[Arch] = set() > + BuildOptions[Arch] |= > self.ParseCCFlags(self.BuildOptions[Options]) > + > if BuildOptions: > - for Tool in BuildOptions: > - for Attr in BuildOptions[Tool]: > - if Attr == "FLAGS": > - Value = BuildOptions[Tool][Attr] > - ValueList = Value.split() > - if ValueList: > - for Id, Item in enumerate(ValueList): > - if Item in ['-D', '/D', '-U', '/U']: > - CC_FLAGS += ' ' + Item > - if Id + 1 < len(ValueList): > - CC_FLAGS += ' ' + ValueList[Id + 1] > - elif Item.startswith(('-D', '/D', '-U', > '/U')): > - CC_FLAGS += ' ' + Item > + ArchBuildOptions = {arch:flags for arch,flags in > BuildOptions.items() if arch != 'COMMON'} > + if len(ArchBuildOptions.keys()) == 1: > + BuildOptions['COMMON'] |= (ArchBuildOptions.values()[0]) > + elif len(ArchBuildOptions.keys()) > 1: > + CommonBuildOptions = reduce(lambda x,y: x&y, > ArchBuildOptions.values()) > + BuildOptions['COMMON'] |= CommonBuildOptions > + ValueList = list(BuildOptions['COMMON']) > + CC_FLAGS += " ".join([item for item in ValueList if > item.startswith(('-D', '/D', '-U', '/U'))]) > MakeApp += CC_FLAGS > > if sys.platform == "win32": > MakeApp = MakeApp + PcdMakefileEnd > MakeApp = MakeApp + AppTarget % ("""\tcopy $(APPLICATION) > $(APPFILE) /y """) > -- > 2.18.0.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