return False\r
return True\r
\r
+ def ParseCCFlags(self, ccflag):\r
+ ccflags = set()\r
+ flag = ""\r
+ for ch in ccflag:\r
+ if ch in (r"/", "-"):\r
+ if flag.strip():\r
+ ccflags.add(flag.strip())\r
+ flag = ch\r
+ else:\r
+ flag += ch\r
+ if flag.strip():\r
+ ccflags.add(flag.strip())\r
+ return ccflags\r
def GenerateByteArrayValue (self, StructuredPcds):\r
#\r
# Generate/Compile/Run C application to determine if there are any flexible array members\r
Target, Tag, Arch, Tool, Attr = Options[1].split("_")\r
if Tool != 'CC':\r
continue\r
-\r
+ if Attr != "FLAGS":\r
+ continue\r
if Target == "*" or Target == self._Target:\r
if Tag == "*" or Tag == self._Toolchain:\r
+ if 'COMMON' not in BuildOptions:\r
+ BuildOptions['COMMON'] = set()\r
if Arch == "*":\r
- if Tool not in BuildOptions:\r
- BuildOptions[Tool] = OrderedDict()\r
- if Attr != "FLAGS" or Attr not in BuildOptions[Tool] or self.BuildOptions[Options].startswith('='):\r
- BuildOptions[Tool][Attr] = self.BuildOptions[Options]\r
- else:\r
- # append options for the same tool except PATH\r
- if Attr != 'PATH':\r
- BuildOptions[Tool][Attr] += " " + self.BuildOptions[Options]\r
- else:\r
- BuildOptions[Tool][Attr] = self.BuildOptions[Options]\r
+ BuildOptions['COMMON'].add(self.BuildOptions[Options])\r
+ if Arch in self.SupArchList:\r
+ if Arch not in BuildOptions:\r
+ BuildOptions[Arch] = set()\r
+ BuildOptions[Arch] |= self.ParseCCFlags(self.BuildOptions[Options])\r
+\r
if BuildOptions:\r
- for Tool in BuildOptions:\r
- for Attr in BuildOptions[Tool]:\r
- if Attr == "FLAGS":\r
- Value = BuildOptions[Tool][Attr]\r
- ValueList = Value.split()\r
- if ValueList:\r
- for Id, Item in enumerate(ValueList):\r
- if Item in ['-D', '/D', '-U', '/U']:\r
- CC_FLAGS += ' ' + Item\r
- if Id + 1 < len(ValueList):\r
- CC_FLAGS += ' ' + ValueList[Id + 1]\r
- elif Item.startswith(('-D', '/D', '-U', '/U')):\r
- CC_FLAGS += ' ' + Item\r
+ ArchBuildOptions = {arch:flags for arch,flags in BuildOptions.items() if arch != 'COMMON'}\r
+ if len(ArchBuildOptions.keys()) == 1:\r
+ BuildOptions['COMMON'] |= (ArchBuildOptions.values()[0])\r
+ elif len(ArchBuildOptions.keys()) > 1:\r
+ CommonBuildOptions = reduce(lambda x,y: x&y, ArchBuildOptions.values())\r
+ BuildOptions['COMMON'] |= CommonBuildOptions\r
+ ValueList = list(BuildOptions['COMMON'])\r
+ CC_FLAGS += " ".join([item for item in ValueList if item.startswith(('-D', '/D', '-U', '/U'))])\r
MakeApp += CC_FLAGS\r
\r
if sys.platform == "win32":\r