- cAutoGenString += String.format(" %d,\r\n", token.maxSkuCount);\r
-\r
- cAutoGenString += String.format(" %d,\r\n", token.skuId);\r
-\r
- if(token.variableGuid == null) {\r
- cAutoGenString += " { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },\r\n";\r
- } else {\r
- guidStrArray =(token.variableGuid.toString()).split("-");\r
-\r
- cAutoGenString += String.format(" { 0x%s, 0x%s, 0x%s, { 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s } },\r\n",\r
- guidStrArray[0],\r
- guidStrArray[1],\r
- guidStrArray[2],\r
- (guidStrArray[3].substring(0, 2)),\r
- (guidStrArray[3].substring(2, 4)),\r
- (guidStrArray[4].substring(0, 2)),\r
- (guidStrArray[4].substring(2, 4)),\r
- (guidStrArray[4].substring(4, 6)),\r
- (guidStrArray[4].substring(6, 8)),\r
- (guidStrArray[4].substring(8, 10)),\r
- (guidStrArray[4].substring(10, 12))\r
- );\r
-\r
- }\r
-\r
- value = token.datum.toString();\r
- if(token.datumType == Token.DATUM_TYPE.POINTER) {\r
- if((value.charAt(0) == 'L' && value.charAt(1) == '"') || value.charAt(0) == '"') {\r
- cAutoGenString += String.format(" sizeof(_PCD_VALUE_%s),\r\n", token.cName);\r
- cAutoGenString += String.format(" 0, %s, %s,\r\n", token.variableName, value);\r
- } else {\r
- cAutoGenString += String.format(" sizeof(_mPcdArray%08x),\r\n", index);\r
- cAutoGenString += String.format(" 0, &_mPcdArray%08x, %s,\r\n", index, token.variableName);\r
- }\r
- } else {\r
- switch(token.datumType) {\r
- case UINT8:\r
- cAutoGenString += " 1,\r\n";\r
- break;\r
- case UINT16:\r
- cAutoGenString += " 2,\r\n";\r
- break;\r
- case UINT32:\r
- cAutoGenString += " 4,\r\n";\r
- break;\r
- case UINT64:\r
- cAutoGenString += " 8,\r\n";\r
- break;\r
- case BOOLEAN:\r
- cAutoGenString += " 1,\r\n";\r
- break;\r
- default:\r
- throw new BuildActionException("Unknown datum size");\r
+ if (usageInstanceArray.get(index).modulePcdType == Token.PCD_TYPE.DYNAMIC_EX) {\r
+ guidStringArray = usageInstance.parentToken.tokenSpaceName.split("-");\r
+ guidStringCName = "_gPcd_TokenSpaceGuid_" +\r
+ usageInstance.parentToken.tokenSpaceName.replaceAll("-", "_");\r
+ guidString = String.format("{ 0x%s, 0x%s, 0x%s, {0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s}}",\r
+ guidStringArray[0],\r
+ guidStringArray[1],\r
+ guidStringArray[2],\r
+ (guidStringArray[3].substring(0, 2)),\r
+ (guidStringArray[3].substring(2, 4)),\r
+ (guidStringArray[4].substring(0, 2)),\r
+ (guidStringArray[4].substring(2, 4)),\r
+ (guidStringArray[4].substring(4, 6)),\r
+ (guidStringArray[4].substring(6, 8)),\r
+ (guidStringArray[4].substring(8, 10)),\r
+ (guidStringArray[4].substring(10, 12)));\r
+\r
+ Pattern pattern = Pattern.compile("(" + guidStringCName + ")+?");\r
+ Matcher matcher = pattern.matcher(cAutoGenString + " ");\r
+ //\r
+ // Find whether this guid array variable has been generated into autogen.c\r
+ // For different DyanmicEx pcd token who use same token space guid, the token space\r
+ // guid array should be only generated once.\r
+ //\r
+ if (!matcher.find()) {\r
+ hAutoGenString += String.format("extern EFI_GUID %s;\r\n", guidStringCName);\r
+ if (!isBuildUsedLibrary) {\r
+ cAutoGenString += String.format("GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID %s = %s;\r\n",\r
+ guidStringCName,\r
+ guidString);\r
+ }\r