]>
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 - 2014, Intel Corporation. All rights reserved.<BR>
6 # This program and the accompanying materials are licensed and made available
7 # under the terms and conditions of the BSD License which accompanies this
8 # distribution. The full text of the license may be found at
9 # http://opensource.org/licenses/bsd-license.php
11 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 from xml
.dom
import minidom
20 from Library
.String
import ConvertNEToNOTEQ
21 from Library
.String
import ConvertNOTEQToNE
22 from Library
.String
import GetStringOfList
23 from Library
.String
import IsMatchArch
24 from Library
.Xml
.XmlRoutines
import XmlElement
25 from Library
.Xml
.XmlRoutines
import XmlAttribute
26 from Library
.Xml
.XmlRoutines
import XmlNode
27 from Library
.Xml
.XmlRoutines
import XmlList
28 from Library
.Xml
.XmlRoutines
import CreateXmlElement
29 from Object
.POM
.CommonObject
import GuidVersionObject
30 from Object
.POM
.ModuleObject
import BootModeObject
31 from Object
.POM
.ModuleObject
import DepexObject
32 from Object
.POM
.ModuleObject
import ModuleObject
33 from Object
.POM
.ModuleObject
import EventObject
34 from Object
.POM
.ModuleObject
import HobObject
35 from Object
.POM
.ModuleObject
import SourceFileObject
36 from Object
.POM
.ModuleObject
import PackageDependencyObject
37 from Object
.POM
.ModuleObject
import ExternObject
38 from Object
.POM
.ModuleObject
import BinaryFileObject
39 from Object
.POM
.ModuleObject
import AsBuiltObject
40 from Object
.POM
.ModuleObject
import BinaryBuildFlagObject
41 from Xml
.CommonXml
import ClonedFromXml
42 from Xml
.CommonXml
import HeaderXml
43 from Xml
.CommonXml
import HelpTextXml
44 from Xml
.CommonXml
import CommonDefinesXml
45 from Xml
.CommonXml
import LibraryClassXml
46 from Xml
.CommonXml
import UserExtensionsXml
47 from Xml
.CommonXml
import MiscellaneousFileXml
48 from Xml
.CommonXml
import FilenameXml
49 from Xml
.GuidProtocolPpiXml
import GuidXml
50 from Xml
.GuidProtocolPpiXml
import ProtocolXml
51 from Xml
.GuidProtocolPpiXml
import PpiXml
52 from Xml
.PcdXml
import PcdEntryXml
53 from Xml
.XmlParserMisc
import GetHelpTextList
54 from Library
import GlobalData
55 from Library
.Misc
import GetSplitValueList
59 # represent the following XML item
63 # FileType=" FileType " {1}
64 # SupArchList=" ArchListType " {0,1}
65 # FeatureFlag=" FeatureFlagExpression " {0,1} >
68 # <AsBuilt> ... </AsBuilt> {0,}
71 class BinaryFileXml(object):
75 self
.PatchPcdValues
= ''
77 self
.LibraryInstances
= ''
80 def FromXml(self
, Item
, Key
):
83 BinaryFile
= BinaryFileObject()
85 for SubItem
in XmlList(Item
, '%s/Filename' % Key
):
87 Bxml
= Axml
.FromXml(SubItem
, 'Filename')
88 FilenameList
.append(Bxml
)
89 BinaryFile
.SetFileNameList(FilenameList
)
90 if GlobalData
.gIS_BINARY_INF
:
92 for AsBuiltItem
in XmlList(Item
, '%s/AsBuilt' % Key
):
93 AsBuilt
= AsBuiltObject()
95 PatchPcdValueList
= []
96 for SubItem
in XmlList(AsBuiltItem
, 'AsBuilt/PatchPcdValue'):
98 Bxml
= Axml
.FromXml(SubItem
, 'PatchPcdValue')
99 PatchPcdValueList
.append(Bxml
)
100 AsBuilt
.SetPatchPcdList(PatchPcdValueList
)
102 for SubItem
in XmlList(AsBuiltItem
, 'AsBuilt/PcdExValue'):
104 Bxml
= Axml
.FromXml(SubItem
, 'PcdExValue')
105 PcdExValueList
.append(Bxml
)
106 AsBuilt
.SetPcdExList(PcdExValueList
)
108 for SubItem
in XmlList(Item
, '%s/AsBuilt/LibraryInstances/GUID' % Key
):
109 GuidVerObj
= GuidVersionObject()
110 GUID
= XmlElement(SubItem
, 'GUID')
111 Version
= XmlAttribute(XmlNode(SubItem
, 'GUID'), 'Version')
112 GuidVerObj
.SetGuid(GUID
)
113 GuidVerObj
.SetVersion(Version
)
114 LibraryList
.append(GuidVerObj
)
115 if XmlList(Item
, '%s/AsBuilt/LibraryInstances' % Key
) and not LibraryList
:
117 AsBuilt
.SetLibraryInstancesList(LibraryList
)
119 for SubItem
in XmlList(Item
, '%s/AsBuilt/BuildFlags' % Key
):
120 BuildFlag
= BuildFlagXml()
121 BuildFlagList
.append(BuildFlag
.FromXml2(SubItem
, 'BuildFlags'))
122 AsBuilt
.SetBuildFlagsList(BuildFlagList
)
123 AsBuiltList
.append(AsBuilt
)
124 BinaryFile
.SetAsBuiltList(AsBuiltList
)
127 def ToXml(self
, BinaryFile
, Key
):
131 FilenameList
= BinaryFile
.GetFileNameList()
133 for Filename
in FilenameList
:
135 NodeList
.append(Tmp
.ToXml(Filename
, 'Filename'))
136 SupportArch
= Filename
.SupArchList
138 if GlobalData
.gIS_BINARY_INF
:
139 AsBuildList
= BinaryFile
.GetAsBuiltList()
140 PatchPcdValueList
= AsBuildList
.GetPatchPcdList()
141 PcdExList
= AsBuildList
.GetPcdExList()
142 LibGuidVerList
= AsBuildList
.GetLibraryInstancesList()
143 BuildFlagList
= AsBuildList
.GetBuildFlagsList()
147 for Pcd
in PatchPcdValueList
:
148 if IsMatchArch(Pcd
.SupArchList
, SupportArch
):
150 AsBuiltNodeList
.append(Tmp
.ToXml4(Pcd
, 'PatchPcdValue'))
152 for Pcd
in PcdExList
:
153 if IsMatchArch(Pcd
.SupArchList
, SupportArch
):
155 AsBuiltNodeList
.append(Tmp
.ToXml4(Pcd
, 'PcdExValue'))
158 for LibGuidVer
in LibGuidVerList
:
160 CreateXmlElement('GUID', LibGuidVer
.GetLibGuid(), [], [['Version', LibGuidVer
.GetLibVersion()]])
161 GuiVerElemList
.append(GuiVerElem
)
162 if len(GuiVerElemList
) > 0:
163 LibGuidVerElem
= CreateXmlElement('LibraryInstances', '', GuiVerElemList
, [])
164 AsBuiltNodeList
.append(LibGuidVerElem
)
166 for BuildFlag
in BuildFlagList
:
168 Elem
= CreateXmlElement('BuildFlags', ''.join(BuildFlag
), [], [])
169 AsBuiltNodeList
.append(Elem
)
171 if len(AsBuiltNodeList
) > 0:
172 Element
= CreateXmlElement('AsBuilt', '', AsBuiltNodeList
, [])
173 NodeList
.append(Element
)
175 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, [])
181 for Item
in self
.FileNames
:
182 Str
= Str
+ '\n\t' + str(Item
)
183 for Item
in self
.PatchPcdValues
:
184 Str
= Str
+ '\n\t' + str(Item
)
185 for Item
in self
.PcdExValues
:
186 Str
= Str
+ '\n\t' + str(Item
)
187 for Item
in self
.LibraryInstances
:
188 Str
= Str
+ '\n\t' + str(Item
)
189 for Item
in self
.BuildFlags
:
190 Str
= Str
+ '\n\t' + str(Item
)
196 class PackageXml(object):
198 self
.Description
= ''
201 self
.CommonDefines
= CommonDefinesXml()
203 def FromXml(self
, Item
, Key
):
204 self
.Description
= XmlElement(Item
, '%s/Description' % Key
)
205 self
.Guid
= XmlElement(Item
, '%s/GUID' % Key
)
206 self
.Version
= XmlAttribute(XmlNode(Item
, '%s/GUID' % Key
), 'Version')
207 self
.CommonDefines
.FromXml(XmlNode(Item
, '%s' % Key
), Key
)
209 PackageDependency
= PackageDependencyObject()
210 PackageDependency
.SetPackage(self
.Description
)
211 PackageDependency
.SetGuid(self
.Guid
)
212 PackageDependency
.SetVersion(self
.Version
)
213 PackageDependency
.SetFeatureFlag(ConvertNOTEQToNE(self
.CommonDefines
.FeatureFlag
))
214 PackageDependency
.SetSupArchList(self
.CommonDefines
.SupArchList
)
216 return PackageDependency
218 def ToXml(self
, PackageDependency
, Key
):
221 AttributeList
= [['SupArchList', GetStringOfList(PackageDependency
.GetSupArchList())],
222 ['FeatureFlag', ConvertNEToNOTEQ(PackageDependency
.GetFeatureFlag())], ]
223 Element1
= CreateXmlElement('GUID', PackageDependency
.GetGuid(), [],
224 [['Version', PackageDependency
.GetVersion()]])
225 NodeList
= [['Description', PackageDependency
.GetPackage()], Element1
, ]
226 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
231 Str
= "Description = %s Guid = %s Version = %s %s" \
232 % (self
.Description
, self
.Guid
, self
.Version
, self
.CommonDefines
)
237 class ExternXml(object):
239 self
.CommonDefines
= CommonDefinesXml()
241 self
.UnloadImage
= ''
242 self
.Constructor
= ''
245 self
.SupArchList
= ''
248 def FromXml(self
, Item
, Key
):
249 self
.CommonDefines
.FromXml(Item
, Key
)
250 self
.EntryPoint
= XmlElement(Item
, '%s/EntryPoint' % Key
)
251 self
.UnloadImage
= XmlElement(Item
, '%s/UnloadImage' % Key
)
252 self
.Constructor
= XmlElement(Item
, '%s/Constructor' % Key
)
253 self
.Destructor
= XmlElement(Item
, '%s/Destructor' % Key
)
255 Extern
= ExternObject()
256 Extern
.SetEntryPoint(self
.EntryPoint
)
257 Extern
.SetUnloadImage(self
.UnloadImage
)
258 Extern
.SetConstructor(self
.Constructor
)
259 Extern
.SetDestructor(self
.Destructor
)
260 if self
.CommonDefines
.SupModList
:
261 Extern
.SetSupModList(self
.CommonDefines
.SupModList
)
262 if self
.CommonDefines
.SupArchList
:
263 Extern
.SetSupArchList(self
.CommonDefines
.SupArchList
)
266 def ToXml(self
, Extern
, Key
):
271 if Extern
.GetEntryPoint():
272 NodeList
.append(['EntryPoint', Extern
.GetEntryPoint()])
273 if Extern
.GetUnloadImage():
274 NodeList
.append(['UnloadImage', Extern
.GetUnloadImage()])
275 if Extern
.GetConstructor():
276 NodeList
.append(['Constructor', Extern
.GetConstructor()])
277 if Extern
.GetDestructor():
278 NodeList
.append(['Destructor', Extern
.GetDestructor()])
279 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, [])
284 Str
= "EntryPoint = %s UnloadImage = %s Constructor = %s Destructor = %s %s" \
285 % (self
.EntryPoint
, self
.UnloadImage
, self
.Constructor
, self
.Destructor
, self
.CommonDefines
)
286 for Item
in self
.HelpText
:
287 Str
= Str
+ '\n\t' + str(Item
)
292 class DepexXml(object):
294 self
.CommonDefines
= CommonDefinesXml()
295 self
.Expression
= None
298 def FromXml(self
, Item
, Key
):
301 self
.CommonDefines
.FromXml(Item
, Key
)
302 self
.Expression
= XmlElement(Item
, '%s/Expression' % Key
)
303 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
304 HelpTextObj
= HelpTextXml()
305 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
306 self
.HelpText
.append(HelpTextObj
)
308 Depex
= DepexObject()
309 Depex
.SetDepex(self
.Expression
)
310 Depex
.SetModuleType(self
.CommonDefines
.SupModList
)
311 Depex
.SetSupArchList(self
.CommonDefines
.SupArchList
)
312 Depex
.SetFeatureFlag(self
.CommonDefines
.FeatureFlag
)
313 Depex
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
317 def ToXml(self
, Depex
, Key
):
320 AttributeList
= [['SupArchList', GetStringOfList(Depex
.GetSupArchList())],
321 ['SupModList', Depex
.GetModuleType()]]
322 NodeList
= [['Expression', Depex
.GetDepex()]]
323 if Depex
.GetHelpText():
325 NodeList
.append(Tmp
.ToXml(Depex
.GetHelpText(), 'HelpText'))
327 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
331 Str
= "Expression = %s" % (self
.Expression
)
332 for Item
in self
.HelpText
:
333 Str
= Str
+ '\n\t' + str(Item
)
339 class BootModeXml(object):
341 self
.SupportedBootModes
= ''
342 self
.CommonDefines
= CommonDefinesXml()
345 def FromXml(self
, Item
, Key
):
346 self
.SupportedBootModes
= \
347 XmlElement(Item
, '%s/SupportedBootModes' % Key
)
348 self
.CommonDefines
.FromXml(Item
, Key
)
349 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
350 HelpTextObj
= HelpTextXml()
351 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
352 self
.HelpText
.append(HelpTextObj
)
354 BootMode
= BootModeObject()
355 BootMode
.SetSupportedBootModes(self
.SupportedBootModes
)
356 BootMode
.SetUsage(self
.CommonDefines
.Usage
)
357 BootMode
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
361 def ToXml(self
, BootMode
, Key
):
364 AttributeList
= [['Usage', BootMode
.GetUsage()], ]
365 NodeList
= [['SupportedBootModes', BootMode
.GetSupportedBootModes()]]
366 for Item
in BootMode
.GetHelpTextList():
368 NodeList
.append(Tmp
.ToXml(Item
, 'HelpText'))
369 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
374 Str
= "SupportedBootModes = %s %s" % (self
.SupportedBootModes
, self
.CommonDefines
)
375 for Item
in self
.HelpText
:
376 Str
= Str
+ '\n\t' + str(Item
)
381 class EventXml(object):
385 self
.CommonDefines
= CommonDefinesXml()
388 def FromXml(self
, Item
, Key
):
389 self
.EventType
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'EventType')
390 self
.Name
= XmlElement(Item
, '%s' % Key
)
391 self
.CommonDefines
.FromXml(Item
, Key
)
392 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
393 HelpTextObj
= HelpTextXml()
394 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
395 self
.HelpText
.append(HelpTextObj
)
397 Event
= EventObject()
398 Event
.SetEventType(self
.EventType
)
399 Event
.SetUsage(self
.CommonDefines
.Usage
)
400 Event
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
404 def ToXml(self
, Event
, Key
):
407 AttributeList
= [['EventType', Event
.GetEventType()],
408 ['Usage', Event
.GetUsage()],
411 for Item
in Event
.GetHelpTextList():
413 NodeList
.append(Tmp
.ToXml(Item
, 'HelpText'))
414 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
419 Str
= "EventType = %s %s" % (self
.EventType
, self
.CommonDefines
)
420 for Item
in self
.HelpText
:
421 Str
= Str
+ '\n\t' + str(Item
)
426 class HobXml(object):
430 self
.CommonDefines
= CommonDefinesXml()
433 def FromXml(self
, Item
, Key
):
434 self
.HobType
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'HobType')
435 self
.Name
= XmlElement(Item
, '%s' % Key
)
436 self
.CommonDefines
.FromXml(Item
, Key
)
437 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
438 HelpTextObj
= HelpTextXml()
439 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
440 self
.HelpText
.append(HelpTextObj
)
443 Hob
.SetHobType(self
.HobType
)
444 Hob
.SetSupArchList(self
.CommonDefines
.SupArchList
)
445 Hob
.SetUsage(self
.CommonDefines
.Usage
)
446 Hob
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
450 def ToXml(self
, Hob
, Key
):
453 AttributeList
= [['HobType', Hob
.GetHobType()],
454 ['Usage', Hob
.GetUsage()],
455 ['SupArchList', GetStringOfList(Hob
.GetSupArchList())], ]
457 for Item
in Hob
.GetHelpTextList():
459 NodeList
.append(Tmp
.ToXml(Item
, 'HelpText'))
460 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
465 Str
= "HobType = %s %s" % (self
.HobType
, self
.CommonDefines
)
466 for Item
in self
.HelpText
:
467 Str
= Str
+ '\n\t' + str(Item
)
473 class SourceFileXml(object):
476 self
.ToolChainFamily
= ''
478 self
.CommonDefines
= CommonDefinesXml()
480 def FromXml(self
, Item
, Key
):
481 self
.ToolChainFamily
= XmlAttribute(Item
, 'Family')
482 self
.SourceFile
= XmlElement(Item
, 'Filename')
483 self
.CommonDefines
.FromXml(Item
, Key
)
485 self
.CommonDefines
.FeatureFlag
= ConvertNOTEQToNE(self
.CommonDefines
.FeatureFlag
)
487 SourceFile
= SourceFileObject()
488 SourceFile
.SetSourceFile(self
.SourceFile
)
489 SourceFile
.SetFamily(self
.ToolChainFamily
)
490 SourceFile
.SetSupArchList(self
.CommonDefines
.SupArchList
)
491 SourceFile
.SetFeatureFlag(self
.CommonDefines
.FeatureFlag
)
495 def ToXml(self
, SourceFile
, Key
):
498 FeatureFlag
= ConvertNEToNOTEQ(SourceFile
.GetFeatureFlag())
499 AttributeList
= [['SupArchList', GetStringOfList(SourceFile
.GetSupArchList())],
500 ['Family', SourceFile
.GetFamily()],
501 ['FeatureFlag', FeatureFlag
], ]
502 Root
= CreateXmlElement('%s' % Key
, SourceFile
.GetSourceFile(), [], AttributeList
)
508 class ModulePropertyXml(object):
510 self
.CommonDefines
= CommonDefinesXml()
513 self
.PcdIsDriver
= ''
514 self
.UefiSpecificationVersion
= ''
515 self
.PiSpecificationVersion
= ''
516 self
.SpecificationList
= []
517 self
.SpecificationVersion
= ''
522 def FromXml(self
, Item
, Key
, Header
=None):
523 self
.CommonDefines
.FromXml(Item
, Key
)
524 self
.ModuleType
= XmlElement(Item
, '%s/ModuleType' % Key
)
525 self
.Path
= XmlElement(Item
, '%s/Path' % Key
)
526 self
.PcdIsDriver
= XmlElement(Item
, '%s/PcdIsDriver' % Key
)
527 self
.UefiSpecificationVersion
= XmlElement(Item
, '%s/UefiSpecificationVersion' % Key
)
528 self
.PiSpecificationVersion
= XmlElement(Item
, '%s/PiSpecificationVersion' % Key
)
529 for SubItem
in XmlList(Item
, '%s/Specification' % Key
):
530 Specification
= XmlElement(SubItem
, '/Specification')
531 Version
= XmlAttribute(XmlNode(SubItem
, '/Specification'), 'Version')
532 self
.SpecificationList
.append((Specification
, Version
))
533 for SubItem
in XmlList(Item
, '%s/BootMode' % Key
):
535 BootMode
= Axml
.FromXml(SubItem
, 'BootMode')
536 self
.BootModes
.append(BootMode
)
537 for SubItem
in XmlList(Item
, '%s/Event' % Key
):
539 Event
= Axml
.FromXml(SubItem
, 'Event')
540 self
.Events
.append(Event
)
541 for SubItem
in XmlList(Item
, '%s/HOB' % Key
):
543 Hob
= Axml
.FromXml(SubItem
, 'HOB')
544 self
.HOBs
.append(Hob
)
547 Header
= ModuleObject()
549 Header
.SetModuleType(self
.ModuleType
)
550 Header
.SetSupArchList(self
.CommonDefines
.SupArchList
)
551 Header
.SetModulePath(self
.Path
)
553 Header
.SetPcdIsDriver(self
.PcdIsDriver
)
554 Header
.SetUefiSpecificationVersion(self
.UefiSpecificationVersion
)
555 Header
.SetPiSpecificationVersion(self
.PiSpecificationVersion
)
556 Header
.SetSpecList(self
.SpecificationList
)
558 return Header
, self
.BootModes
, self
.Events
, self
.HOBs
561 def ToXml(self
, Header
, BootModes
, Events
, Hobs
, Key
):
564 AttributeList
= [['SupArchList', GetStringOfList(Header
.GetSupArchList())], ]
566 NodeList
= [['ModuleType', Header
.GetModuleType()],
567 ['Path', Header
.GetModulePath()],
568 ['PcdIsDriver', Header
.GetPcdIsDriver()],
569 ['UefiSpecificationVersion', Header
.GetUefiSpecificationVersion()],
570 ['PiSpecificationVersion', Header
.GetPiSpecificationVersion()],
572 for Item
in Header
.GetSpecList():
574 SpecElem
= CreateXmlElement('Specification', Spec
, [], [['Version', Version
]])
575 NodeList
.append(SpecElem
)
577 for Item
in BootModes
:
579 NodeList
.append(Tmp
.ToXml(Item
, 'BootMode'))
582 NodeList
.append(Tmp
.ToXml(Item
, 'Event'))
585 NodeList
.append(Tmp
.ToXml(Item
, 'HOB'))
586 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
591 Str
= "ModuleType = %s Path = %s PcdIsDriver = %s UefiSpecificationVersion = %s PiSpecificationVersion = %s \
592 Specification = %s SpecificationVersion = %s %s" % \
593 (self
.ModuleType
, self
.Path
, self
.PcdIsDriver
, \
594 self
.UefiSpecificationVersion
, self
.PiSpecificationVersion
, \
595 self
.SpecificationList
, self
.SpecificationVersion
, self
.CommonDefines
)
596 for Item
in self
.BootModes
:
597 Str
= Str
+ '\n\t' + str(Item
)
598 for Item
in self
.Events
:
599 Str
= Str
+ '\n\t' + str(Item
)
600 for Item
in self
.HOBs
:
601 Str
= Str
+ '\n\t' + str(Item
)
607 class ModuleSurfaceAreaXml(object):
608 def __init__(self
, Package
=''):
611 # indicate the package that this module resides in
613 self
.Package
= Package
615 def FromXml2(self
, Item
, Module
):
622 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/PeiDepex'):
624 Depex
= Tmp
.FromXml(XmlNode(SubItem
, 'PeiDepex'), 'PeiDepex')
625 PeiDepexList
.append(Depex
)
626 Module
.SetPeiDepex(PeiDepexList
)
632 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/DxeDepex'):
634 Depex
= Tmp
.FromXml(XmlNode(SubItem
, 'DxeDepex'), 'DxeDepex')
635 DxeDepexList
.append(Depex
)
636 Module
.SetDxeDepex(DxeDepexList
)
642 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/SmmDepex'):
644 Depex
= Tmp
.FromXml(XmlNode(SubItem
, 'SmmDepex'), 'SmmDepex')
645 SmmDepexList
.append(Depex
)
646 Module
.SetSmmDepex(SmmDepexList
)
650 Tmp
= MiscellaneousFileXml()
651 MiscFileList
= Tmp
.FromXml(XmlNode(Item
, '/ModuleSurfaceArea/MiscellaneousFiles'), 'MiscellaneousFiles')
653 Module
.SetMiscFileList([MiscFileList
])
655 Module
.SetMiscFileList([])
660 for Item
in XmlList(Item
, '/ModuleSurfaceArea/UserExtensions'):
661 Tmp
= UserExtensionsXml()
662 UserExtension
= Tmp
.FromXml(Item
, 'UserExtensions')
663 Module
.SetUserExtensionList(Module
.GetUserExtensionList() + [UserExtension
])
667 def FromXml(self
, Item
, Key
, IsStandAlongModule
=False):
668 IsBinaryModule
= XmlAttribute(Item
, 'BinaryModule')
673 Module
= Tmp
.FromXml(XmlNode(Item
, '/%s/Header' % Key
), 'Header', True, IsStandAlongModule
)
674 Module
.SetBinaryModule(IsBinaryModule
)
677 GlobalData
.gIS_BINARY_INF
= True
682 Tmp
= ModulePropertyXml()
683 (Module
, BootModes
, Events
, HOBs
) = \
684 Tmp
.FromXml(XmlNode(Item
, '/ModuleSurfaceArea/ModuleProperties'), 'ModuleProperties', Module
)
685 Module
.SetBootModeList(BootModes
)
686 Module
.SetEventList(Events
)
687 Module
.SetHobList(HOBs
)
691 Tmp
= ClonedFromXml()
692 ClonedFrom
= Tmp
.FromXml(XmlNode(Item
, '/ModuleSurfaceArea/ClonedFrom'), 'ClonedFrom')
694 Module
.SetClonedFrom(ClonedFrom
)
699 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):
700 Tmp
= LibraryClassXml()
701 LibraryClass
= Tmp
.FromXml(SubItem
, 'LibraryClass')
702 Module
.SetLibraryClassList(Module
.GetLibraryClassList() + [LibraryClass
])
704 if XmlList(Item
, '/ModuleSurfaceArea/LibraryClassDefinitions') and \
705 not XmlList(Item
, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):
706 Module
.SetLibraryClassList([None])
711 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/SourceFiles/Filename'):
712 Tmp
= SourceFileXml()
713 SourceFile
= Tmp
.FromXml(SubItem
, 'Filename')
714 Module
.SetSourceFileList(Module
.GetSourceFileList() + [SourceFile
])
716 if XmlList(Item
, '/ModuleSurfaceArea/SourceFiles') and \
717 not XmlList(Item
, '/ModuleSurfaceArea/SourceFiles/Filename') :
718 Module
.SetSourceFileList([None])
723 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/BinaryFiles/BinaryFile'):
724 Tmp
= BinaryFileXml()
725 BinaryFile
= Tmp
.FromXml(SubItem
, 'BinaryFile')
726 Module
.SetBinaryFileList(Module
.GetBinaryFileList() + [BinaryFile
])
728 if XmlList(Item
, '/ModuleSurfaceArea/BinaryFiles') and \
729 not XmlList(Item
, '/ModuleSurfaceArea/BinaryFiles/BinaryFile') :
730 Module
.SetBinaryFileList([None])
732 # PackageDependencies
734 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/PackageDependencies/Package'):
736 PackageDependency
= Tmp
.FromXml(SubItem
, 'Package')
737 Module
.SetPackageDependencyList(Module
.GetPackageDependencyList() + [PackageDependency
])
739 if XmlList(Item
, '/ModuleSurfaceArea/PackageDependencies') and \
740 not XmlList(Item
, '/ModuleSurfaceArea/PackageDependencies/Package'):
741 Module
.SetPackageDependencyList([None])
746 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/Guids/GuidCName'):
747 Tmp
= GuidXml('Module')
748 GuidProtocolPpi
= Tmp
.FromXml(SubItem
, 'GuidCName')
749 Module
.SetGuidList(Module
.GetGuidList() + [GuidProtocolPpi
])
751 if XmlList(Item
, '/ModuleSurfaceArea/Guids') and not XmlList(Item
, '/ModuleSurfaceArea/Guids/GuidCName'):
752 Module
.SetGuidList([None])
757 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/Protocols/Protocol'):
758 Tmp
= ProtocolXml('Module')
759 GuidProtocolPpi
= Tmp
.FromXml(SubItem
, 'Protocol')
760 Module
.SetProtocolList(Module
.GetProtocolList() + [GuidProtocolPpi
])
762 if XmlList(Item
, '/ModuleSurfaceArea/Protocols') and not XmlList(Item
, '/ModuleSurfaceArea/Protocols/Protocol'):
763 Module
.SetProtocolList([None])
768 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/PPIs/Ppi'):
769 Tmp
= PpiXml('Module')
770 GuidProtocolPpi
= Tmp
.FromXml(SubItem
, 'Ppi')
771 Module
.SetPpiList(Module
.GetPpiList() + [GuidProtocolPpi
])
773 if XmlList(Item
, '/ModuleSurfaceArea/PPIs') and not XmlList(Item
, '/ModuleSurfaceArea/PPIs/Ppi'):
774 Module
.SetPpiList([None])
779 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/Externs/Extern'):
781 Extern
= Tmp
.FromXml(SubItem
, 'Extern')
782 Module
.SetExternList(Module
.GetExternList() + [Extern
])
784 if XmlList(Item
, '/ModuleSurfaceArea/Externs') and not XmlList(Item
, '/ModuleSurfaceArea/Externs/Extern'):
785 Module
.SetExternList([None])
787 if not Module
.GetBinaryModule():
791 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):
793 PcdEntry
= Tmp
.FromXml3(SubItem
, 'PcdEntry')
794 Module
.SetPcdList(Module
.GetPcdList() + [PcdEntry
])
796 if XmlList(Item
, '/ModuleSurfaceArea/PcdCoded') and \
797 not XmlList(Item
, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):
798 Module
.SetPcdList([None])
800 Module
= self
.FromXml2(Item
, Module
)
802 # return the module object
807 def ToXml(self
, Module
):
811 # Create root node of module surface area
813 DomModule
= minidom
.Document().createElement('ModuleSurfaceArea')
814 if Module
.GetBinaryModule():
815 DomModule
.setAttribute('BinaryModule', 'true')
821 DomModule
.appendChild(Tmp
.ToXml(Module
, 'Header'))
825 Tmp
= ModulePropertyXml()
826 DomModule
.appendChild(Tmp
.ToXml(Module
, Module
.GetBootModeList(), Module
.GetEventList(), Module
.GetHobList(), \
831 Tmp
= ClonedFromXml()
832 if Module
.GetClonedFrom():
833 DomModule
.appendChild(Tmp
.ToXml(Module
.GetClonedFrom(), 'ClonedFrom'))
837 LibraryClassNode
= CreateXmlElement('LibraryClassDefinitions', '', [], [])
838 for LibraryClass
in Module
.GetLibraryClassList():
839 Tmp
= LibraryClassXml()
840 LibraryClassNode
.appendChild(Tmp
.ToXml2(LibraryClass
, 'LibraryClass'))
841 DomModule
.appendChild(LibraryClassNode
)
845 SourceFileNode
= CreateXmlElement('SourceFiles', '', [], [])
846 for SourceFile
in Module
.GetSourceFileList():
847 Tmp
= SourceFileXml()
848 SourceFileNode
.appendChild(Tmp
.ToXml(SourceFile
, 'Filename'))
849 DomModule
.appendChild(SourceFileNode
)
853 BinaryFileNode
= CreateXmlElement('BinaryFiles', '', [], [])
854 for BinaryFile
in Module
.GetBinaryFileList():
855 Tmp
= BinaryFileXml()
856 BinaryFileNode
.appendChild(Tmp
.ToXml(BinaryFile
, 'BinaryFile'))
857 DomModule
.appendChild(BinaryFileNode
)
859 # PackageDependencies
861 PackageDependencyNode
= CreateXmlElement('PackageDependencies', '', [], [])
862 for PackageDependency
in Module
.GetPackageDependencyList():
864 PackageDependencyNode
.appendChild(Tmp
.ToXml(PackageDependency
, 'Package'))
865 DomModule
.appendChild(PackageDependencyNode
)
870 GuidProtocolPpiNode
= CreateXmlElement('Guids', '', [], [])
871 for GuidProtocolPpi
in Module
.GetGuidList():
872 Tmp
= GuidXml('Module')
873 GuidProtocolPpiNode
.appendChild(Tmp
.ToXml(GuidProtocolPpi
, 'GuidCName'))
874 DomModule
.appendChild(GuidProtocolPpiNode
)
879 GuidProtocolPpiNode
= CreateXmlElement('Protocols', '', [], [])
880 for GuidProtocolPpi
in Module
.GetProtocolList():
881 Tmp
= ProtocolXml('Module')
882 GuidProtocolPpiNode
.appendChild(Tmp
.ToXml(GuidProtocolPpi
, 'Protocol'))
883 DomModule
.appendChild(GuidProtocolPpiNode
)
888 GuidProtocolPpiNode
= CreateXmlElement('PPIs', '', [], [])
889 for GuidProtocolPpi
in Module
.GetPpiList():
890 Tmp
= PpiXml('Module')
891 GuidProtocolPpiNode
.appendChild(Tmp
.ToXml(GuidProtocolPpi
, 'Ppi'))
892 DomModule
.appendChild(GuidProtocolPpiNode
)
896 ExternNode
= CreateXmlElement('Externs', '', [], [])
897 for Extern
in Module
.GetExternList():
899 ExternNode
.appendChild(Tmp
.ToXml(Extern
, 'Extern'))
900 DomModule
.appendChild(ExternNode
)
904 PcdEntryNode
= CreateXmlElement('PcdCoded', '', [], [])
905 for PcdEntry
in Module
.GetPcdList():
907 PcdEntryNode
.appendChild(Tmp
.ToXml3(PcdEntry
, 'PcdEntry'))
908 DomModule
.appendChild(PcdEntryNode
)
913 if Module
.GetPeiDepex():
914 for Item
in Module
.GetPeiDepex():
916 DomModule
.appendChild(Tmp
.ToXml(Item
, 'PeiDepex'))
921 if Module
.GetDxeDepex():
922 for Item
in Module
.GetDxeDepex():
924 DomModule
.appendChild(Tmp
.ToXml(Item
, 'DxeDepex'))
929 if Module
.GetSmmDepex():
930 for Item
in Module
.GetSmmDepex():
932 DomModule
.appendChild(Tmp
.ToXml(Item
, 'SmmDepex'))
937 if Module
.GetMiscFileList():
938 Tmp
= MiscellaneousFileXml()
939 DomModule
.appendChild(Tmp
.ToXml(Module
.GetMiscFileList()[0], 'MiscellaneousFiles'))
943 if Module
.GetUserExtensionList():
944 for UserExtension
in Module
.GetUserExtensionList():
945 Tmp
= UserExtensionsXml()
946 DomModule
.appendChild(Tmp
.ToXml(UserExtension
, 'UserExtensions'))
951 # BuildFlagXml used to generate BuildFlag for <AsBuilt>
953 class BuildFlagXml(object):
958 self
.AsBuiltFlags
= ''
960 def FromXml(self
, Item
, Key
):
961 self
.Target
= XmlElement(Item
, '%s/Target' % Key
)
962 self
.TagName
= XmlElement(Item
, '%s/TagName' % Key
)
963 self
.Family
= XmlElement(Item
, '%s/Family' % Key
)
965 BuildFlag
= BinaryBuildFlagObject()
967 BuildFlag
.SetTarget(self
.Target
)
968 BuildFlag
.SetTagName(self
.TagName
)
969 BuildFlag
.SetFamily(self
.Family
)
974 # For AsBuild INF usage
976 def FromXml2(self
, Item
, Key
):
977 self
.AsBuiltFlags
= XmlElement(Item
, '%s' % Key
)
979 LineList
= GetSplitValueList(self
.AsBuiltFlags
, '\n')
982 for Line
in LineList
:
984 ReturnLine
= "# " + Line
986 ReturnLine
= ReturnLine
+ '\n' + '# ' + Line
989 BuildFlag
= BinaryBuildFlagObject()
990 BuildFlag
.SetAsBuiltOptionFlags(ReturnLine
)
994 def ToXml(self
, BuildFlag
, Key
):
999 NodeList
.append(['BuildFlags', BuildFlag
])
1001 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)