]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/Xml/ModuleSurfaceAreaXml.py
Sync BaseTools Branch (version r2271) to EDKII main trunk.
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Xml / ModuleSurfaceAreaXml.py
CommitLineData
4234283c
LG
1## @file\r
2# This file is used to parse a Module file of .PKG file\r
3#\r
4# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
5#\r
6# This program and the accompanying materials are licensed and made available \r
7# under the terms and conditions of the BSD License which accompanies this \r
8# distribution. The full text of the license may be found at \r
9# http://opensource.org/licenses/bsd-license.php\r
10#\r
11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13#\r
14\r
15'''\r
16ModuleSurfaceAreaXml\r
17'''\r
18from xml.dom import minidom\r
19\r
20from Library.String import ConvertNEToNOTEQ\r
21from Library.String import ConvertNOTEQToNE\r
22from Library.String import GetStringOfList\r
23from Library.Xml.XmlRoutines import XmlElement\r
24from Library.Xml.XmlRoutines import XmlAttribute\r
25from Library.Xml.XmlRoutines import XmlNode\r
26from Library.Xml.XmlRoutines import XmlList\r
27from Library.Xml.XmlRoutines import CreateXmlElement\r
28from Object.POM.CommonObject import GuidVersionObject\r
29from Object.POM.ModuleObject import BootModeObject\r
30from Object.POM.ModuleObject import DepexObject\r
31from Object.POM.ModuleObject import ModuleObject\r
32from Object.POM.ModuleObject import EventObject\r
33from Object.POM.ModuleObject import HobObject\r
34from Object.POM.ModuleObject import SourceFileObject\r
35from Object.POM.ModuleObject import PackageDependencyObject\r
36from Object.POM.ModuleObject import ExternObject\r
37from Object.POM.ModuleObject import BinaryFileObject\r
38from Object.POM.ModuleObject import AsBuiltObject\r
39from Object.POM.ModuleObject import BinaryBuildFlagObject\r
40from Xml.CommonXml import ClonedFromXml\r
41from Xml.CommonXml import HeaderXml\r
42from Xml.CommonXml import HelpTextXml\r
43from Xml.CommonXml import CommonDefinesXml\r
44from Xml.CommonXml import LibraryClassXml\r
45from Xml.CommonXml import UserExtensionsXml\r
46from Xml.CommonXml import MiscellaneousFileXml\r
47from Xml.CommonXml import FilenameXml\r
48from Xml.GuidProtocolPpiXml import GuidXml\r
49from Xml.GuidProtocolPpiXml import ProtocolXml\r
50from Xml.GuidProtocolPpiXml import PpiXml\r
51from Xml.PcdXml import PcdEntryXml\r
52from Xml.XmlParserMisc import GetHelpTextList\r
53from Library import GlobalData\r
54from Library.Misc import GetSplitValueList\r
55\r
56## BinaryFileXml\r
57#\r
58# represent the following XML item\r
59#\r
60# <BinaryFile>\r
61# <Filename\r
62# FileType=" FileType " {1}\r
63# SupArchList=" ArchListType " {0,1}\r
64# FeatureFlag=" FeatureFlagExpression " {0,1} >\r
65# xs:anyURI\r
66# </Filename> {1,}\r
67# <AsBuilt> ... </AsBuilt> {0,}\r
68# </BinaryFile> {1,}\r
69# \r
70class BinaryFileXml(object):\r
71 def __init__(self):\r
72 self.FileNames = []\r
73 self.AsBuiltList = []\r
74 self.PatchPcdValues = ''\r
75 self.PcdExValues = ''\r
76 self.LibraryInstances = ''\r
77 self.BuildFlags = ''\r
78\r
79 def FromXml(self, Item, Key):\r
80 if self.FileNames:\r
81 pass\r
82 BinaryFile = BinaryFileObject()\r
83 FilenameList = []\r
84 for SubItem in XmlList(Item, '%s/Filename' % Key):\r
85 Axml = FilenameXml()\r
86 Bxml = Axml.FromXml(SubItem, 'Filename')\r
87 FilenameList.append(Bxml)\r
88 BinaryFile.SetFileNameList(FilenameList)\r
89 if GlobalData.gIS_BINARY_INF:\r
90 AsBuiltList = []\r
91 for AsBuiltItem in XmlList(Item, '%s/AsBuilt' % Key):\r
92 AsBuilt = AsBuiltObject()\r
93\r
94 PatchPcdValueList = []\r
95 for SubItem in XmlList(AsBuiltItem, 'AsBuilt/PatchPcdValue'):\r
96 Axml = PcdEntryXml()\r
97 Bxml = Axml.FromXml(SubItem, 'PatchPcdValue')\r
98 PatchPcdValueList.append(Bxml)\r
99 AsBuilt.SetPatchPcdList(PatchPcdValueList)\r
100 PcdExValueList = []\r
101 for SubItem in XmlList(AsBuiltItem, 'AsBuilt/PcdExValue'):\r
102 Axml = PcdEntryXml()\r
103 Bxml = Axml.FromXml(SubItem, 'PcdExValue')\r
104 PcdExValueList.append(Bxml)\r
105 AsBuilt.SetPcdExList(PcdExValueList)\r
106 LibraryList = []\r
107 for SubItem in XmlList(Item, '%s/AsBuilt/LibraryInstances/GUID' % Key):\r
108 GuidVerObj = GuidVersionObject()\r
109 GUID = XmlElement(SubItem, 'GUID')\r
110 Version = XmlAttribute(XmlNode(SubItem, 'GUID'), 'Version')\r
111 GuidVerObj.SetGuid(GUID)\r
112 GuidVerObj.SetVersion(Version)\r
113 LibraryList.append(GuidVerObj)\r
114 if XmlList(Item, '%s/AsBuilt/LibraryInstances' % Key) and not LibraryList:\r
115 LibraryList = [None]\r
116 AsBuilt.SetLibraryInstancesList(LibraryList)\r
117 BuildFlagList = []\r
118 for SubItem in XmlList(Item, '%s/AsBuilt/BuildFlags' % Key):\r
119 BuildFlag = BuildFlagXml()\r
120 BuildFlagList.append(BuildFlag.FromXml2(SubItem, 'BuildFlags'))\r
121 AsBuilt.SetBuildFlagsList(BuildFlagList)\r
122 AsBuiltList.append(AsBuilt)\r
123 BinaryFile.SetAsBuiltList(AsBuiltList)\r
124 return BinaryFile\r
125\r
126 def ToXml(self, BinaryFile, Key):\r
127 if self.FileNames:\r
128 pass\r
129 NodeList = []\r
130 FilenameList = BinaryFile.GetFileNameList()\r
131 for Filename in FilenameList:\r
132 Tmp = FilenameXml()\r
133 NodeList.append(Tmp.ToXml(Filename, 'Filename'))\r
134\r
135 if GlobalData.gIS_BINARY_INF:\r
136 AsBuildList = BinaryFile.GetAsBuiltList()\r
137 PatchPcdValueList = AsBuildList.GetPatchPcdList()\r
138 PcdExList = AsBuildList.GetPcdExList()\r
139 LibGuidVerList = AsBuildList.GetLibraryInstancesList()\r
140 BuildFlagList = AsBuildList.GetBuildFlagsList()\r
141\r
142 AsBuiltNodeList = []\r
143\r
144 for Pcd in PatchPcdValueList:\r
145 Tmp = PcdEntryXml()\r
146 AsBuiltNodeList.append(Tmp.ToXml4(Pcd, 'PatchPcdValue'))\r
147\r
148 for Pcd in PcdExList:\r
149 Tmp = PcdEntryXml()\r
150 AsBuiltNodeList.append(Tmp.ToXml4(Pcd, 'PcdExValue'))\r
151\r
152 GuiVerElemList = []\r
153 for LibGuidVer in LibGuidVerList:\r
154 GuiVerElem = \\r
155 CreateXmlElement('GUID', LibGuidVer.GetLibGuid(), [], [['Version', LibGuidVer.GetLibVersion()]])\r
156 GuiVerElemList.append(GuiVerElem)\r
157 if len(GuiVerElemList) > 0:\r
158 LibGuidVerElem = CreateXmlElement('LibraryInstances', '', GuiVerElemList, [])\r
159 AsBuiltNodeList.append(LibGuidVerElem)\r
160\r
161 for BuildFlag in BuildFlagList:\r
162 Tmp = BuildFlagXml()\r
163 Elem = CreateXmlElement('BuildFlags', ''.join(BuildFlag), [], [])\r
164 AsBuiltNodeList.append(Elem)\r
165\r
166 if len(AsBuiltNodeList) > 0:\r
167 Element = CreateXmlElement('AsBuilt', '', AsBuiltNodeList, [])\r
168 NodeList.append(Element)\r
169\r
170 Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r
171\r
172 return Root\r
173\r
174 def __str__(self):\r
175 Str = "BinaryFiles:"\r
176 for Item in self.FileNames:\r
177 Str = Str + '\n\t' + str(Item)\r
178 for Item in self.PatchPcdValues:\r
179 Str = Str + '\n\t' + str(Item)\r
180 for Item in self.PcdExValues:\r
181 Str = Str + '\n\t' + str(Item)\r
182 for Item in self.LibraryInstances:\r
183 Str = Str + '\n\t' + str(Item)\r
184 for Item in self.BuildFlags:\r
185 Str = Str + '\n\t' + str(Item)\r
186 return Str\r
187\r
188##\r
189# PackageXml\r
190#\r
191class PackageXml(object):\r
192 def __init__(self):\r
193 self.Description = ''\r
194 self.Guid = ''\r
195 self.Version = ''\r
196 self.CommonDefines = CommonDefinesXml()\r
197\r
198 def FromXml(self, Item, Key):\r
199 self.Description = XmlElement(Item, '%s/Description' % Key)\r
200 self.Guid = XmlElement(Item, '%s/GUID' % Key)\r
201 self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')\r
202 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
203\r
204 PackageDependency = PackageDependencyObject()\r
205 PackageDependency.SetPackage(self.Description)\r
206 PackageDependency.SetGuid(self.Guid)\r
207 PackageDependency.SetVersion(self.Version)\r
208 PackageDependency.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))\r
209 PackageDependency.SetSupArchList(self.CommonDefines.SupArchList)\r
210\r
211 return PackageDependency\r
212\r
213 def ToXml(self, PackageDependency, Key):\r
214 if self.Guid:\r
215 pass\r
216 AttributeList = [['SupArchList', GetStringOfList(PackageDependency.GetSupArchList())],\r
217 ['FeatureFlag', ConvertNEToNOTEQ(PackageDependency.GetFeatureFlag())], ]\r
218 Element1 = CreateXmlElement('GUID', PackageDependency.GetGuid(), [],\r
219 [['Version', PackageDependency.GetVersion()]])\r
220 NodeList = [['Description', PackageDependency.GetPackage()], Element1, ]\r
221 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
222\r
223 return Root\r
224\r
225 def __str__(self):\r
226 Str = "Description = %s Guid = %s Version = %s %s" \\r
227 % (self.Description, self.Guid, self.Version, self.CommonDefines)\r
228 return Str\r
229##\r
230# ExternXml\r
231#\r
232class ExternXml(object):\r
233 def __init__(self):\r
234 self.CommonDefines = CommonDefinesXml()\r
235 self.EntryPoint = ''\r
236 self.UnloadImage = ''\r
237 self.Constructor = ''\r
238 self.Destructor = ''\r
239 self.SupModList = ''\r
240 self.SupArchList = ''\r
241 self.HelpText = []\r
242\r
243 def FromXml(self, Item, Key):\r
244 self.CommonDefines.FromXml(Item, Key)\r
245 self.EntryPoint = XmlElement(Item, '%s/EntryPoint' % Key)\r
246 self.UnloadImage = XmlElement(Item, '%s/UnloadImage' % Key)\r
247 self.Constructor = XmlElement(Item, '%s/Constructor' % Key)\r
248 self.Destructor = XmlElement(Item, '%s/Destructor' % Key)\r
249\r
250 Extern = ExternObject()\r
251 Extern.SetEntryPoint(self.EntryPoint)\r
252 Extern.SetUnloadImage(self.UnloadImage)\r
253 Extern.SetConstructor(self.Constructor)\r
254 Extern.SetDestructor(self.Destructor)\r
255 if self.CommonDefines.SupModList:\r
256 Extern.SetSupModList(self.CommonDefines.SupModList)\r
257 if self.CommonDefines.SupArchList:\r
258 Extern.SetSupArchList(self.CommonDefines.SupArchList)\r
259 return Extern\r
260\r
261 def ToXml(self, Extern, Key):\r
262 if self.HelpText:\r
263 pass\r
264\r
265 NodeList = []\r
266 if Extern.GetEntryPoint():\r
267 NodeList.append(['EntryPoint', Extern.GetEntryPoint()])\r
268 if Extern.GetUnloadImage():\r
269 NodeList.append(['UnloadImage', Extern.GetUnloadImage()])\r
270 if Extern.GetConstructor():\r
271 NodeList.append(['Constructor', Extern.GetConstructor()])\r
272 if Extern.GetDestructor():\r
273 NodeList.append(['Destructor', Extern.GetDestructor()])\r
274 Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r
275\r
276 return Root\r
277\r
278 def __str__(self):\r
279 Str = "EntryPoint = %s UnloadImage = %s Constructor = %s Destructor = %s %s" \\r
280 % (self.EntryPoint, self.UnloadImage, self.Constructor, self.Destructor, self.CommonDefines)\r
281 for Item in self.HelpText:\r
282 Str = Str + '\n\t' + str(Item)\r
283 return Str\r
284## \r
285# DepexXml\r
286#\r
287class DepexXml(object):\r
288 def __init__(self):\r
289 self.CommonDefines = CommonDefinesXml()\r
290 self.Expression = None\r
291 self.HelpText = []\r
292\r
293 def FromXml(self, Item, Key):\r
294 if not Item:\r
295 return None\r
296 self.CommonDefines.FromXml(Item, Key)\r
297 self.Expression = XmlElement(Item, '%s/Expression' % Key)\r
298 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
299 HelpTextObj = HelpTextXml()\r
300 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
301 self.HelpText.append(HelpTextObj)\r
302\r
303 Depex = DepexObject()\r
304 Depex.SetDepex(self.Expression)\r
305 Depex.SetModuleType(self.CommonDefines.SupModList)\r
306 Depex.SetSupArchList(self.CommonDefines.SupArchList)\r
307 Depex.SetFeatureFlag(self.CommonDefines.FeatureFlag)\r
308 Depex.SetHelpTextList(GetHelpTextList(self.HelpText))\r
309\r
310 return Depex\r
311\r
312 def ToXml(self, Depex, Key):\r
313 if self.HelpText:\r
314 pass\r
315 AttributeList = [['SupArchList', GetStringOfList(Depex.GetSupArchList())],\r
316 ['SupModList', Depex.GetModuleType()]]\r
317 NodeList = [['Expression', Depex.GetDepex()]]\r
318 if Depex.GetHelpText():\r
319 Tmp = HelpTextXml()\r
320 NodeList.append(Tmp.ToXml(Depex.GetHelpText(), 'HelpText'))\r
321\r
322 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
323 return Root\r
324\r
325 def __str__(self):\r
326 Str = "Expression = %s" % (self.Expression)\r
327 for Item in self.HelpText:\r
328 Str = Str + '\n\t' + str(Item)\r
329 return Str\r
330\r
331##\r
332# BootModeXml\r
333#\r
334class BootModeXml(object):\r
335 def __init__(self):\r
336 self.SupportedBootModes = ''\r
337 self.CommonDefines = CommonDefinesXml()\r
338 self.HelpText = []\r
339\r
340 def FromXml(self, Item, Key):\r
341 self.SupportedBootModes = \\r
342 XmlElement(Item, '%s/SupportedBootModes' % Key)\r
343 self.CommonDefines.FromXml(Item, Key)\r
344 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
345 HelpTextObj = HelpTextXml()\r
346 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
347 self.HelpText.append(HelpTextObj)\r
348\r
349 BootMode = BootModeObject()\r
350 BootMode.SetSupportedBootModes(self.SupportedBootModes)\r
351 BootMode.SetUsage(self.CommonDefines.Usage)\r
352 BootMode.SetHelpTextList(GetHelpTextList(self.HelpText))\r
353\r
354 return BootMode\r
355\r
356 def ToXml(self, BootMode, Key):\r
357 if self.HelpText:\r
358 pass\r
359 AttributeList = [['Usage', BootMode.GetUsage()], ]\r
360 NodeList = [['SupportedBootModes', BootMode.GetSupportedBootModes()]]\r
361 for Item in BootMode.GetHelpTextList():\r
362 Tmp = HelpTextXml()\r
363 NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
364 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
365\r
366 return Root\r
367\r
368 def __str__(self):\r
369 Str = "SupportedBootModes = %s %s" % (self.SupportedBootModes, self.CommonDefines)\r
370 for Item in self.HelpText:\r
371 Str = Str + '\n\t' + str(Item)\r
372 return Str\r
373##\r
374# EventXml\r
375#\r
376class EventXml(object):\r
377 def __init__(self):\r
378 self.EventType = ''\r
379 self.Name = ''\r
380 self.CommonDefines = CommonDefinesXml()\r
381 self.HelpText = []\r
382\r
383 def FromXml(self, Item, Key):\r
384 self.EventType = XmlAttribute(XmlNode(Item, '%s' % Key), 'EventType')\r
385 self.Name = XmlElement(Item, '%s' % Key)\r
386 self.CommonDefines.FromXml(Item, Key)\r
387 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
388 HelpTextObj = HelpTextXml()\r
389 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
390 self.HelpText.append(HelpTextObj)\r
391\r
392 Event = EventObject()\r
393 Event.SetEventType(self.EventType)\r
394 Event.SetUsage(self.CommonDefines.Usage)\r
395 Event.SetHelpTextList(GetHelpTextList(self.HelpText))\r
396\r
397 return Event\r
398\r
399 def ToXml(self, Event, Key):\r
400 if self.HelpText:\r
401 pass\r
402 AttributeList = [['EventType', Event.GetEventType()],\r
403 ['Usage', Event.GetUsage()],\r
404 ]\r
405 NodeList = []\r
406 for Item in Event.GetHelpTextList():\r
407 Tmp = HelpTextXml()\r
408 NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
409 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
410\r
411 return Root\r
412\r
413 def __str__(self):\r
414 Str = "EventType = %s %s" % (self.EventType, self.CommonDefines)\r
415 for Item in self.HelpText:\r
416 Str = Str + '\n\t' + str(Item)\r
417 return Str\r
418##\r
419# HobXml\r
420#\r
421class HobXml(object):\r
422 def __init__(self):\r
423 self.HobType = ''\r
424 self.Name = ''\r
425 self.CommonDefines = CommonDefinesXml()\r
426 self.HelpText = []\r
427\r
428 def FromXml(self, Item, Key):\r
429 self.HobType = XmlAttribute(XmlNode(Item, '%s' % Key), 'HobType')\r
430 self.Name = XmlElement(Item, '%s' % Key)\r
431 self.CommonDefines.FromXml(Item, Key)\r
432 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
433 HelpTextObj = HelpTextXml()\r
434 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
435 self.HelpText.append(HelpTextObj)\r
436\r
437 Hob = HobObject()\r
438 Hob.SetHobType(self.HobType)\r
439 Hob.SetSupArchList(self.CommonDefines.SupArchList)\r
440 Hob.SetUsage(self.CommonDefines.Usage)\r
441 Hob.SetHelpTextList(GetHelpTextList(self.HelpText))\r
442\r
443 return Hob\r
444\r
445 def ToXml(self, Hob, Key):\r
446 if self.Name:\r
447 pass\r
448 AttributeList = [['HobType', Hob.GetHobType()],\r
449 ['Usage', Hob.GetUsage()],\r
450 ['SupArchList', GetStringOfList(Hob.GetSupArchList())], ]\r
451 NodeList = []\r
452 for Item in Hob.GetHelpTextList():\r
453 Tmp = HelpTextXml()\r
454 NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
455 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
456\r
457 return Root\r
458\r
459 def __str__(self):\r
460 Str = "HobType = %s %s" % (self.HobType, self.CommonDefines)\r
461 for Item in self.HelpText:\r
462 Str = Str + '\n\t' + str(Item)\r
463 return Str\r
464\r
465##\r
466# SourceFileXml\r
467#\r
468class SourceFileXml(object):\r
469 def __init__(self):\r
470 self.SourceFile = ''\r
471 self.ToolChainFamily = ''\r
472 self.FileType = ''\r
473 self.CommonDefines = CommonDefinesXml()\r
474\r
475 def FromXml(self, Item, Key):\r
476 self.ToolChainFamily = XmlAttribute(Item, 'Family')\r
477 self.SourceFile = XmlElement(Item, 'Filename')\r
478 self.CommonDefines.FromXml(Item, Key)\r
479\r
480 self.CommonDefines.FeatureFlag = ConvertNOTEQToNE(self.CommonDefines.FeatureFlag)\r
481\r
482 SourceFile = SourceFileObject()\r
483 SourceFile.SetSourceFile(self.SourceFile)\r
484 SourceFile.SetFamily(self.ToolChainFamily)\r
485 SourceFile.SetSupArchList(self.CommonDefines.SupArchList)\r
486 SourceFile.SetFeatureFlag(self.CommonDefines.FeatureFlag)\r
487\r
488 return SourceFile\r
489\r
490 def ToXml(self, SourceFile, Key):\r
491 if self.SourceFile:\r
492 pass\r
493 FeatureFlag = ConvertNEToNOTEQ(SourceFile.GetFeatureFlag())\r
494 AttributeList = [['SupArchList', GetStringOfList(SourceFile.GetSupArchList())],\r
495 ['Family', SourceFile.GetFamily()],\r
496 ['FeatureFlag', FeatureFlag], ]\r
497 Root = CreateXmlElement('%s' % Key, SourceFile.GetSourceFile(), [], AttributeList)\r
498 return Root\r
499\r
500##\r
501# ModulePropertyXml\r
502#\r
503class ModulePropertyXml(object):\r
504 def __init__(self):\r
505 self.CommonDefines = CommonDefinesXml()\r
506 self.ModuleType = ''\r
507 self.Path = ''\r
508 self.PcdIsDriver = ''\r
509 self.UefiSpecificationVersion = ''\r
510 self.PiSpecificationVersion = ''\r
511 self.SpecificationList = []\r
512 self.SpecificationVersion = ''\r
513 self.BootModes = []\r
514 self.Events = []\r
515 self.HOBs = []\r
516\r
517 def FromXml(self, Item, Key, Header=None):\r
518 self.CommonDefines.FromXml(Item, Key)\r
519 self.ModuleType = XmlElement(Item, '%s/ModuleType' % Key)\r
520 self.Path = XmlElement(Item, '%s/Path' % Key)\r
521 self.PcdIsDriver = XmlElement(Item, '%s/PcdIsDriver' % Key)\r
522 self.UefiSpecificationVersion = XmlElement(Item, '%s/UefiSpecificationVersion' % Key)\r
523 self.PiSpecificationVersion = XmlElement(Item, '%s/PiSpecificationVersion' % Key)\r
524 for SubItem in XmlList(Item, '%s/Specification' % Key):\r
525 Specification = XmlElement(SubItem, '/Specification')\r
526 Version = XmlAttribute(XmlNode(SubItem, '/Specification'), 'Version')\r
527 self.SpecificationList.append((Specification, Version))\r
528 for SubItem in XmlList(Item, '%s/BootMode' % Key):\r
529 Axml = BootModeXml()\r
530 BootMode = Axml.FromXml(SubItem, 'BootMode')\r
531 self.BootModes.append(BootMode)\r
532 for SubItem in XmlList(Item, '%s/Event' % Key):\r
533 Axml = EventXml()\r
534 Event = Axml.FromXml(SubItem, 'Event')\r
535 self.Events.append(Event)\r
536 for SubItem in XmlList(Item, '%s/HOB' % Key):\r
537 Axml = HobXml()\r
538 Hob = Axml.FromXml(SubItem, 'HOB')\r
539 self.HOBs.append(Hob)\r
540\r
541 if Header == None:\r
542 Header = ModuleObject()\r
543\r
544 Header.SetModuleType(self.ModuleType)\r
545 Header.SetSupArchList(self.CommonDefines.SupArchList)\r
546 Header.SetModulePath(self.Path)\r
547\r
548 Header.SetPcdIsDriver(self.PcdIsDriver)\r
549 Header.SetUefiSpecificationVersion(self.UefiSpecificationVersion)\r
550 Header.SetPiSpecificationVersion(self.PiSpecificationVersion)\r
551 Header.SetSpecList(self.SpecificationList)\r
552\r
553 return Header, self.BootModes, self.Events, self.HOBs\r
554\r
555\r
556 def ToXml(self, Header, BootModes, Events, Hobs, Key):\r
557 if self.ModuleType:\r
558 pass\r
559 AttributeList = [['SupArchList', GetStringOfList(Header.GetSupArchList())], ]\r
560\r
561 NodeList = [['ModuleType', Header.GetModuleType()],\r
562 ['Path', Header.GetModulePath()],\r
563 ['PcdIsDriver', Header.GetPcdIsDriver()],\r
564 ['UefiSpecificationVersion', Header.GetUefiSpecificationVersion()],\r
565 ['PiSpecificationVersion', Header.GetPiSpecificationVersion()],\r
566 ]\r
567 for Item in Header.GetSpecList():\r
568 Spec, Version = Item\r
569 SpecElem = CreateXmlElement('Specification', Spec, [], [['Version', Version]])\r
570 NodeList.append(SpecElem)\r
571\r
572 for Item in BootModes:\r
573 Tmp = BootModeXml()\r
574 NodeList.append(Tmp.ToXml(Item, 'BootMode'))\r
575 for Item in Events:\r
576 Tmp = EventXml()\r
577 NodeList.append(Tmp.ToXml(Item, 'Event'))\r
578 for Item in Hobs:\r
579 Tmp = HobXml()\r
580 NodeList.append(Tmp.ToXml(Item, 'HOB'))\r
581 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
582\r
583 return Root\r
584\r
585 def __str__(self):\r
586 Str = "ModuleType = %s Path = %s PcdIsDriver = %s UefiSpecificationVersion = %s PiSpecificationVersion = %s \\r
587 Specification = %s SpecificationVersion = %s %s" % \\r
588 (self.ModuleType, self.Path, self.PcdIsDriver, \\r
589 self.UefiSpecificationVersion, self.PiSpecificationVersion, \\r
590 self.SpecificationList, self.SpecificationVersion, self.CommonDefines)\r
591 for Item in self.BootModes:\r
592 Str = Str + '\n\t' + str(Item)\r
593 for Item in self.Events:\r
594 Str = Str + '\n\t' + str(Item)\r
595 for Item in self.HOBs:\r
596 Str = Str + '\n\t' + str(Item)\r
597 return Str\r
598\r
599##\r
600# ModuleXml\r
601#\r
602class ModuleSurfaceAreaXml(object):\r
603 def __init__(self, Package=''):\r
604 self.Module = None\r
605 #\r
606 # indicate the package that this module resides in\r
607 #\r
608 self.Package = Package\r
609\r
610 def FromXml2(self, Item, Module):\r
611 if self.Module:\r
612 pass\r
613 #\r
614 # PeiDepex\r
615 #\r
616 PeiDepexList = []\r
617 for SubItem in XmlList(Item, '/ModuleSurfaceArea/PeiDepex'):\r
618 Tmp = DepexXml()\r
619 Depex = Tmp.FromXml(XmlNode(SubItem, 'PeiDepex'), 'PeiDepex')\r
620 PeiDepexList.append(Depex)\r
621 Module.SetPeiDepex(PeiDepexList)\r
622\r
623 #\r
624 # DxeDepex\r
625 #\r
626 DxeDepexList = []\r
627 for SubItem in XmlList(Item, '/ModuleSurfaceArea/DxeDepex'):\r
628 Tmp = DepexXml()\r
629 Depex = Tmp.FromXml(XmlNode(SubItem, 'DxeDepex'), 'DxeDepex')\r
630 DxeDepexList.append(Depex)\r
631 Module.SetDxeDepex(DxeDepexList)\r
632\r
633 #\r
634 # SmmDepex\r
635 #\r
636 SmmDepexList = []\r
637 for SubItem in XmlList(Item, '/ModuleSurfaceArea/SmmDepex'):\r
638 Tmp = DepexXml()\r
639 Depex = Tmp.FromXml(XmlNode(SubItem, 'SmmDepex'), 'SmmDepex')\r
640 SmmDepexList.append(Depex)\r
641 Module.SetSmmDepex(SmmDepexList)\r
642\r
643 #\r
644 # MiscellaneousFile\r
645 Tmp = MiscellaneousFileXml()\r
646 MiscFileList = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/MiscellaneousFiles'), 'MiscellaneousFiles')\r
647 if MiscFileList:\r
648 Module.SetMiscFileList([MiscFileList])\r
649 else:\r
650 Module.SetMiscFileList([])\r
651\r
652 # \r
653 # UserExtensions\r
654 #\r
655 for Item in XmlList(Item, '/ModuleSurfaceArea/UserExtensions'):\r
656 Tmp = UserExtensionsXml()\r
657 UserExtension = Tmp.FromXml(Item, 'UserExtensions')\r
658 Module.SetUserExtensionList(Module.GetUserExtensionList() + [UserExtension])\r
659\r
660 return Module\r
661\r
662 def FromXml(self, Item, Key, IsStandAlongModule=False):\r
663 IsBinaryModule = XmlAttribute(Item, 'BinaryModule')\r
664 #\r
665 # Header\r
666 #\r
667 Tmp = HeaderXml()\r
668 Module = Tmp.FromXml(XmlNode(Item, '/%s/Header' % Key), 'Header', True, IsStandAlongModule)\r
669 Module.SetBinaryModule(IsBinaryModule)\r
670\r
671 if IsBinaryModule:\r
672 GlobalData.gIS_BINARY_INF = True\r
673\r
674 #\r
675 # ModuleProperties\r
676 #\r
677 Tmp = ModulePropertyXml()\r
678 (Module, BootModes, Events, HOBs) = \\r
679 Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/ModuleProperties'), 'ModuleProperties', Module)\r
680 Module.SetBootModeList(BootModes)\r
681 Module.SetEventList(Events)\r
682 Module.SetHobList(HOBs)\r
683 #\r
684 # ClonedFrom\r
685 #\r
686 Tmp = ClonedFromXml()\r
687 ClonedFrom = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/ClonedFrom'), 'ClonedFrom')\r
688 if ClonedFrom:\r
689 Module.SetClonedFrom(ClonedFrom)\r
690\r
691 #\r
692 # LibraryClass\r
693 #\r
694 for SubItem in XmlList(Item, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):\r
695 Tmp = LibraryClassXml()\r
696 LibraryClass = Tmp.FromXml(SubItem, 'LibraryClass')\r
697 Module.SetLibraryClassList(Module.GetLibraryClassList() + [LibraryClass])\r
698\r
699 if XmlList(Item, '/ModuleSurfaceArea/LibraryClassDefinitions') and \\r
700 not XmlList(Item, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):\r
701 Module.SetLibraryClassList([None])\r
702\r
703 #\r
704 # SourceFiles\r
705 #\r
706 for SubItem in XmlList(Item, '/ModuleSurfaceArea/SourceFiles/Filename'):\r
707 Tmp = SourceFileXml()\r
708 SourceFile = Tmp.FromXml(SubItem, 'Filename')\r
709 Module.SetSourceFileList(Module.GetSourceFileList() + [SourceFile])\r
710\r
711 if XmlList(Item, '/ModuleSurfaceArea/SourceFiles') and \\r
712 not XmlList(Item, '/ModuleSurfaceArea/SourceFiles/Filename') :\r
713 Module.SetSourceFileList([None])\r
714\r
715 #\r
716 # BinaryFile\r
717 #\r
718 for SubItem in XmlList(Item, '/ModuleSurfaceArea/BinaryFiles/BinaryFile'):\r
719 Tmp = BinaryFileXml()\r
720 BinaryFile = Tmp.FromXml(SubItem, 'BinaryFile')\r
721 Module.SetBinaryFileList(Module.GetBinaryFileList() + [BinaryFile])\r
722\r
723 if XmlList(Item, '/ModuleSurfaceArea/BinaryFiles') and \\r
724 not XmlList(Item, '/ModuleSurfaceArea/BinaryFiles/BinaryFile') :\r
725 Module.SetBinaryFileList([None])\r
726 #\r
727 # PackageDependencies\r
728 #\r
729 for SubItem in XmlList(Item, '/ModuleSurfaceArea/PackageDependencies/Package'):\r
730 Tmp = PackageXml()\r
731 PackageDependency = Tmp.FromXml(SubItem, 'Package')\r
732 Module.SetPackageDependencyList(Module.GetPackageDependencyList() + [PackageDependency])\r
733\r
734 if XmlList(Item, '/ModuleSurfaceArea/PackageDependencies') and \\r
735 not XmlList(Item, '/ModuleSurfaceArea/PackageDependencies/Package'):\r
736 Module.SetPackageDependencyList([None])\r
737\r
738 # \r
739 # Guid\r
740 #\r
741 for SubItem in XmlList(Item, '/ModuleSurfaceArea/Guids/GuidCName'):\r
742 Tmp = GuidXml('Module')\r
743 GuidProtocolPpi = Tmp.FromXml(SubItem, 'GuidCName')\r
744 Module.SetGuidList(Module.GetGuidList() + [GuidProtocolPpi])\r
745\r
746 if XmlList(Item, '/ModuleSurfaceArea/Guids') and not XmlList(Item, '/ModuleSurfaceArea/Guids/GuidCName'):\r
747 Module.SetGuidList([None])\r
748\r
749 #\r
750 # Protocol\r
751 #\r
752 for SubItem in XmlList(Item, '/ModuleSurfaceArea/Protocols/Protocol'):\r
753 Tmp = ProtocolXml('Module')\r
754 GuidProtocolPpi = Tmp.FromXml(SubItem, 'Protocol')\r
755 Module.SetProtocolList(Module.GetProtocolList() + [GuidProtocolPpi])\r
756\r
757 if XmlList(Item, '/ModuleSurfaceArea/Protocols') and not XmlList(Item, '/ModuleSurfaceArea/Protocols/Protocol'):\r
758 Module.SetProtocolList([None])\r
759\r
760 #\r
761 # Ppi\r
762 #\r
763 for SubItem in XmlList(Item, '/ModuleSurfaceArea/PPIs/Ppi'):\r
764 Tmp = PpiXml('Module')\r
765 GuidProtocolPpi = Tmp.FromXml(SubItem, 'Ppi')\r
766 Module.SetPpiList(Module.GetPpiList() + [GuidProtocolPpi])\r
767\r
768 if XmlList(Item, '/ModuleSurfaceArea/PPIs') and not XmlList(Item, '/ModuleSurfaceArea/PPIs/Ppi'):\r
769 Module.SetPpiList([None])\r
770\r
771 #\r
772 # Extern\r
773 #\r
774 for SubItem in XmlList(Item, '/ModuleSurfaceArea/Externs/Extern'):\r
775 Tmp = ExternXml()\r
776 Extern = Tmp.FromXml(SubItem, 'Extern')\r
777 Module.SetExternList(Module.GetExternList() + [Extern])\r
778\r
779 if XmlList(Item, '/ModuleSurfaceArea/Externs') and not XmlList(Item, '/ModuleSurfaceArea/Externs/Extern'):\r
780 Module.SetExternList([None])\r
781\r
782 if not Module.GetBinaryModule():\r
783 #\r
784 # PcdCoded\r
785 #\r
786 for SubItem in XmlList(Item, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):\r
787 Tmp = PcdEntryXml()\r
788 PcdEntry = Tmp.FromXml3(SubItem, 'PcdEntry')\r
789 Module.SetPcdList(Module.GetPcdList() + [PcdEntry])\r
790\r
791 if XmlList(Item, '/ModuleSurfaceArea/PcdCoded') and \\r
792 not XmlList(Item, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):\r
793 Module.SetPcdList([None])\r
794\r
795 Module = self.FromXml2(Item, Module)\r
796 #\r
797 # return the module object\r
798 #\r
799 self.Module = Module\r
800 return self.Module\r
801\r
802 def ToXml(self, Module):\r
803 if self.Package:\r
804 pass\r
805 #\r
806 # Create root node of module surface area\r
807 #\r
808 DomModule = minidom.Document().createElement('ModuleSurfaceArea')\r
809 if Module.GetBinaryModule():\r
810 DomModule.setAttribute('BinaryModule', 'true')\r
811\r
812 #\r
813 # Header\r
814 #\r
815 Tmp = HeaderXml()\r
816 DomModule.appendChild(Tmp.ToXml(Module, 'Header'))\r
817 #\r
818 # ModuleProperties\r
819 #\r
820 Tmp = ModulePropertyXml()\r
821 DomModule.appendChild(Tmp.ToXml(Module, Module.GetBootModeList(), Module.GetEventList(), Module.GetHobList(), \\r
822 'ModuleProperties'))\r
823 #\r
824 # ClonedFrom\r
825 #\r
826 Tmp = ClonedFromXml()\r
827 if Module.GetClonedFrom():\r
828 DomModule.appendChild(Tmp.ToXml(Module.GetClonedFrom(), 'ClonedFrom'))\r
829 #\r
830 # LibraryClass\r
831 #\r
832 LibraryClassNode = CreateXmlElement('LibraryClassDefinitions', '', [], [])\r
833 for LibraryClass in Module.GetLibraryClassList():\r
834 Tmp = LibraryClassXml()\r
835 LibraryClassNode.appendChild(Tmp.ToXml2(LibraryClass, 'LibraryClass'))\r
836 DomModule.appendChild(LibraryClassNode)\r
837 #\r
838 # SourceFile\r
839 #\r
840 SourceFileNode = CreateXmlElement('SourceFiles', '', [], [])\r
841 for SourceFile in Module.GetSourceFileList():\r
842 Tmp = SourceFileXml()\r
843 SourceFileNode.appendChild(Tmp.ToXml(SourceFile, 'Filename'))\r
844 DomModule.appendChild(SourceFileNode)\r
845 #\r
846 # BinaryFile\r
847 #\r
848 BinaryFileNode = CreateXmlElement('BinaryFiles', '', [], [])\r
849 for BinaryFile in Module.GetBinaryFileList():\r
850 Tmp = BinaryFileXml()\r
851 BinaryFileNode.appendChild(Tmp.ToXml(BinaryFile, 'BinaryFile'))\r
852 DomModule.appendChild(BinaryFileNode)\r
853 #\r
854 # PackageDependencies\r
855 #\r
856 PackageDependencyNode = CreateXmlElement('PackageDependencies', '', [], [])\r
857 for PackageDependency in Module.GetPackageDependencyList():\r
858 Tmp = PackageXml()\r
859 PackageDependencyNode.appendChild(Tmp.ToXml(PackageDependency, 'Package'))\r
860 DomModule.appendChild(PackageDependencyNode)\r
861\r
862 #\r
863 # Guid\r
864 #\r
865 GuidProtocolPpiNode = CreateXmlElement('Guids', '', [], [])\r
866 for GuidProtocolPpi in Module.GetGuidList():\r
867 Tmp = GuidXml('Module')\r
868 GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'GuidCName'))\r
869 DomModule.appendChild(GuidProtocolPpiNode)\r
870\r
871 #\r
872 # Protocol\r
873 #\r
874 GuidProtocolPpiNode = CreateXmlElement('Protocols', '', [], [])\r
875 for GuidProtocolPpi in Module.GetProtocolList():\r
876 Tmp = ProtocolXml('Module')\r
877 GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Protocol'))\r
878 DomModule.appendChild(GuidProtocolPpiNode)\r
879\r
880 #\r
881 # Ppi\r
882 #\r
883 GuidProtocolPpiNode = CreateXmlElement('PPIs', '', [], [])\r
884 for GuidProtocolPpi in Module.GetPpiList():\r
885 Tmp = PpiXml('Module')\r
886 GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Ppi'))\r
887 DomModule.appendChild(GuidProtocolPpiNode)\r
888 #\r
889 # Extern\r
890 #\r
891 ExternNode = CreateXmlElement('Externs', '', [], [])\r
892 for Extern in Module.GetExternList():\r
893 Tmp = ExternXml()\r
894 ExternNode.appendChild(Tmp.ToXml(Extern, 'Extern'))\r
895 DomModule.appendChild(ExternNode)\r
896 #\r
897 # PcdCoded\r
898 #\r
899 PcdEntryNode = CreateXmlElement('PcdCoded', '', [], [])\r
900 for PcdEntry in Module.GetPcdList():\r
901 Tmp = PcdEntryXml()\r
902 PcdEntryNode.appendChild(Tmp.ToXml3(PcdEntry, 'PcdEntry'))\r
903 DomModule.appendChild(PcdEntryNode)\r
904\r
905 #\r
906 # PeiDepex\r
907 #\r
908 if Module.GetPeiDepex():\r
909 for Item in Module.GetPeiDepex():\r
910 Tmp = DepexXml()\r
911 DomModule.appendChild(Tmp.ToXml(Item, 'PeiDepex'))\r
912\r
913 #\r
914 # DxeDepex\r
915 #\r
916 if Module.GetDxeDepex():\r
917 for Item in Module.GetDxeDepex():\r
918 Tmp = DepexXml()\r
919 DomModule.appendChild(Tmp.ToXml(Item, 'DxeDepex'))\r
920\r
921 #\r
922 # SmmDepex\r
923 #\r
924 if Module.GetSmmDepex():\r
925 for Item in Module.GetSmmDepex():\r
926 Tmp = DepexXml()\r
927 DomModule.appendChild(Tmp.ToXml(Item, 'SmmDepex'))\r
928\r
929 #\r
930 # MiscellaneousFile\r
931 #\r
932 if Module.GetMiscFileList():\r
933 Tmp = MiscellaneousFileXml()\r
934 DomModule.appendChild(Tmp.ToXml(Module.GetMiscFileList()[0], 'MiscellaneousFiles'))\r
935 #\r
936 # UserExtensions\r
937 #\r
938 if Module.GetUserExtensionList():\r
939 for UserExtension in Module.GetUserExtensionList():\r
940 Tmp = UserExtensionsXml()\r
941 DomModule.appendChild(Tmp.ToXml(UserExtension, 'UserExtensions'))\r
942\r
943 return DomModule\r
944\r
945##\r
946# BuildFlagXml used to generate BuildFlag for <AsBuilt>\r
947#\r
948class BuildFlagXml(object):\r
949 def __init__(self):\r
950 self.Target = ''\r
951 self.TagName = ''\r
952 self.Family = ''\r
953 self.AsBuiltFlags = ''\r
954\r
955 def FromXml(self, Item, Key):\r
956 self.Target = XmlElement(Item, '%s/Target' % Key)\r
957 self.TagName = XmlElement(Item, '%s/TagName' % Key)\r
958 self.Family = XmlElement(Item, '%s/Family' % Key)\r
959\r
960 BuildFlag = BinaryBuildFlagObject()\r
961\r
962 BuildFlag.SetTarget(self.Target)\r
963 BuildFlag.SetTagName(self.TagName)\r
964 BuildFlag.SetFamily(self.Family)\r
965\r
966 return BuildFlag\r
967\r
968 #\r
969 # For AsBuild INF usage\r
970 #\r
971 def FromXml2(self, Item, Key):\r
972 self.AsBuiltFlags = XmlElement(Item, '%s' % Key)\r
973\r
974 LineList = GetSplitValueList(self.AsBuiltFlags, '\n')\r
975 ReturnLine = ''\r
976 Count = 0\r
977 for Line in LineList:\r
978 if Count == 0:\r
979 ReturnLine = "# " + Line\r
980 else:\r
981 ReturnLine = ReturnLine + '\n' + '# ' + Line\r
982 Count += 1\r
983\r
984 BuildFlag = BinaryBuildFlagObject()\r
985 BuildFlag.SetAsBuiltOptionFlags(ReturnLine)\r
986\r
987 return BuildFlag\r
988\r
989 def ToXml(self, BuildFlag, Key):\r
990 if self.Target:\r
991 pass\r
992 AttributeList = []\r
993 NodeList = []\r
994 NodeList.append(['BuildFlags', BuildFlag])\r
995\r
996 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
997 return Root\r