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.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
This commit is contained in:
parent
620f289162
commit
35f69db91b
|
@ -2074,8 +2074,11 @@ class PlatformAutoGen(AutoGen):
|
||||||
# Get the different options for the different style module
|
# Get the different options for the different style module
|
||||||
if Module.AutoGenVersion < 0x00010005:
|
if Module.AutoGenVersion < 0x00010005:
|
||||||
PlatformOptions = self.EdkBuildOption
|
PlatformOptions = self.EdkBuildOption
|
||||||
|
ModuleTypeOptions = self.Platform.GetBuildOptionsByModuleType(EDK_NAME, Module.ModuleType)
|
||||||
else:
|
else:
|
||||||
PlatformOptions = self.EdkIIBuildOption
|
PlatformOptions = self.EdkIIBuildOption
|
||||||
|
ModuleTypeOptions = self.Platform.GetBuildOptionsByModuleType(EDKII_NAME, Module.ModuleType)
|
||||||
|
ModuleTypeOptions = self._ExpandBuildOption(ModuleTypeOptions)
|
||||||
ModuleOptions = self._ExpandBuildOption(Module.BuildOptions)
|
ModuleOptions = self._ExpandBuildOption(Module.BuildOptions)
|
||||||
if Module in self.Platform.Modules:
|
if Module in self.Platform.Modules:
|
||||||
PlatformModule = self.Platform.Modules[str(Module)]
|
PlatformModule = self.Platform.Modules[str(Module)]
|
||||||
|
@ -2084,19 +2087,21 @@ class PlatformAutoGen(AutoGen):
|
||||||
PlatformModuleOptions = {}
|
PlatformModuleOptions = {}
|
||||||
|
|
||||||
BuildRuleOrder = None
|
BuildRuleOrder = None
|
||||||
for Options in [self.ToolDefinition, ModuleOptions, PlatformOptions, PlatformModuleOptions]:
|
for Options in [self.ToolDefinition, ModuleOptions, PlatformOptions, ModuleTypeOptions, PlatformModuleOptions]:
|
||||||
for Tool in Options:
|
for Tool in Options:
|
||||||
for Attr in Options[Tool]:
|
for Attr in Options[Tool]:
|
||||||
if Attr == TAB_TOD_DEFINES_BUILDRULEORDER:
|
if Attr == TAB_TOD_DEFINES_BUILDRULEORDER:
|
||||||
BuildRuleOrder = Options[Tool][Attr]
|
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 = {}
|
BuildOptions = {}
|
||||||
for Tool in AllTools:
|
for Tool in AllTools:
|
||||||
if Tool not in BuildOptions:
|
if Tool not in BuildOptions:
|
||||||
BuildOptions[Tool] = {}
|
BuildOptions[Tool] = {}
|
||||||
|
|
||||||
for Options in [self.ToolDefinition, ModuleOptions, PlatformOptions, PlatformModuleOptions]:
|
for Options in [self.ToolDefinition, ModuleOptions, PlatformOptions, ModuleTypeOptions, PlatformModuleOptions]:
|
||||||
if Tool not in Options:
|
if Tool not in Options:
|
||||||
continue
|
continue
|
||||||
for Attr in Options[Tool]:
|
for Attr in Options[Tool]:
|
||||||
|
|
|
@ -147,6 +147,7 @@ class DscBuildData(PlatformBuildClassObject):
|
||||||
self._Pcds = None
|
self._Pcds = None
|
||||||
self._DecPcds = None
|
self._DecPcds = None
|
||||||
self._BuildOptions = None
|
self._BuildOptions = None
|
||||||
|
self._ModuleTypeOptions = None
|
||||||
self._LoadFixAddress = None
|
self._LoadFixAddress = None
|
||||||
self._RFCLanguages = None
|
self._RFCLanguages = None
|
||||||
self._ISOLanguages = None
|
self._ISOLanguages = None
|
||||||
|
@ -767,6 +768,19 @@ class DscBuildData(PlatformBuildClassObject):
|
||||||
self._BuildOptions[ToolChainFamily, ToolChain, EDK_NAME] = Option
|
self._BuildOptions[ToolChainFamily, ToolChain, EDK_NAME] = Option
|
||||||
return self._BuildOptions
|
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
|
## Retrieve non-dynamic PCD settings
|
||||||
#
|
#
|
||||||
# @param Type PCD type
|
# @param Type PCD type
|
||||||
|
|
Loading…
Reference in New Issue