]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/PomAdapter/InfPomAlignmentMisc.py
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / BaseTools / Source / Python / UPT / PomAdapter / InfPomAlignmentMisc.py
CommitLineData
4234283c
LG
1## @file InfPomAlignmentMisc.py\r
2# This file contained the routines for InfPomAlignment\r
3#\r
64285f15 4# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>\r
4234283c 5#\r
2e351cbe 6# SPDX-License-Identifier: BSD-2-Clause-Patent\r
4234283c
LG
7#\r
8\r
9'''\r
10InfPomAlignmentMisc\r
11'''\r
12\r
13##\r
14# Import modules\r
15#\r
16import Logger.Log as Logger\r
17from Library import DataType as DT\r
18from Library.Misc import ConvertArchList\r
19from Object.POM.ModuleObject import BinaryFileObject\r
20from Object.POM import CommonObject\r
64285f15 21from Library.StringUtils import FORMAT_INVALID\r
421ccda3
HC
22from Library.Misc import CheckGuidRegFormat\r
23from Logger import StringTable as ST\r
24\r
4234283c
LG
25\r
26## GenModuleHeaderUserExt\r
27#\r
28#\r
29def GenModuleHeaderUserExt(DefineObj, ArchString):\r
30 DefinesDictNew = {}\r
31 EdkReleaseVersion = DefineObj.GetEdkReleaseVersion()\r
32 Shadow = DefineObj.GetShadow()\r
33 DpxSource = DefineObj.GetDpxSource()\r
34 PciVendorId = DefineObj.GetPciVendorId()\r
35 PciDeviceId = DefineObj.GetPciDeviceId()\r
36 PciClassCode = DefineObj.GetPciClassCode()\r
37 PciRevision = DefineObj.GetPciRevision()\r
38 PciCompress = DefineObj.GetPciCompress()\r
39 CustomMakefile = DefineObj.GetCustomMakefile()\r
40 UefiHiiResourceSection = DefineObj.GetUefiHiiResourceSection()\r
41\r
4231a819 42 if EdkReleaseVersion is not None:\r
4234283c
LG
43 Name = DT.TAB_INF_DEFINES_EDK_RELEASE_VERSION\r
44 Value = EdkReleaseVersion.GetValue()\r
45 Statement = _GenInfDefineStateMent(EdkReleaseVersion.Comments.GetHeaderComments(),\r
46 Name,\r
47 Value,\r
48 EdkReleaseVersion.Comments.GetTailComments())\r
49 DefinesDictNew[Statement] = ArchString\r
50\r
4231a819 51 if Shadow is not None:\r
4234283c
LG
52 Name = DT.TAB_INF_DEFINES_SHADOW\r
53 Value = Shadow.GetValue()\r
54 Statement = _GenInfDefineStateMent(Shadow.Comments.GetHeaderComments(),\r
55 Name,\r
56 Value,\r
57 Shadow.Comments.GetTailComments())\r
58 DefinesDictNew[Statement] = ArchString\r
59\r
4231a819 60 if DpxSource is not None:\r
4234283c
LG
61 Name = DT.TAB_INF_DEFINES_DPX_SOURCE\r
62 for DpxSourceItem in DpxSource:\r
63 Value = DpxSourceItem[0]\r
64 Statement = _GenInfDefineStateMent(DpxSourceItem[1].GetHeaderComments(),\r
65 Name,\r
66 Value,\r
67 DpxSourceItem[1].GetTailComments())\r
68 DefinesDictNew[Statement] = ArchString\r
69\r
4231a819 70 if PciVendorId is not None:\r
4234283c
LG
71 Name = DT.TAB_INF_DEFINES_PCI_VENDOR_ID\r
72 Value = PciVendorId.GetValue()\r
73 Statement = _GenInfDefineStateMent(PciVendorId.Comments.GetHeaderComments(),\r
74 Name,\r
75 Value,\r
76 PciVendorId.Comments.GetTailComments())\r
77 DefinesDictNew[Statement] = ArchString\r
78\r
4231a819 79 if PciDeviceId is not None:\r
4234283c
LG
80 Name = DT.TAB_INF_DEFINES_PCI_DEVICE_ID\r
81 Value = PciDeviceId.GetValue()\r
82 Statement = _GenInfDefineStateMent(PciDeviceId.Comments.GetHeaderComments(),\r
83 Name,\r
84 Value,\r
85 PciDeviceId.Comments.GetTailComments())\r
86 DefinesDictNew[Statement] = ArchString\r
87\r
4231a819 88 if PciClassCode is not None:\r
4234283c
LG
89 Name = DT.TAB_INF_DEFINES_PCI_CLASS_CODE\r
90 Value = PciClassCode.GetValue()\r
91 Statement = _GenInfDefineStateMent(PciClassCode.Comments.GetHeaderComments(),\r
92 Name,\r
93 Value,\r
94 PciClassCode.Comments.GetTailComments())\r
95 DefinesDictNew[Statement] = ArchString\r
96\r
4231a819 97 if PciRevision is not None:\r
4234283c
LG
98 Name = DT.TAB_INF_DEFINES_PCI_REVISION\r
99 Value = PciRevision.GetValue()\r
100 Statement = _GenInfDefineStateMent(PciRevision.Comments.GetHeaderComments(),\r
101 Name,\r
102 Value,\r
103 PciRevision.Comments.GetTailComments())\r
104 DefinesDictNew[Statement] = ArchString\r
105\r
4231a819 106 if PciCompress is not None:\r
4234283c
LG
107 Name = DT.TAB_INF_DEFINES_PCI_COMPRESS\r
108 Value = PciCompress.GetValue()\r
109 Statement = _GenInfDefineStateMent(PciCompress.Comments.GetHeaderComments(),\r
110 Name,\r
111 Value,\r
112 PciCompress.Comments.GetTailComments())\r
113 DefinesDictNew[Statement] = ArchString\r
114\r
115 if len(CustomMakefile) >= 1:\r
116 for CustomMakefileItem in CustomMakefile:\r
117 Name = DT.TAB_INF_DEFINES_CUSTOM_MAKEFILE\r
118 #\r
119 # Not with Feature Flag Expression\r
120 #\r
121 if len(CustomMakefileItem) == 3:\r
122 if CustomMakefileItem[0] != '':\r
123 Value = CustomMakefileItem[0] + ' | ' + CustomMakefileItem[1]\r
124 else:\r
125 Value = CustomMakefileItem[1]\r
126\r
127 Comments = CustomMakefileItem[2]\r
128 Statement = _GenInfDefineStateMent(Comments.GetHeaderComments(),\r
129 Name,\r
130 Value,\r
131 Comments.GetTailComments())\r
132\r
133 DefinesDictNew[Statement] = ArchString\r
134\r
4231a819 135 if UefiHiiResourceSection is not None:\r
4234283c
LG
136 Name = DT.TAB_INF_DEFINES_UEFI_HII_RESOURCE_SECTION\r
137 Value = UefiHiiResourceSection.GetValue()\r
138 HeaderComment = UefiHiiResourceSection.Comments.GetHeaderComments()\r
139 TailComment = UefiHiiResourceSection.Comments.GetTailComments()\r
140 Statement = _GenInfDefineStateMent(HeaderComment,\r
141 Name,\r
142 Value,\r
143 TailComment)\r
144 DefinesDictNew[Statement] = ""\r
145\r
146 return DefinesDictNew\r
147\r
148\r
149## Generate the define statement that will be put into userextension\r
150# Not support comments.\r
151#\r
fb0b35e0 152# @param HeaderComment: the original header comment (# not removed)\r
4234283c
LG
153# @param Name: the definition keyword, should not be empty or none\r
154# @param Value: the definition keyword value\r
fb0b35e0 155# @param TailComment: the original Tail comment (# not removed)\r
4234283c
LG
156#\r
157# @return: the regenerated define statement\r
158#\r
159def _GenInfDefineStateMent(HeaderComment, Name, Value, TailComment):\r
160 Logger.Debug(5, HeaderComment + TailComment)\r
161 Statement = '%s = %s' % (Name, Value)\r
162\r
163 return Statement\r
164\r
165## GenBinaryData\r
166#\r
167#\r
421ccda3
HC
168def GenBinaryData(BinaryData, BinaryObj, BinariesDict, AsBuildIns, BinaryFileObjectList, \\r
169 SupArchList, BinaryModule, DecObjList=None):\r
4234283c
LG
170 if BinaryModule:\r
171 pass\r
172 OriSupArchList = SupArchList\r
173 for Item in BinaryData:\r
174 ItemObj = BinaryObj[Item][0][0]\r
175 if ItemObj.GetType() not in DT.BINARY_FILE_TYPE_UI_LIST + DT.BINARY_FILE_TYPE_VER_LIST:\r
176 TagName = ItemObj.GetTagName()\r
177 Family = ItemObj.GetFamily()\r
178 else:\r
179 TagName = ''\r
180 Family = ''\r
f7496d71 181\r
4234283c
LG
182 FFE = ItemObj.GetFeatureFlagExp()\r
183\r
184 #\r
185 # If have architecturie specified, then use the specified architecturie;\r
186 # If the section tag does not have an architecture modifier or the modifier is "common" (case in-sensitive),\r
f7496d71 187 # and the VALID_ARCHITECTURES comment exists, the list from the VALID_ARCHITECTURES comment\r
4234283c
LG
188 # can be used for the attribute.\r
189 # If both not have VALID_ARCHITECTURE comment and no architecturie specified, then keep it empty.\r
f7496d71 190 #\r
0d1f5b2b 191 SupArchList = sorted(ConvertArchList(ItemObj.GetSupArchList()))\r
4234283c
LG
192 if len(SupArchList) == 1 and SupArchList[0] == 'COMMON':\r
193 if not (len(OriSupArchList) == 1 or OriSupArchList[0] == 'COMMON'):\r
194 SupArchList = OriSupArchList\r
195 else:\r
196 SupArchList = ['COMMON']\r
197\r
198 FileNameObj = CommonObject.FileNameObject()\r
199 FileNameObj.SetFileType(ItemObj.GetType())\r
200 FileNameObj.SetFilename(ItemObj.GetFileName())\r
201 FileNameObj.SetFeatureFlag(FFE)\r
421ccda3
HC
202 #\r
203 # Get GUID value of the GUID CName in the DEC file\r
204 #\r
f7496d71 205 if ItemObj.GetType() == DT.SUBTYPE_GUID_BINARY_FILE_TYPE:\r
421ccda3
HC
206 if not CheckGuidRegFormat(ItemObj.GetGuidValue()):\r
207 if not DecObjList:\r
208 if DT.TAB_HORIZON_LINE_SPLIT in ItemObj.GetGuidValue() or \\r
209 DT.TAB_COMMA_SPLIT in ItemObj.GetGuidValue():\r
210 Logger.Error("\nMkPkg",\r
211 FORMAT_INVALID,\r
212 ST.ERR_DECPARSE_DEFINE_PKGGUID,\r
213 ExtraData=ItemObj.GetGuidValue(),\r
214 RaiseError=True)\r
215 else:\r
216 Logger.Error("\nMkPkg",\r
217 FORMAT_INVALID,\r
218 ST.ERR_UNI_SUBGUID_VALUE_DEFINE_DEC_NOT_FOUND % \\r
219 (ItemObj.GetGuidValue()),\r
220 RaiseError=True)\r
221 else:\r
222 for DecObj in DecObjList:\r
223 for GuidObj in DecObj.GetGuidList():\r
224 if GuidObj.GetCName() == ItemObj.GetGuidValue():\r
225 FileNameObj.SetGuidValue(GuidObj.GetGuid())\r
226 break\r
227\r
f7496d71 228 if not FileNameObj.GetGuidValue():\r
421ccda3
HC
229 Logger.Error("\nMkPkg",\r
230 FORMAT_INVALID,\r
231 ST.ERR_DECPARSE_CGUID_NOT_FOUND % \\r
232 (ItemObj.GetGuidValue()),\r
f7496d71 233 RaiseError=True)\r
421ccda3
HC
234 else:\r
235 FileNameObj.SetGuidValue(ItemObj.GetGuidValue().strip())\r
236\r
4234283c
LG
237 FileNameObj.SetSupArchList(SupArchList)\r
238 FileNameList = [FileNameObj]\r
239\r
240 BinaryFile = BinaryFileObject()\r
241 BinaryFile.SetFileNameList(FileNameList)\r
242 BinaryFile.SetAsBuiltList(AsBuildIns)\r
243 BinaryFileObjectList.append(BinaryFile)\r
244\r
245 SupArchStr = ' '.join(SupArchList)\r
246 Key = (ItemObj.GetFileName(), ItemObj.GetType(), FFE, SupArchStr)\r
247 ValueItem = (ItemObj.GetTarget(), Family, TagName, '')\r
248 if Key in BinariesDict:\r
249 ValueList = BinariesDict[Key]\r
250 ValueList.append(ValueItem)\r
251 BinariesDict[Key] = ValueList\r
252 else:\r
253 BinariesDict[Key] = [ValueItem]\r
254\r
255 return BinariesDict, AsBuildIns, BinaryFileObjectList\r