]>
git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/Python/UPT/Xml/ModuleSurfaceAreaXml.py
2 # This file is used to parse a Module file of .PKG file
4 # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
6 # SPDX-License-Identifier: BSD-2-Clause-Patent
12 from xml
.dom
import minidom
14 from Library
.StringUtils
import ConvertNEToNOTEQ
15 from Library
.StringUtils
import ConvertNOTEQToNE
16 from Library
.StringUtils
import GetStringOfList
17 from Library
.StringUtils
import IsMatchArch
18 from Library
.Xml
.XmlRoutines
import XmlElement
19 from Library
.Xml
.XmlRoutines
import XmlAttribute
20 from Library
.Xml
.XmlRoutines
import XmlNode
21 from Library
.Xml
.XmlRoutines
import XmlList
22 from Library
.Xml
.XmlRoutines
import CreateXmlElement
23 from Object
.POM
.CommonObject
import GuidVersionObject
24 from Object
.POM
.ModuleObject
import BootModeObject
25 from Object
.POM
.ModuleObject
import DepexObject
26 from Object
.POM
.ModuleObject
import ModuleObject
27 from Object
.POM
.ModuleObject
import EventObject
28 from Object
.POM
.ModuleObject
import HobObject
29 from Object
.POM
.ModuleObject
import SourceFileObject
30 from Object
.POM
.ModuleObject
import PackageDependencyObject
31 from Object
.POM
.ModuleObject
import ExternObject
32 from Object
.POM
.ModuleObject
import BinaryFileObject
33 from Object
.POM
.ModuleObject
import AsBuiltObject
34 from Object
.POM
.ModuleObject
import BinaryBuildFlagObject
35 from Xml
.CommonXml
import ClonedFromXml
36 from Xml
.CommonXml
import HeaderXml
37 from Xml
.CommonXml
import HelpTextXml
38 from Xml
.CommonXml
import CommonDefinesXml
39 from Xml
.CommonXml
import LibraryClassXml
40 from Xml
.CommonXml
import UserExtensionsXml
41 from Xml
.CommonXml
import MiscellaneousFileXml
42 from Xml
.CommonXml
import FilenameXml
43 from Xml
.GuidProtocolPpiXml
import GuidXml
44 from Xml
.GuidProtocolPpiXml
import ProtocolXml
45 from Xml
.GuidProtocolPpiXml
import PpiXml
46 from Xml
.PcdXml
import PcdEntryXml
47 from Xml
.XmlParserMisc
import GetHelpTextList
48 from Library
import GlobalData
49 from Library
.Misc
import GetSplitValueList
53 # represent the following XML item
57 # FileType=" FileType " {1}
58 # SupArchList=" ArchListType " {0,1}
59 # FeatureFlag=" FeatureFlagExpression " {0,1} >
62 # <AsBuilt> ... </AsBuilt> {0,}
65 class BinaryFileXml(object):
69 self
.PatchPcdValues
= ''
71 self
.LibraryInstances
= ''
74 def FromXml(self
, Item
, Key
):
77 BinaryFile
= BinaryFileObject()
79 SupArchList
= ['COMMON']
80 for SubItem
in XmlList(Item
, '%s/Filename' % Key
):
82 Bxml
= Axml
.FromXml(SubItem
, 'Filename')
83 FilenameList
.append(Bxml
)
84 BinaryFile
.SetFileNameList(FilenameList
)
85 for FileName
in FilenameList
:
86 if FileName
.GetSupArchList():
87 SupArchList
= FileName
.GetSupArchList()
88 BinaryFile
.SetSupArchList(SupArchList
)
89 if GlobalData
.gIS_BINARY_INF
:
91 for AsBuiltItem
in XmlList(Item
, '%s/AsBuilt' % Key
):
92 AsBuilt
= AsBuiltObject()
94 PatchPcdValueList
= []
95 for SubItem
in XmlList(AsBuiltItem
, 'AsBuilt/PatchPcdValue'):
97 Bxml
= Axml
.FromXml(SubItem
, 'PatchPcdValue')
98 PatchPcdValueList
.append(Bxml
)
99 AsBuilt
.SetPatchPcdList(PatchPcdValueList
)
101 for SubItem
in XmlList(AsBuiltItem
, 'AsBuilt/PcdExValue'):
103 Bxml
= Axml
.FromXml(SubItem
, 'PcdExValue')
104 PcdExValueList
.append(Bxml
)
105 AsBuilt
.SetPcdExList(PcdExValueList
)
107 for SubItem
in XmlList(Item
, '%s/AsBuilt/LibraryInstances/GUID' % Key
):
108 GuidVerObj
= GuidVersionObject()
109 GUID
= XmlElement(SubItem
, 'GUID')
110 Version
= XmlAttribute(XmlNode(SubItem
, 'GUID'), 'Version')
111 GuidVerObj
.SetGuid(GUID
)
112 GuidVerObj
.SetVersion(Version
)
113 LibraryList
.append(GuidVerObj
)
114 if XmlList(Item
, '%s/AsBuilt/LibraryInstances' % Key
) and not LibraryList
:
116 AsBuilt
.SetLibraryInstancesList(LibraryList
)
118 for SubItem
in XmlList(Item
, '%s/AsBuilt/BuildFlags' % Key
):
119 BuildFlag
= BuildFlagXml()
120 BuildFlagList
.append(BuildFlag
.FromXml2(SubItem
, 'BuildFlags'))
121 AsBuilt
.SetBuildFlagsList(BuildFlagList
)
122 AsBuiltList
.append(AsBuilt
)
123 BinaryFile
.SetAsBuiltList(AsBuiltList
)
126 def ToXml(self
, BinaryFile
, Key
):
130 FilenameList
= BinaryFile
.GetFileNameList()
132 for Filename
in FilenameList
:
134 NodeList
.append(Tmp
.ToXml(Filename
, 'Filename'))
135 SupportArch
= Filename
.SupArchList
137 AsBuildList
= BinaryFile
.GetAsBuiltList()
138 PatchPcdValueList
= AsBuildList
.GetPatchPcdList()
139 PcdExList
= AsBuildList
.GetPcdExList()
140 LibGuidVerList
= AsBuildList
.GetLibraryInstancesList()
141 BuildFlagList
= AsBuildList
.GetBuildFlagsList()
145 for Pcd
in PatchPcdValueList
:
146 if IsMatchArch(Pcd
.SupArchList
, SupportArch
):
148 AsBuiltNodeList
.append(Tmp
.ToXml4(Pcd
, 'PatchPcdValue'))
150 for Pcd
in PcdExList
:
151 if IsMatchArch(Pcd
.SupArchList
, SupportArch
):
153 AsBuiltNodeList
.append(Tmp
.ToXml4(Pcd
, 'PcdExValue'))
156 for LibGuidVer
in LibGuidVerList
:
157 if LibGuidVer
.GetLibGuid() and IsMatchArch(LibGuidVer
.GetSupArchList(), SupportArch
):
159 CreateXmlElement('GUID', LibGuidVer
.GetLibGuid(), [], [['Version', LibGuidVer
.GetLibVersion()]])
160 GuiVerElemList
.append(GuiVerElem
)
161 if len(GuiVerElemList
) > 0:
162 LibGuidVerElem
= CreateXmlElement('LibraryInstances', '', GuiVerElemList
, [])
163 AsBuiltNodeList
.append(LibGuidVerElem
)
165 for BuildFlag
in BuildFlagList
:
166 if IsMatchArch(BuildFlag
.GetSupArchList(), SupportArch
):
167 for Item
in BuildFlag
.GetAsBuildList():
169 Elem
= CreateXmlElement('BuildFlags', ''.join(Item
), [], [])
170 AsBuiltNodeList
.append(Elem
)
172 if len(AsBuiltNodeList
) > 0:
173 Element
= CreateXmlElement('AsBuilt', '', AsBuiltNodeList
, [])
174 NodeList
.append(Element
)
176 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, [])
182 for Item
in self
.FileNames
:
183 Str
= Str
+ '\n\t' + str(Item
)
184 for Item
in self
.PatchPcdValues
:
185 Str
= Str
+ '\n\t' + str(Item
)
186 for Item
in self
.PcdExValues
:
187 Str
= Str
+ '\n\t' + str(Item
)
188 for Item
in self
.LibraryInstances
:
189 Str
= Str
+ '\n\t' + str(Item
)
190 for Item
in self
.BuildFlags
:
191 Str
= Str
+ '\n\t' + str(Item
)
197 class PackageXml(object):
199 self
.Description
= ''
202 self
.CommonDefines
= CommonDefinesXml()
204 def FromXml(self
, Item
, Key
):
205 self
.Description
= XmlElement(Item
, '%s/Description' % Key
)
206 self
.Guid
= XmlElement(Item
, '%s/GUID' % Key
)
207 self
.Version
= XmlAttribute(XmlNode(Item
, '%s/GUID' % Key
), 'Version')
208 self
.CommonDefines
.FromXml(XmlNode(Item
, '%s' % Key
), Key
)
210 PackageDependency
= PackageDependencyObject()
211 PackageDependency
.SetPackage(self
.Description
)
212 PackageDependency
.SetGuid(self
.Guid
)
213 PackageDependency
.SetVersion(self
.Version
)
214 PackageDependency
.SetFeatureFlag(ConvertNOTEQToNE(self
.CommonDefines
.FeatureFlag
))
215 PackageDependency
.SetSupArchList(self
.CommonDefines
.SupArchList
)
217 return PackageDependency
219 def ToXml(self
, PackageDependency
, Key
):
222 AttributeList
= [['SupArchList', GetStringOfList(PackageDependency
.GetSupArchList())],
223 ['FeatureFlag', ConvertNEToNOTEQ(PackageDependency
.GetFeatureFlag())], ]
224 Element1
= CreateXmlElement('GUID', PackageDependency
.GetGuid(), [],
225 [['Version', PackageDependency
.GetVersion()]])
226 NodeList
= [['Description', PackageDependency
.GetPackage()], Element1
, ]
227 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
232 Str
= "Description = %s Guid = %s Version = %s %s" \
233 % (self
.Description
, self
.Guid
, self
.Version
, self
.CommonDefines
)
238 class ExternXml(object):
240 self
.CommonDefines
= CommonDefinesXml()
242 self
.UnloadImage
= ''
243 self
.Constructor
= ''
246 self
.SupArchList
= ''
249 def FromXml(self
, Item
, Key
):
250 self
.CommonDefines
.FromXml(Item
, Key
)
251 self
.EntryPoint
= XmlElement(Item
, '%s/EntryPoint' % Key
)
252 self
.UnloadImage
= XmlElement(Item
, '%s/UnloadImage' % Key
)
253 self
.Constructor
= XmlElement(Item
, '%s/Constructor' % Key
)
254 self
.Destructor
= XmlElement(Item
, '%s/Destructor' % Key
)
256 Extern
= ExternObject()
257 Extern
.SetEntryPoint(self
.EntryPoint
)
258 Extern
.SetUnloadImage(self
.UnloadImage
)
259 Extern
.SetConstructor(self
.Constructor
)
260 Extern
.SetDestructor(self
.Destructor
)
261 if self
.CommonDefines
.SupModList
:
262 Extern
.SetSupModList(self
.CommonDefines
.SupModList
)
263 if self
.CommonDefines
.SupArchList
:
264 Extern
.SetSupArchList(self
.CommonDefines
.SupArchList
)
267 def ToXml(self
, Extern
, Key
):
272 if Extern
.GetEntryPoint():
273 NodeList
.append(['EntryPoint', Extern
.GetEntryPoint()])
274 if Extern
.GetUnloadImage():
275 NodeList
.append(['UnloadImage', Extern
.GetUnloadImage()])
276 if Extern
.GetConstructor():
277 NodeList
.append(['Constructor', Extern
.GetConstructor()])
278 if Extern
.GetDestructor():
279 NodeList
.append(['Destructor', Extern
.GetDestructor()])
280 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, [])
285 Str
= "EntryPoint = %s UnloadImage = %s Constructor = %s Destructor = %s %s" \
286 % (self
.EntryPoint
, self
.UnloadImage
, self
.Constructor
, self
.Destructor
, self
.CommonDefines
)
287 for Item
in self
.HelpText
:
288 Str
= Str
+ '\n\t' + str(Item
)
293 class DepexXml(object):
295 self
.CommonDefines
= CommonDefinesXml()
296 self
.Expression
= None
299 def FromXml(self
, Item
, Key
):
302 self
.CommonDefines
.FromXml(Item
, Key
)
303 self
.Expression
= XmlElement(Item
, '%s/Expression' % Key
)
304 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
305 HelpTextObj
= HelpTextXml()
306 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
307 self
.HelpText
.append(HelpTextObj
)
309 Depex
= DepexObject()
310 Depex
.SetDepex(self
.Expression
)
311 Depex
.SetModuleType(self
.CommonDefines
.SupModList
)
312 Depex
.SetSupArchList(self
.CommonDefines
.SupArchList
)
313 Depex
.SetFeatureFlag(self
.CommonDefines
.FeatureFlag
)
314 Depex
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
318 def ToXml(self
, Depex
, Key
):
321 AttributeList
= [['SupArchList', GetStringOfList(Depex
.GetSupArchList())],
322 ['SupModList', Depex
.GetModuleType()]]
323 NodeList
= [['Expression', Depex
.GetDepex()]]
324 if Depex
.GetHelpText():
326 NodeList
.append(Tmp
.ToXml(Depex
.GetHelpText(), 'HelpText'))
328 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
332 Str
= "Expression = %s" % (self
.Expression
)
333 for Item
in self
.HelpText
:
334 Str
= Str
+ '\n\t' + str(Item
)
340 class BootModeXml(object):
342 self
.SupportedBootModes
= ''
343 self
.CommonDefines
= CommonDefinesXml()
346 def FromXml(self
, Item
, Key
):
347 self
.SupportedBootModes
= \
348 XmlElement(Item
, '%s/SupportedBootModes' % Key
)
349 self
.CommonDefines
.FromXml(Item
, Key
)
350 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
351 HelpTextObj
= HelpTextXml()
352 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
353 self
.HelpText
.append(HelpTextObj
)
355 BootMode
= BootModeObject()
356 BootMode
.SetSupportedBootModes(self
.SupportedBootModes
)
357 BootMode
.SetUsage(self
.CommonDefines
.Usage
)
358 BootMode
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
362 def ToXml(self
, BootMode
, Key
):
365 AttributeList
= [['Usage', BootMode
.GetUsage()], ]
366 NodeList
= [['SupportedBootModes', BootMode
.GetSupportedBootModes()]]
367 for Item
in BootMode
.GetHelpTextList():
369 NodeList
.append(Tmp
.ToXml(Item
, 'HelpText'))
370 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
375 Str
= "SupportedBootModes = %s %s" % (self
.SupportedBootModes
, self
.CommonDefines
)
376 for Item
in self
.HelpText
:
377 Str
= Str
+ '\n\t' + str(Item
)
382 class EventXml(object):
386 self
.CommonDefines
= CommonDefinesXml()
389 def FromXml(self
, Item
, Key
):
390 self
.EventType
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'EventType')
391 self
.Name
= XmlElement(Item
, '%s' % Key
)
392 self
.CommonDefines
.FromXml(Item
, Key
)
393 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
394 HelpTextObj
= HelpTextXml()
395 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
396 self
.HelpText
.append(HelpTextObj
)
398 Event
= EventObject()
399 Event
.SetEventType(self
.EventType
)
400 Event
.SetUsage(self
.CommonDefines
.Usage
)
401 Event
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
405 def ToXml(self
, Event
, Key
):
408 AttributeList
= [['EventType', Event
.GetEventType()],
409 ['Usage', Event
.GetUsage()],
412 for Item
in Event
.GetHelpTextList():
414 NodeList
.append(Tmp
.ToXml(Item
, 'HelpText'))
415 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
420 Str
= "EventType = %s %s" % (self
.EventType
, self
.CommonDefines
)
421 for Item
in self
.HelpText
:
422 Str
= Str
+ '\n\t' + str(Item
)
427 class HobXml(object):
431 self
.CommonDefines
= CommonDefinesXml()
434 def FromXml(self
, Item
, Key
):
435 self
.HobType
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'HobType')
436 self
.Name
= XmlElement(Item
, '%s' % Key
)
437 self
.CommonDefines
.FromXml(Item
, Key
)
438 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
439 HelpTextObj
= HelpTextXml()
440 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
441 self
.HelpText
.append(HelpTextObj
)
444 Hob
.SetHobType(self
.HobType
)
445 Hob
.SetSupArchList(self
.CommonDefines
.SupArchList
)
446 Hob
.SetUsage(self
.CommonDefines
.Usage
)
447 Hob
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
451 def ToXml(self
, Hob
, Key
):
454 AttributeList
= [['HobType', Hob
.GetHobType()],
455 ['Usage', Hob
.GetUsage()],
456 ['SupArchList', GetStringOfList(Hob
.GetSupArchList())], ]
458 for Item
in Hob
.GetHelpTextList():
460 NodeList
.append(Tmp
.ToXml(Item
, 'HelpText'))
461 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
466 Str
= "HobType = %s %s" % (self
.HobType
, self
.CommonDefines
)
467 for Item
in self
.HelpText
:
468 Str
= Str
+ '\n\t' + str(Item
)
474 class SourceFileXml(object):
477 self
.ToolChainFamily
= ''
479 self
.CommonDefines
= CommonDefinesXml()
481 def FromXml(self
, Item
, Key
):
482 self
.ToolChainFamily
= XmlAttribute(Item
, 'Family')
483 self
.SourceFile
= XmlElement(Item
, 'Filename')
484 self
.CommonDefines
.FromXml(Item
, Key
)
486 self
.CommonDefines
.FeatureFlag
= ConvertNOTEQToNE(self
.CommonDefines
.FeatureFlag
)
488 SourceFile
= SourceFileObject()
489 SourceFile
.SetSourceFile(self
.SourceFile
)
490 SourceFile
.SetFamily(self
.ToolChainFamily
)
491 SourceFile
.SetSupArchList(self
.CommonDefines
.SupArchList
)
492 SourceFile
.SetFeatureFlag(self
.CommonDefines
.FeatureFlag
)
496 def ToXml(self
, SourceFile
, Key
):
499 FeatureFlag
= ConvertNEToNOTEQ(SourceFile
.GetFeatureFlag())
500 AttributeList
= [['SupArchList', GetStringOfList(SourceFile
.GetSupArchList())],
501 ['Family', SourceFile
.GetFamily()],
502 ['FeatureFlag', FeatureFlag
], ]
503 Root
= CreateXmlElement('%s' % Key
, SourceFile
.GetSourceFile(), [], AttributeList
)
509 class ModulePropertyXml(object):
511 self
.CommonDefines
= CommonDefinesXml()
514 self
.PcdIsDriver
= ''
515 self
.UefiSpecificationVersion
= ''
516 self
.PiSpecificationVersion
= ''
517 self
.SpecificationList
= []
518 self
.SpecificationVersion
= ''
523 def FromXml(self
, Item
, Key
, Header
=None):
524 self
.CommonDefines
.FromXml(Item
, Key
)
525 self
.ModuleType
= XmlElement(Item
, '%s/ModuleType' % Key
)
526 self
.Path
= XmlElement(Item
, '%s/Path' % Key
)
527 self
.PcdIsDriver
= XmlElement(Item
, '%s/PcdIsDriver' % Key
)
528 self
.UefiSpecificationVersion
= XmlElement(Item
, '%s/UefiSpecificationVersion' % Key
)
529 self
.PiSpecificationVersion
= XmlElement(Item
, '%s/PiSpecificationVersion' % Key
)
530 for SubItem
in XmlList(Item
, '%s/Specification' % Key
):
531 Specification
= XmlElement(SubItem
, '/Specification')
532 Version
= XmlAttribute(XmlNode(SubItem
, '/Specification'), 'Version')
533 self
.SpecificationList
.append((Specification
, Version
))
534 for SubItem
in XmlList(Item
, '%s/BootMode' % Key
):
536 BootMode
= Axml
.FromXml(SubItem
, 'BootMode')
537 self
.BootModes
.append(BootMode
)
538 for SubItem
in XmlList(Item
, '%s/Event' % Key
):
540 Event
= Axml
.FromXml(SubItem
, 'Event')
541 self
.Events
.append(Event
)
542 for SubItem
in XmlList(Item
, '%s/HOB' % Key
):
544 Hob
= Axml
.FromXml(SubItem
, 'HOB')
545 self
.HOBs
.append(Hob
)
548 Header
= ModuleObject()
550 Header
.SetModuleType(self
.ModuleType
)
551 Header
.SetSupArchList(self
.CommonDefines
.SupArchList
)
552 Header
.SetModulePath(self
.Path
)
554 Header
.SetPcdIsDriver(self
.PcdIsDriver
)
555 Header
.SetUefiSpecificationVersion(self
.UefiSpecificationVersion
)
556 Header
.SetPiSpecificationVersion(self
.PiSpecificationVersion
)
557 Header
.SetSpecList(self
.SpecificationList
)
559 return Header
, self
.BootModes
, self
.Events
, self
.HOBs
562 def ToXml(self
, Header
, BootModes
, Events
, Hobs
, Key
):
565 AttributeList
= [['SupArchList', GetStringOfList(Header
.GetSupArchList())], ]
567 NodeList
= [['ModuleType', Header
.GetModuleType()],
568 ['Path', Header
.GetModulePath()],
569 ['PcdIsDriver', Header
.GetPcdIsDriver()],
570 ['UefiSpecificationVersion', Header
.GetUefiSpecificationVersion()],
571 ['PiSpecificationVersion', Header
.GetPiSpecificationVersion()],
573 for Item
in Header
.GetSpecList():
575 SpecElem
= CreateXmlElement('Specification', Spec
, [], [['Version', Version
]])
576 NodeList
.append(SpecElem
)
578 for Item
in BootModes
:
580 NodeList
.append(Tmp
.ToXml(Item
, 'BootMode'))
583 NodeList
.append(Tmp
.ToXml(Item
, 'Event'))
586 NodeList
.append(Tmp
.ToXml(Item
, 'HOB'))
587 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
592 Str
= "ModuleType = %s Path = %s PcdIsDriver = %s UefiSpecificationVersion = %s PiSpecificationVersion = %s \
593 Specification = %s SpecificationVersion = %s %s" % \
594 (self
.ModuleType
, self
.Path
, self
.PcdIsDriver
, \
595 self
.UefiSpecificationVersion
, self
.PiSpecificationVersion
, \
596 self
.SpecificationList
, self
.SpecificationVersion
, self
.CommonDefines
)
597 for Item
in self
.BootModes
:
598 Str
= Str
+ '\n\t' + str(Item
)
599 for Item
in self
.Events
:
600 Str
= Str
+ '\n\t' + str(Item
)
601 for Item
in self
.HOBs
:
602 Str
= Str
+ '\n\t' + str(Item
)
608 class ModuleSurfaceAreaXml(object):
609 def __init__(self
, Package
=''):
612 # indicate the package that this module resides in
614 self
.Package
= Package
616 def FromXml2(self
, Item
, Module
):
623 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/PeiDepex'):
625 Depex
= Tmp
.FromXml(XmlNode(SubItem
, 'PeiDepex'), 'PeiDepex')
626 PeiDepexList
.append(Depex
)
627 Module
.SetPeiDepex(PeiDepexList
)
633 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/DxeDepex'):
635 Depex
= Tmp
.FromXml(XmlNode(SubItem
, 'DxeDepex'), 'DxeDepex')
636 DxeDepexList
.append(Depex
)
637 Module
.SetDxeDepex(DxeDepexList
)
643 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/SmmDepex'):
645 Depex
= Tmp
.FromXml(XmlNode(SubItem
, 'SmmDepex'), 'SmmDepex')
646 SmmDepexList
.append(Depex
)
647 Module
.SetSmmDepex(SmmDepexList
)
651 Tmp
= MiscellaneousFileXml()
652 MiscFileList
= Tmp
.FromXml(XmlNode(Item
, '/ModuleSurfaceArea/MiscellaneousFiles'), 'MiscellaneousFiles')
654 Module
.SetMiscFileList([MiscFileList
])
656 Module
.SetMiscFileList([])
661 for Item
in XmlList(Item
, '/ModuleSurfaceArea/UserExtensions'):
662 Tmp
= UserExtensionsXml()
663 UserExtension
= Tmp
.FromXml(Item
, 'UserExtensions')
664 Module
.SetUserExtensionList(Module
.GetUserExtensionList() + [UserExtension
])
668 def FromXml(self
, Item
, Key
, IsStandAlongModule
=False):
669 IsBinaryModule
= XmlAttribute(Item
, 'BinaryModule')
674 Module
= Tmp
.FromXml(XmlNode(Item
, '/%s/Header' % Key
), 'Header', True, IsStandAlongModule
)
675 Module
.SetBinaryModule(IsBinaryModule
)
678 GlobalData
.gIS_BINARY_INF
= True
683 Tmp
= ModulePropertyXml()
684 (Module
, BootModes
, Events
, HOBs
) = \
685 Tmp
.FromXml(XmlNode(Item
, '/ModuleSurfaceArea/ModuleProperties'), 'ModuleProperties', Module
)
686 Module
.SetBootModeList(BootModes
)
687 Module
.SetEventList(Events
)
688 Module
.SetHobList(HOBs
)
692 Tmp
= ClonedFromXml()
693 ClonedFrom
= Tmp
.FromXml(XmlNode(Item
, '/ModuleSurfaceArea/ClonedFrom'), 'ClonedFrom')
695 Module
.SetClonedFrom(ClonedFrom
)
700 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):
701 Tmp
= LibraryClassXml()
702 LibraryClass
= Tmp
.FromXml(SubItem
, 'LibraryClass')
703 Module
.SetLibraryClassList(Module
.GetLibraryClassList() + [LibraryClass
])
705 if XmlList(Item
, '/ModuleSurfaceArea/LibraryClassDefinitions') and \
706 not XmlList(Item
, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):
707 Module
.SetLibraryClassList([None])
712 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/SourceFiles/Filename'):
713 Tmp
= SourceFileXml()
714 SourceFile
= Tmp
.FromXml(SubItem
, 'Filename')
715 Module
.SetSourceFileList(Module
.GetSourceFileList() + [SourceFile
])
717 if XmlList(Item
, '/ModuleSurfaceArea/SourceFiles') and \
718 not XmlList(Item
, '/ModuleSurfaceArea/SourceFiles/Filename') :
719 Module
.SetSourceFileList([None])
724 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/BinaryFiles/BinaryFile'):
725 Tmp
= BinaryFileXml()
726 BinaryFile
= Tmp
.FromXml(SubItem
, 'BinaryFile')
727 Module
.SetBinaryFileList(Module
.GetBinaryFileList() + [BinaryFile
])
729 if XmlList(Item
, '/ModuleSurfaceArea/BinaryFiles') and \
730 not XmlList(Item
, '/ModuleSurfaceArea/BinaryFiles/BinaryFile') :
731 Module
.SetBinaryFileList([None])
733 # PackageDependencies
735 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/PackageDependencies/Package'):
737 PackageDependency
= Tmp
.FromXml(SubItem
, 'Package')
738 Module
.SetPackageDependencyList(Module
.GetPackageDependencyList() + [PackageDependency
])
740 if XmlList(Item
, '/ModuleSurfaceArea/PackageDependencies') and \
741 not XmlList(Item
, '/ModuleSurfaceArea/PackageDependencies/Package'):
742 Module
.SetPackageDependencyList([None])
747 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/Guids/GuidCName'):
748 Tmp
= GuidXml('Module')
749 GuidProtocolPpi
= Tmp
.FromXml(SubItem
, 'GuidCName')
750 Module
.SetGuidList(Module
.GetGuidList() + [GuidProtocolPpi
])
752 if XmlList(Item
, '/ModuleSurfaceArea/Guids') and not XmlList(Item
, '/ModuleSurfaceArea/Guids/GuidCName'):
753 Module
.SetGuidList([None])
758 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/Protocols/Protocol'):
759 Tmp
= ProtocolXml('Module')
760 GuidProtocolPpi
= Tmp
.FromXml(SubItem
, 'Protocol')
761 Module
.SetProtocolList(Module
.GetProtocolList() + [GuidProtocolPpi
])
763 if XmlList(Item
, '/ModuleSurfaceArea/Protocols') and not XmlList(Item
, '/ModuleSurfaceArea/Protocols/Protocol'):
764 Module
.SetProtocolList([None])
769 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/PPIs/Ppi'):
770 Tmp
= PpiXml('Module')
771 GuidProtocolPpi
= Tmp
.FromXml(SubItem
, 'Ppi')
772 Module
.SetPpiList(Module
.GetPpiList() + [GuidProtocolPpi
])
774 if XmlList(Item
, '/ModuleSurfaceArea/PPIs') and not XmlList(Item
, '/ModuleSurfaceArea/PPIs/Ppi'):
775 Module
.SetPpiList([None])
780 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/Externs/Extern'):
782 Extern
= Tmp
.FromXml(SubItem
, 'Extern')
783 Module
.SetExternList(Module
.GetExternList() + [Extern
])
785 if XmlList(Item
, '/ModuleSurfaceArea/Externs') and not XmlList(Item
, '/ModuleSurfaceArea/Externs/Extern'):
786 Module
.SetExternList([None])
788 if not Module
.GetBinaryModule():
792 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):
794 PcdEntry
= Tmp
.FromXml3(SubItem
, 'PcdEntry')
795 Module
.SetPcdList(Module
.GetPcdList() + [PcdEntry
])
797 if XmlList(Item
, '/ModuleSurfaceArea/PcdCoded') and \
798 not XmlList(Item
, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):
799 Module
.SetPcdList([None])
801 Module
= self
.FromXml2(Item
, Module
)
803 # return the module object
808 def ToXml(self
, Module
):
812 # Create root node of module surface area
814 DomModule
= minidom
.Document().createElement('ModuleSurfaceArea')
815 if Module
.GetBinaryModule():
816 DomModule
.setAttribute('BinaryModule', 'true')
822 DomModule
.appendChild(Tmp
.ToXml(Module
, 'Header'))
826 Tmp
= ModulePropertyXml()
827 DomModule
.appendChild(Tmp
.ToXml(Module
, Module
.GetBootModeList(), Module
.GetEventList(), Module
.GetHobList(), \
832 Tmp
= ClonedFromXml()
833 if Module
.GetClonedFrom():
834 DomModule
.appendChild(Tmp
.ToXml(Module
.GetClonedFrom(), 'ClonedFrom'))
838 LibraryClassNode
= CreateXmlElement('LibraryClassDefinitions', '', [], [])
839 for LibraryClass
in Module
.GetLibraryClassList():
840 Tmp
= LibraryClassXml()
841 LibraryClassNode
.appendChild(Tmp
.ToXml2(LibraryClass
, 'LibraryClass'))
842 DomModule
.appendChild(LibraryClassNode
)
846 SourceFileNode
= CreateXmlElement('SourceFiles', '', [], [])
847 for SourceFile
in Module
.GetSourceFileList():
848 Tmp
= SourceFileXml()
849 SourceFileNode
.appendChild(Tmp
.ToXml(SourceFile
, 'Filename'))
850 DomModule
.appendChild(SourceFileNode
)
854 BinaryFileNode
= CreateXmlElement('BinaryFiles', '', [], [])
855 for BinaryFile
in Module
.GetBinaryFileList():
856 Tmp
= BinaryFileXml()
857 BinaryFileNode
.appendChild(Tmp
.ToXml(BinaryFile
, 'BinaryFile'))
858 DomModule
.appendChild(BinaryFileNode
)
860 # PackageDependencies
862 PackageDependencyNode
= CreateXmlElement('PackageDependencies', '', [], [])
863 for PackageDependency
in Module
.GetPackageDependencyList():
865 PackageDependencyNode
.appendChild(Tmp
.ToXml(PackageDependency
, 'Package'))
866 DomModule
.appendChild(PackageDependencyNode
)
871 GuidProtocolPpiNode
= CreateXmlElement('Guids', '', [], [])
872 for GuidProtocolPpi
in Module
.GetGuidList():
873 Tmp
= GuidXml('Module')
874 GuidProtocolPpiNode
.appendChild(Tmp
.ToXml(GuidProtocolPpi
, 'GuidCName'))
875 DomModule
.appendChild(GuidProtocolPpiNode
)
880 GuidProtocolPpiNode
= CreateXmlElement('Protocols', '', [], [])
881 for GuidProtocolPpi
in Module
.GetProtocolList():
882 Tmp
= ProtocolXml('Module')
883 GuidProtocolPpiNode
.appendChild(Tmp
.ToXml(GuidProtocolPpi
, 'Protocol'))
884 DomModule
.appendChild(GuidProtocolPpiNode
)
889 GuidProtocolPpiNode
= CreateXmlElement('PPIs', '', [], [])
890 for GuidProtocolPpi
in Module
.GetPpiList():
891 Tmp
= PpiXml('Module')
892 GuidProtocolPpiNode
.appendChild(Tmp
.ToXml(GuidProtocolPpi
, 'Ppi'))
893 DomModule
.appendChild(GuidProtocolPpiNode
)
897 ExternNode
= CreateXmlElement('Externs', '', [], [])
898 for Extern
in Module
.GetExternList():
900 ExternNode
.appendChild(Tmp
.ToXml(Extern
, 'Extern'))
901 DomModule
.appendChild(ExternNode
)
905 PcdEntryNode
= CreateXmlElement('PcdCoded', '', [], [])
906 for PcdEntry
in Module
.GetPcdList():
908 PcdEntryNode
.appendChild(Tmp
.ToXml3(PcdEntry
, 'PcdEntry'))
909 DomModule
.appendChild(PcdEntryNode
)
914 if Module
.GetPeiDepex():
915 for Item
in Module
.GetPeiDepex():
917 DomModule
.appendChild(Tmp
.ToXml(Item
, 'PeiDepex'))
922 if Module
.GetDxeDepex():
923 for Item
in Module
.GetDxeDepex():
925 DomModule
.appendChild(Tmp
.ToXml(Item
, 'DxeDepex'))
930 if Module
.GetSmmDepex():
931 for Item
in Module
.GetSmmDepex():
933 DomModule
.appendChild(Tmp
.ToXml(Item
, 'SmmDepex'))
938 if Module
.GetMiscFileList():
939 Tmp
= MiscellaneousFileXml()
940 DomModule
.appendChild(Tmp
.ToXml(Module
.GetMiscFileList()[0], 'MiscellaneousFiles'))
944 if Module
.GetUserExtensionList():
945 for UserExtension
in Module
.GetUserExtensionList():
946 Tmp
= UserExtensionsXml()
947 DomModule
.appendChild(Tmp
.ToXml(UserExtension
, 'UserExtensions'))
952 # BuildFlagXml used to generate BuildFlag for <AsBuilt>
954 class BuildFlagXml(object):
959 self
.AsBuiltFlags
= ''
961 def FromXml(self
, Item
, Key
):
962 self
.Target
= XmlElement(Item
, '%s/Target' % Key
)
963 self
.TagName
= XmlElement(Item
, '%s/TagName' % Key
)
964 self
.Family
= XmlElement(Item
, '%s/Family' % Key
)
966 BuildFlag
= BinaryBuildFlagObject()
968 BuildFlag
.SetTarget(self
.Target
)
969 BuildFlag
.SetTagName(self
.TagName
)
970 BuildFlag
.SetFamily(self
.Family
)
975 # For AsBuild INF usage
977 def FromXml2(self
, Item
, Key
):
978 self
.AsBuiltFlags
= XmlElement(Item
, '%s' % Key
)
980 LineList
= GetSplitValueList(self
.AsBuiltFlags
, '\n')
983 for Line
in LineList
:
985 ReturnLine
= "# " + Line
987 ReturnLine
= ReturnLine
+ '\n' + '# ' + Line
990 BuildFlag
= BinaryBuildFlagObject()
991 BuildFlag
.SetAsBuiltOptionFlags(ReturnLine
)
995 def ToXml(self
, BuildFlag
, Key
):
1000 NodeList
.append(['BuildFlags', BuildFlag
])
1002 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)