]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Add functions to get platform scope build options
authorFeng, Bob C <bob.c.feng@intel.com>
Mon, 27 May 2019 14:19:25 +0000 (22:19 +0800)
committerFeng, Bob C <bob.c.feng@intel.com>
Fri, 9 Aug 2019 15:15:52 +0000 (23:15 +0800)
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1875

These functions are used for get platform scope
build options. They will be used in later patches.

Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Bob Feng <bob.c.feng@intel.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
Acked-by: Liming Gao <liming.gao@intel.com>
BaseTools/Source/Python/AutoGen/AutoGen.py
BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools/Source/Python/Workspace/InfBuildData.py

index 122696f5cebfbf4cccaeac73ce9f28676cad531c..bb0da46d74a9be0125f39b301c80f2c32df5806a 100644 (file)
@@ -2486,7 +2486,15 @@ class PlatformAutoGen(AutoGen):
                             else:\r
                                 BuildOptions[Tool][Attr] = Options[Key]\r
         return BuildOptions\r
-\r
+    def GetGlobalBuildOptions(self,Module):\r
+        ModuleTypeOptions = self.Platform.GetBuildOptionsByPkg(Module, Module.ModuleType)\r
+        ModuleTypeOptions = self._ExpandBuildOption(ModuleTypeOptions)\r
+        if Module in self.Platform.Modules:\r
+            PlatformModule = self.Platform.Modules[str(Module)]\r
+            PlatformModuleOptions = self._ExpandBuildOption(PlatformModule.BuildOptions)\r
+        else:\r
+            PlatformModuleOptions = {}\r
+        return ModuleTypeOptions, PlatformModuleOptions\r
     ## Append build options in platform to a module\r
     #\r
     #   @param  Module  The module to which the build options will be appended\r
index 987d9cf13eeadac5d5d32d404c2a764d09fba94f..fa41e57c4f45160d8f11a412c4f0c44966b3c40f 100644 (file)
@@ -1224,7 +1224,27 @@ class DscBuildData(PlatformBuildClassObject):
                         if ' ' + Option not in self._BuildOptions[CurKey]:\r
                             self._BuildOptions[CurKey] += ' ' + Option\r
         return self._BuildOptions\r
+    def GetBuildOptionsByPkg(self, Module, ModuleType):\r
 \r
+        local_pkg = os.path.split(Module.LocalPkg())[0]\r
+        if self._ModuleTypeOptions is None:\r
+            self._ModuleTypeOptions = OrderedDict()\r
+        if ModuleType not in self._ModuleTypeOptions:\r
+            options = OrderedDict()\r
+            self._ModuleTypeOptions[ ModuleType] = options\r
+            RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, self._Arch]\r
+            for ToolChainFamily, ToolChain, Option, Dummy1, Dummy2, Dummy3, Dummy4, Dummy5 in RecordList:\r
+                if Dummy2 not in (TAB_COMMON,local_pkg.upper(),"EDKII"):\r
+                    continue\r
+                Type = Dummy3\r
+                if Type.upper() == ModuleType.upper():\r
+                    Key = (ToolChainFamily, ToolChain)\r
+                    if Key not in options or not ToolChain.endswith('_FLAGS') or Option.startswith('='):\r
+                        options[Key] = Option\r
+                    else:\r
+                        if ' ' + Option not in options[Key]:\r
+                            options[Key] += ' ' + Option\r
+        return self._ModuleTypeOptions[ModuleType]\r
     def GetBuildOptionsByModuleType(self, Edk, ModuleType):\r
         if self._ModuleTypeOptions is None:\r
             self._ModuleTypeOptions = OrderedDict()\r
index 60970cd928361b0f78f25a91e0fc7fe42f962a60..da35391d3afff4a548938135172b79d5d1381248 100644 (file)
@@ -819,7 +819,17 @@ class InfBuildData(ModuleBuildClassObject):
         for Arch, ModuleType in TemporaryDictionary:\r
             RetVal[Arch, ModuleType] = TemporaryDictionary[Arch, ModuleType]\r
         return RetVal\r
-\r
+    def LocalPkg(self):\r
+        module_path = self.MetaFile.File\r
+        subdir = os.path.split(module_path)[0]\r
+        TopDir = ""\r
+        while subdir:\r
+            subdir,TopDir = os.path.split(subdir)\r
+\r
+        for file_name in os.listdir(os.path.join(self.MetaFile.Root,TopDir)):\r
+            if file_name.upper().endswith("DEC"):\r
+                pkg = os.path.join(TopDir,file_name)\r
+        return pkg\r
     @cached_class_function\r
     def GetGuidsUsedByPcd(self):\r
         self.Pcds\r