Reviewed-by: Liming Gao <liming....@intel.com>

-----Original Message-----
From: Yingke Liu [mailto:yingke.d....@intel.com] 
Sent: Wednesday, June 10, 2015 10:20 AM
To: edk2-devel@lists.sourceforge.net
Subject: [edk2] [Patch] BaseTools: Support build options for specific module 
type in DSC.

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....@intel.com>
---
 BaseTools/Source/Python/AutoGen/AutoGen.py             | 11 ++++++++---
 BaseTools/Source/Python/Workspace/WorkspaceDatabase.py | 14 ++++++++++++++
 2 files changed, 22 insertions(+), 3 deletions(-)

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


------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to