]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Support build options for specific module type in DSC.
authorYingke Liu <yingke.d.liu@intel.com>
Thu, 11 Jun 2015 05:16:40 +0000 (05:16 +0000)
committeryingke <yingke@Edk2>
Thu, 11 Jun 2015 05:16:40 +0000 (05:16 +0000)
This patch extended BuildOptions section in DSC to support [BuildOptions.ARCH.CodeBase.MODULE_TYPE]

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yingke Liu <yingke.d.liu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17621 6f19259b-4bc3-4df7-8a09-765794883524

BaseTools/Source/Python/AutoGen/AutoGen.py
BaseTools/Source/Python/Workspace/WorkspaceDatabase.py

index d1ed0a65abce390f694b935722f9d12318f06a54..a2a8e7e5a36b096c36f9c184a98d7ad236e44926 100644 (file)
@@ -2074,8 +2074,11 @@ class PlatformAutoGen(AutoGen):
         # Get the different options for the different style module\r
         if Module.AutoGenVersion < 0x00010005:\r
             PlatformOptions = self.EdkBuildOption\r
+            ModuleTypeOptions = self.Platform.GetBuildOptionsByModuleType(EDK_NAME, Module.ModuleType)\r
         else:\r
             PlatformOptions = self.EdkIIBuildOption\r
+            ModuleTypeOptions = self.Platform.GetBuildOptionsByModuleType(EDKII_NAME, Module.ModuleType)\r
+        ModuleTypeOptions = self._ExpandBuildOption(ModuleTypeOptions)\r
         ModuleOptions = self._ExpandBuildOption(Module.BuildOptions)\r
         if Module in self.Platform.Modules:\r
             PlatformModule = self.Platform.Modules[str(Module)]\r
@@ -2084,19 +2087,21 @@ class PlatformAutoGen(AutoGen):
             PlatformModuleOptions = {}\r
 \r
         BuildRuleOrder = None\r
-        for Options in [self.ToolDefinition, ModuleOptions, PlatformOptions, PlatformModuleOptions]:\r
+        for Options in [self.ToolDefinition, ModuleOptions, PlatformOptions, ModuleTypeOptions, PlatformModuleOptions]:\r
             for Tool in Options:\r
                 for Attr in Options[Tool]:\r
                     if Attr == TAB_TOD_DEFINES_BUILDRULEORDER:\r
                         BuildRuleOrder = Options[Tool][Attr]\r
 \r
-        AllTools = set(ModuleOptions.keys() + PlatformOptions.keys() + PlatformModuleOptions.keys() + self.ToolDefinition.keys())\r
+        AllTools = set(ModuleOptions.keys() + PlatformOptions.keys() +\r
+                       PlatformModuleOptions.keys() + ModuleTypeOptions.keys() +\r
+                       self.ToolDefinition.keys())\r
         BuildOptions = {}\r
         for Tool in AllTools:\r
             if Tool not in BuildOptions:\r
                 BuildOptions[Tool] = {}\r
 \r
-            for Options in [self.ToolDefinition, ModuleOptions, PlatformOptions, PlatformModuleOptions]:\r
+            for Options in [self.ToolDefinition, ModuleOptions, PlatformOptions, ModuleTypeOptions, PlatformModuleOptions]:\r
                 if Tool not in Options:\r
                     continue\r
                 for Attr in Options[Tool]:\r
index 14cd22d064113e3eea5506f6dadf4b5a20401d11..1371bb02891eb994abe1f3a5c1b5c791aaded310 100644 (file)
@@ -147,6 +147,7 @@ class DscBuildData(PlatformBuildClassObject):
         self._Pcds              = None\r
         self._DecPcds           = None\r
         self._BuildOptions      = None\r
+        self._ModuleTypeOptions = None\r
         self._LoadFixAddress    = None\r
         self._RFCLanguages      = None\r
         self._ISOLanguages      = None\r
@@ -767,6 +768,19 @@ class DscBuildData(PlatformBuildClassObject):
                 self._BuildOptions[ToolChainFamily, ToolChain, EDK_NAME] = Option\r
         return self._BuildOptions\r
 \r
+    def GetBuildOptionsByModuleType(self, Edk, ModuleType):\r
+        if self._ModuleTypeOptions == None:\r
+            self._ModuleTypeOptions = sdict()\r
+        if (Edk, ModuleType) not in self._ModuleTypeOptions:\r
+            options = sdict()\r
+            self._ModuleTypeOptions[Edk, ModuleType] = options\r
+            DriverType = '%s.%s' % (Edk, ModuleType)\r
+            RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, self._Arch, DriverType]\r
+            for ToolChainFamily, ToolChain, Option, Arch, Type, Dummy3, Dummy4 in RecordList:\r
+                if Arch == self._Arch and Type == DriverType:\r
+                    options[ToolChainFamily, ToolChain, Edk] = Option\r
+        return self._ModuleTypeOptions[Edk, ModuleType]\r
+\r
     ## Retrieve non-dynamic PCD settings\r
     #\r
     #   @param  Type    PCD type\r