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