]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/GenBuild/org/tianocore/build/pcd/entity/UsageInstance.java
PCD tools update:
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / pcd / entity / UsageInstance.java
CommitLineData
878ddf1f 1/** @file\r
2 UsageInstance class.\r
3\r
4 This class indicate an usage instance for a PCD token. This instance maybe a module\r
5 or platform setting. When a module produce or cosume a PCD token, then this module\r
6 is an usage instance for this PCD token.\r
7 \r
8Copyright (c) 2006, Intel Corporation\r
9All rights reserved. This program and the accompanying materials\r
10are licensed and made available under the terms and conditions of the BSD License\r
11which accompanies this distribution. The full text of the license may be found at\r
12http://opensource.org/licenses/bsd-license.php\r
13 \r
14THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
15WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
16\r
17**/ \r
18package org.tianocore.build.pcd.entity;\r
19\r
20\r
8840ad58 21import java.util.UUID;\r
878ddf1f 22\r
23import org.tianocore.build.autogen.CommonDefinition;\r
8840ad58 24import org.tianocore.build.pcd.action.ActionMessage;\r
25import org.tianocore.build.pcd.exception.EntityException;\r
878ddf1f 26\r
27/**\r
28 This class indicate an usage instance for a PCD token. This instance maybe a module\r
29 or platform setting. When a module produce or cosume a PCD token, then this module\r
30 is an usage instance for this PCD token.\r
31**/\r
32public class UsageInstance {\r
8840ad58 33 ///\r
34 /// The module type of usage instance.\r
35 /// \r
36 public enum MODULE_TYPE {SEC, PEI_CORE, PEIM, DXE_CORE, DXE_DRIVERS, OTHER_COMPONENTS}\r
878ddf1f 37 ///\r
38 /// This parent that this usage instance belongs to.\r
39 ///\r
40 public Token parentToken;\r
41 ///\r
878ddf1f 42 /// The name of the module who contains this PCD.\r
43 ///\r
44 public String moduleName;\r
45 ///\r
8840ad58 46 /// The GUID of the module who contains this PCD. \r
47 /// \r
48 public UUID moduleGUID;\r
49 ///\r
878ddf1f 50 /// The name of the package whose module contains this PCD.\r
51 ///\r
52 public String packageName;\r
53 ///\r
8840ad58 54 /// The GUID of the package whose module contains this PCD.\r
55 /// \r
56 public UUID packageGUID;\r
878ddf1f 57 ///\r
8840ad58 58 /// The PCD type defined for module \r
59 /// \r
60 public Token.PCD_TYPE modulePcdType;\r
878ddf1f 61 ///\r
8840ad58 62 /// The arch string of module contains this PCD\r
878ddf1f 63 ///\r
8840ad58 64 public String arch;\r
878ddf1f 65 ///\r
8840ad58 66 /// The version of module contains this PCD\r
67 /// \r
68 public String version;\r
878ddf1f 69 ///\r
8840ad58 70 /// The module type for this usage instance.\r
878ddf1f 71 ///\r
8840ad58 72 public MODULE_TYPE moduleType;\r
878ddf1f 73 ///\r
8840ad58 74 /// The value of the PCD in this usage instance. \r
75 /// \r
76 public Object datum;\r
878ddf1f 77 ///\r
78 /// Autogen string for header file.\r
79 ///\r
80 public String hAutogenStr;\r
81 /**\r
82 * Auotgen string for C code file.\r
83 */\r
84 public String cAutogenStr;\r
85\r
86 /**\r
8840ad58 87 Constructure function\r
88 \r
89 @param parentToken Member variable.\r
90 @param pcdType Member variable.\r
91 @param moduleName Member variable.\r
92 @param moduleGUID Member variable.\r
93 @param packageName Member variable.\r
94 @param packageGUID Member variable.\r
95 @param moduleType Member variable.\r
96 @param modulePcdType Member variable.\r
97 @param arch Member variable.\r
98 @param version Member variable.\r
99 @param value Member variable.\r
878ddf1f 100 **/\r
8840ad58 101 public UsageInstance (Token parentToken,\r
102 Token.PCD_TYPE pcdType,\r
103 String moduleName,\r
104 UUID moduleGUID,\r
105 String packageName,\r
106 UUID packageGUID,\r
107 MODULE_TYPE moduleType,\r
108 Token.PCD_TYPE modulePcdType,\r
109 String arch,\r
110 String version,\r
111 Object value) {\r
112 this.parentToken = parentToken;\r
113 this.moduleName = moduleName;\r
114 this.moduleGUID = moduleGUID;\r
115 this.packageName = packageName;\r
116 this.packageGUID = packageGUID;\r
117 this.moduleType = moduleType;\r
118 this.modulePcdType = modulePcdType;\r
119 this.arch = arch;\r
120 this.version = version;\r
121 this.datum = value;\r
122 this.modulePcdType = pcdType;\r
878ddf1f 123 }\r
124\r
125 /**\r
8840ad58 126 Get the primary key for usage instance array for every token.\r
127 \r
128 @param moduleName the name of module\r
129 @param moduleGUID the GUID name of module\r
130 @param packageName the name of package who contains this module\r
131 @param packageGUID the GUID name of package\r
132 @param arch the archtecture string\r
133 @param version the version of this module\r
134 \r
135 @return String primary key\r
136 */\r
137 public static String getPrimaryKey(String moduleName, \r
138 UUID moduleGUID, \r
139 String packageName, \r
140 UUID packageGUID,\r
141 String arch,\r
142 String version) {\r
143 //\r
144 // Because currently transition schema not require write moduleGuid, package Name, Packge GUID in\r
145 // <ModuleSA> section, So currently no expect all paramter must be valid.\r
146 return (moduleName + "_" +\r
147 ((moduleGUID != null) ? moduleGUID.toString() : "NullModuleGuid") + "_" +\r
148 ((packageName != null) ? packageName : "NullPackageName") + "_" +\r
149 ((packageGUID != null) ? packageGUID.toString() : "NullPackageGuid") + "_" +\r
150 ((arch != null) ? arch : "NullArch") + "_" +\r
151 ((version != null) ? version : "NullVersion"));\r
152 }\r
153\r
154 /**\r
155 Get primary key string for this usage instance\r
156 \r
157 @return String primary key string\r
878ddf1f 158 **/\r
8840ad58 159 public String getPrimaryKey() {\r
160 return UsageInstance.getPrimaryKey(moduleName, moduleGUID, packageName, packageGUID, arch, version);\r
161 }\r
878ddf1f 162\r
8840ad58 163 /**\r
164 Judget whether current module is PEI driver\r
165 \r
166 @return boolean\r
167 */\r
168 public boolean isPeiPhaseComponent() {\r
169 if ((moduleType == MODULE_TYPE.PEI_CORE) ||\r
170 (moduleType == MODULE_TYPE.PEIM)) {\r
171 return true;\r
172 }\r
173 return false;\r
174 }\r
878ddf1f 175\r
8840ad58 176 /**\r
177 Generate autogen string for header file and C code file.\r
178 \r
179 @throws EntityException Fail to generate.\r
180 \r
181 @param isBuildUsedLibrary whether the autogen is for library.\r
182 */\r
183 public void generateAutoGen(boolean isBuildUsedLibrary) \r
184 throws EntityException {\r
878ddf1f 185\r
8840ad58 186 hAutogenStr = "";\r
187 cAutogenStr = "";\r
878ddf1f 188\r
189 hAutogenStr += String.format("#define _PCD_TOKEN_%s 0x%016x\r\n", \r
8840ad58 190 parentToken.cName, parentToken.tokenNumber);\r
878ddf1f 191 switch(modulePcdType) {\r
192 case FEATURE_FLAG:\r
8840ad58 193 if(isBuildUsedLibrary) {\r
194 hAutogenStr += String.format("extern const BOOLEAN _gPcd_FixedAtBuild_%s;\r\n", \r
195 parentToken.cName);\r
196 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _gPcd_FixedAtBuild_%s\r\n",\r
197 parentToken.GetAutogenDefinedatumTypeString(parentToken.datumType),\r
198 parentToken.cName,\r
199 parentToken.cName);\r
878ddf1f 200 } else {\r
8840ad58 201 hAutogenStr += String.format("#define _PCD_VALUE_%s %s\r\n", \r
202 parentToken.cName, \r
203 datum.toString());\r
204 hAutogenStr += String.format("extern const BOOLEAN _gPcd_FixedAtBuild_%s;\r\n", \r
205 parentToken.cName);\r
206 cAutogenStr += String.format("GLOBAL_REMOVE_IF_UNREFERENCED const BOOLEAN _gPcd_FixedAtBuild_%s = _PCD_VALUE_%s;\r\n",\r
207 parentToken.cName,\r
208 parentToken.cName);\r
209 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _PCD_VALUE_%s\r\n",\r
210 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),\r
211 parentToken.cName,\r
212 parentToken.cName);\r
878ddf1f 213 }\r
214 break;\r
215 case FIXED_AT_BUILD:\r
8840ad58 216 if(isBuildUsedLibrary) {\r
217 hAutogenStr += String.format("extern const %s _gPcd_FixedAtBuild_%s;\r\n",\r
218 Token.getAutogendatumTypeString(parentToken.datumType),\r
219 parentToken.cName);\r
220 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _gPcd_FixedAtBuild_%s\r\n",\r
221 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),\r
222 parentToken.cName,\r
223 parentToken.cName);\r
878ddf1f 224 } else {\r
8840ad58 225 hAutogenStr += String.format("#define _PCD_VALUE_%s %s\r\n", \r
226 parentToken.cName, \r
227 datum.toString());\r
228 hAutogenStr += String.format("extern const %s _gPcd_FixedAtBuild_%s;\r\n",\r
229 Token.getAutogendatumTypeString(parentToken.datumType),\r
230 parentToken.cName);\r
231 cAutogenStr += String.format("GLOBAL_REMOVE_IF_UNREFERENCED const %s _gPcd_FixedAtBuild_%s = _PCD_VALUE_%s;\r\n",\r
232 Token.getAutogendatumTypeString(parentToken.datumType),\r
233 parentToken.cName,\r
234 parentToken.cName);\r
235 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _PCD_VALUE_%s\r\n",\r
236 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),\r
237 parentToken.cName,\r
238 parentToken.cName);\r
878ddf1f 239 }\r
240 break;\r
241 case PATCHABLE_IN_MODULE:\r
8840ad58 242 if(isBuildUsedLibrary) {\r
243 hAutogenStr += String.format("extern %s _gPcd_BinaryPatch_%s;\r\n",\r
244 Token.getAutogendatumTypeString(parentToken.datumType),\r
245 parentToken.cName);\r
246 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _gPcd_BinaryPatch_%s\r\n",\r
247 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),\r
248 parentToken.cName,\r
249 parentToken.cName);\r
878ddf1f 250 } else {\r
8840ad58 251 hAutogenStr += String.format("#define _PCD_VALUE_%s %s\r\n", \r
252 parentToken.cName, \r
253 datum.toString());\r
254 hAutogenStr += String.format("extern %s _gPcd_BinaryPatch_%s;\r\n",\r
255 Token.getAutogendatumTypeString(parentToken.datumType),\r
256 parentToken.cName);\r
257 cAutogenStr += String.format("GLOBAL_REMOVE_IF_UNREFERENCED %s _gPcd_BinaryPatch_%s = _PCD_VALUE_%s;\r\n",\r
258 Token.getAutogendatumTypeString(parentToken.datumType),\r
259 parentToken.cName,\r
260 parentToken.cName);\r
261 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _gPcd_BinaryPatch_%s\r\n",\r
262 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),\r
263 parentToken.cName,\r
264 parentToken.cName);\r
878ddf1f 265 }\r
266\r
267 break;\r
268 case DYNAMIC:\r
878ddf1f 269 switch(parentToken.pcdType) {\r
270 case FEATURE_FLAG:\r
8840ad58 271 if(isBuildUsedLibrary) {\r
272 hAutogenStr += String.format("extern const BOOLEAN _gPcd_FixedAtBuild_%s;\r\n", \r
273 parentToken.cName);\r
274 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _gPcd_FixedAtBuild_%s\r\n",\r
275 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),\r
276 parentToken.cName,\r
277 parentToken.cName);\r
878ddf1f 278 } else {\r
8840ad58 279 hAutogenStr += String.format("#define _PCD_VALUE_%s %s\r\n", \r
280 parentToken.cName, \r
281 datum.toString());\r
282 hAutogenStr += String.format("extern const BOOLEAN _gPcd_FixedAtBuild_%s;\r\n", \r
283 parentToken.cName);\r
284 cAutogenStr += String.format("const BOOLEAN _gPcd_FixedAtBuild_%s = _PCD_VALUE_%s;\r\n",\r
285 parentToken.cName,\r
286 parentToken.cName);\r
287 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _PCD_VALUE_%s\r\n",\r
288 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),\r
289 parentToken.cName,\r
290 parentToken.cName);\r
878ddf1f 291 }\r
292 break;\r
293 case FIXED_AT_BUILD:\r
8840ad58 294 if(isBuildUsedLibrary) {\r
295 hAutogenStr += String.format("extern const %s _gPcd_FixedAtBuild_%s;\r\n",\r
296 Token.getAutogendatumTypeString(parentToken.datumType),\r
297 parentToken.cName);\r
298 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _gPcd_FixedAtBuild_%s\r\n",\r
299 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),\r
300 parentToken.cName,\r
301 parentToken.cName);\r
878ddf1f 302\r
303 } else {\r
8840ad58 304 hAutogenStr += String.format("#define _PCD_VALUE_%s %s\r\n", \r
305 parentToken.cName, \r
306 datum.toString());\r
307 hAutogenStr += String.format("extern const %s _gPcd_FixedAtBuild_%s\r\n",\r
308 Token.getAutogendatumTypeString(parentToken.datumType),\r
309 parentToken.cName);\r
310 cAutogenStr += String.format("const %s _gPcd_FixedAtBuild_%s = _PCD_VALUE_%s;\r\n",\r
311 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),\r
312 parentToken.cName,\r
313 parentToken.cName);\r
314 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _PCD_VALUE_%s\r\n",\r
315 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),\r
316 parentToken.cName,\r
317 parentToken.cName);\r
878ddf1f 318 }\r
319 break;\r
320 case PATCHABLE_IN_MODULE:\r
8840ad58 321 hAutogenStr += String.format("#define _PCD_VALUE_%s %s\r\n", \r
322 parentToken.cName, \r
323 datum.toString());\r
324 hAutogenStr += String.format("extern %s _gPcd_BinaryPatch_%s;\r\n",\r
325 Token.getAutogendatumTypeString(parentToken.datumType),\r
326 parentToken.cName,\r
327 parentToken.cName);\r
328 cAutogenStr += String.format("%s _gPcd_BinaryPatch_%s = _PCD_VALUE_%s;",\r
329 Token.getAutogendatumTypeString(parentToken.datumType),\r
330 parentToken.cName,\r
331 parentToken.cName);\r
332 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _gPcd_BinaryPatch_%s\r\n",\r
333 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),\r
334 parentToken.cName,\r
335 parentToken.cName);\r
878ddf1f 336 break;\r
8840ad58 337 case DYNAMIC:\r
338 hAutogenStr += String.format("#define _PCD_MODE_%s_%s LibPcdGet%s(_PCD_TOKEN_%s)\r\n",\r
339 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),\r
340 parentToken.cName,\r
341 Token.getAutogenLibrarydatumTypeString(parentToken.datumType),\r
342 parentToken.cName);\r
878ddf1f 343 break;\r
8840ad58 344 default:\r
345 throw new EntityException ("The PCD type is unknown");\r
878ddf1f 346 }\r
347 break;\r
348 case DYNAMIC_EX:\r
349 break;\r
350 }\r
351 }\r
352\r
353 /**\r
354 Get the autogen string for header file.\r
355 \r
356 @return The string of header file.\r
357 **/\r
358 public String getHAutogenStr() {\r
359 return hAutogenStr;\r
360 }\r
361\r
362 /**\r
363 Get the autogen string for C code file.\r
364 \r
365 @return The string of C Code file.\r
366 **/\r
367 public String getCAutogenStr() {\r
368 return cAutogenStr;\r
369 }\r
370}\r
371\r