import org.tianocore.build.id.PackageIdentification;\r
import org.tianocore.build.pcd.action.PCDAutoGenAction;\r
import org.tianocore.common.definitions.ToolDefinitions;\r
+import org.tianocore.common.definitions.EdkDefinitions;\r
import org.tianocore.common.exception.EdkException;\r
import org.tianocore.common.logger.EdkLog;\r
\r
\r
///\r
/// For non library module, add its library instance's construct and destructor to\r
- /// list.\r
+ /// list. String[0] recode LibConstructor name, String[1] recode Lib instance \r
+ /// module type.\r
///\r
- private List<String> libConstructList = new ArrayList<String>();\r
- private List<String> libDestructList = new ArrayList<String>();\r
+ private List<String[]> libConstructList = new ArrayList<String[]>();\r
+ private List<String[]> libDestructList = new ArrayList<String[]>();\r
\r
///\r
/// List to store SetVirtalAddressMapCallBack, ExitBootServiceCallBack\r
String buffer for AutoGen.c\r
@throws Exception\r
**/\r
- void LibConstructorToAutogenC(List<String> libInstanceList,\r
+ void LibConstructorToAutogenC(List<String[]> libInstanceList,\r
String moduleType, StringBuffer fileBuffer) throws EdkException {\r
boolean isFirst = true;\r
\r
// module type.\r
//\r
for (int i = 0; i < libInstanceList.size(); i++) {\r
- switch (CommonDefinition.getModuleType(moduleType)) {\r
- case CommonDefinition.ModuleTypeBase:\r
- fileBuffer.append("RETURN_STATUS\r\n");\r
+ if (libInstanceList.get(i)[1].equalsIgnoreCase(EdkDefinitions.MODULE_TYPE_BASE)) {\r
+ fileBuffer.append("RETURN_STATUS\r\n");\r
fileBuffer.append("EFIAPI\r\n");\r
- fileBuffer.append(libInstanceList.get(i));\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
fileBuffer.append(" (\r\n");\r
fileBuffer.append(" VOID\r\n");\r
fileBuffer.append(" );\r\n");\r
- break;\r
-\r
- case CommonDefinition.ModuleTypePeiCore:\r
- case CommonDefinition.ModuleTypePeim:\r
- fileBuffer.append("EFI_STATUS\r\n");\r
- fileBuffer.append("EFIAPI\r\n");\r
- fileBuffer.append(libInstanceList.get(i));\r
- fileBuffer.append(" (\r\n");\r
- fileBuffer\r
- .append(" IN EFI_FFS_FILE_HEADER *FfsHeader,\r\n");\r
- fileBuffer\r
- .append(" IN EFI_PEI_SERVICES **PeiServices\r\n");\r
- fileBuffer.append(" );\r\n");\r
- break;\r
+ } else {\r
+ switch (CommonDefinition.getModuleType(moduleType)) {\r
+ case CommonDefinition.ModuleTypeBase:\r
+ fileBuffer.append("RETURN_STATUS\r\n");\r
+ fileBuffer.append("EFIAPI\r\n");\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
+ fileBuffer.append(" (\r\n");\r
+ fileBuffer.append(" VOID\r\n");\r
+ fileBuffer.append(" );\r\n");\r
+ break;\r
\r
- case CommonDefinition.ModuleTypeDxeCore:\r
- case CommonDefinition.ModuleTypeDxeDriver:\r
- case CommonDefinition.ModuleTypeDxeRuntimeDriver:\r
- case CommonDefinition.ModuleTypeDxeSmmDriver:\r
- case CommonDefinition.ModuleTypeDxeSalDriver:\r
- case CommonDefinition.ModuleTypeUefiDriver:\r
- case CommonDefinition.ModuleTypeUefiApplication:\r
- fileBuffer.append("EFI_STATUS\r\n");\r
- fileBuffer.append("EFIAPI\r\n");\r
- fileBuffer.append(libInstanceList.get(i));\r
- fileBuffer.append(" (\r\n");\r
- fileBuffer.append(" IN EFI_HANDLE ImageHandle,\r\n");\r
- fileBuffer.append(" IN EFI_SYSTEM_TABLE *SystemTable\r\n");\r
- fileBuffer.append(" );\r\n");\r
- break;\r
+ case CommonDefinition.ModuleTypePeiCore:\r
+ case CommonDefinition.ModuleTypePeim:\r
+ fileBuffer.append("EFI_STATUS\r\n");\r
+ fileBuffer.append("EFIAPI\r\n");\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
+ fileBuffer.append(" (\r\n");\r
+ fileBuffer\r
+ .append(" IN EFI_FFS_FILE_HEADER *FfsHeader,\r\n");\r
+ fileBuffer\r
+ .append(" IN EFI_PEI_SERVICES **PeiServices\r\n");\r
+ fileBuffer.append(" );\r\n");\r
+ break;\r
+ \r
+ case CommonDefinition.ModuleTypeDxeCore:\r
+ case CommonDefinition.ModuleTypeDxeDriver:\r
+ case CommonDefinition.ModuleTypeDxeRuntimeDriver:\r
+ case CommonDefinition.ModuleTypeDxeSmmDriver:\r
+ case CommonDefinition.ModuleTypeDxeSalDriver:\r
+ case CommonDefinition.ModuleTypeUefiDriver:\r
+ case CommonDefinition.ModuleTypeUefiApplication:\r
+ fileBuffer.append("EFI_STATUS\r\n");\r
+ fileBuffer.append("EFIAPI\r\n");\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
+ fileBuffer.append(" (\r\n");\r
+ fileBuffer.append(" IN EFI_HANDLE ImageHandle,\r\n");\r
+ fileBuffer.append(" IN EFI_SYSTEM_TABLE *SystemTable\r\n");\r
+ fileBuffer.append(" );\r\n");\r
+ break;\r
+\r
+ }\r
}\r
}\r
\r
fileBuffer.append("\r\n");\r
isFirst = false;\r
}\r
- switch (CommonDefinition.getModuleType(moduleType)) {\r
- case CommonDefinition.ModuleTypeBase:\r
+ if (libInstanceList.get(i)[1].equalsIgnoreCase(EdkDefinitions.MODULE_TYPE_BASE)) {\r
fileBuffer.append(" Status = ");\r
- fileBuffer.append(libInstanceList.get(i));\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
fileBuffer.append("();\r\n");\r
fileBuffer.append(" VOID\r\n");\r
- break;\r
- case CommonDefinition.ModuleTypePeiCore:\r
- case CommonDefinition.ModuleTypePeim:\r
- fileBuffer.append(" Status = ");\r
- fileBuffer.append(libInstanceList.get(i));\r
- fileBuffer.append(" (FfsHeader, PeiServices);\r\n");\r
- break;\r
- case CommonDefinition.ModuleTypeDxeCore:\r
- case CommonDefinition.ModuleTypeDxeDriver:\r
- case CommonDefinition.ModuleTypeDxeRuntimeDriver:\r
- case CommonDefinition.ModuleTypeDxeSmmDriver:\r
- case CommonDefinition.ModuleTypeDxeSalDriver:\r
- case CommonDefinition.ModuleTypeUefiDriver:\r
- case CommonDefinition.ModuleTypeUefiApplication:\r
- fileBuffer.append(" Status = ");\r
- fileBuffer.append(libInstanceList.get(i));\r
- fileBuffer.append(" (ImageHandle, SystemTable);\r\n");\r
- break;\r
- default:\r
- EdkLog.log(EdkLog.EDK_INFO,"Autogen doesn't know how to deal with module type - " + moduleType + "!");\r
+ } else {\r
+ switch (CommonDefinition.getModuleType(moduleType)) {\r
+ case CommonDefinition.ModuleTypeBase:\r
+ fileBuffer.append(" Status = ");\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
+ fileBuffer.append("();\r\n");\r
+ fileBuffer.append(" VOID\r\n");\r
+ break;\r
+ case CommonDefinition.ModuleTypePeiCore:\r
+ case CommonDefinition.ModuleTypePeim:\r
+ fileBuffer.append(" Status = ");\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
+ fileBuffer.append(" (FfsHeader, PeiServices);\r\n");\r
+ break;\r
+ case CommonDefinition.ModuleTypeDxeCore:\r
+ case CommonDefinition.ModuleTypeDxeDriver:\r
+ case CommonDefinition.ModuleTypeDxeRuntimeDriver:\r
+ case CommonDefinition.ModuleTypeDxeSmmDriver:\r
+ case CommonDefinition.ModuleTypeDxeSalDriver:\r
+ case CommonDefinition.ModuleTypeUefiDriver:\r
+ case CommonDefinition.ModuleTypeUefiApplication:\r
+ fileBuffer.append(" Status = ");\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
+ fileBuffer.append(" (ImageHandle, SystemTable);\r\n");\r
+ break;\r
+ default:\r
+ EdkLog.log(EdkLog.EDK_INFO,"Autogen doesn't know how to deal with module type - " + moduleType + "!");\r
+ }\r
+ \r
}\r
fileBuffer.append(" ASSERT_EFI_ERROR (Status);\r\n");\r
}\r
String buffer for AutoGen.c\r
@throws Exception\r
**/\r
- void LibDestructorToAutogenC(List<String> libInstanceList,\r
+ void LibDestructorToAutogenC(List<String[]> libInstanceList,\r
String moduleType, StringBuffer fileBuffer) throws EdkException {\r
boolean isFirst = true;\r
for (int i = 0; i < libInstanceList.size(); i++) {\r
- switch (CommonDefinition.getModuleType(moduleType)) {\r
- case CommonDefinition.ModuleTypeBase:\r
+ if (libInstanceList.get(i)[1].equalsIgnoreCase(EdkDefinitions.MODULE_TYPE_BASE)) {\r
fileBuffer.append("RETURN_STATUS\r\n");\r
fileBuffer.append("EFIAPI\r\n");\r
- fileBuffer.append(libInstanceList.get(i));\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
fileBuffer.append(" (\r\n");\r
fileBuffer.append(" VOID\r\n");\r
fileBuffer.append(" );\r\n");\r
- break;\r
- case CommonDefinition.ModuleTypePeiCore:\r
- case CommonDefinition.ModuleTypePeim:\r
- fileBuffer.append("EFI_STATUS\r\n");\r
- fileBuffer.append("EFIAPI\r\n");\r
- fileBuffer.append(libInstanceList.get(i));\r
- fileBuffer.append(" (\r\n");\r
- fileBuffer\r
- .append(" IN EFI_FFS_FILE_HEADER *FfsHeader,\r\n");\r
- fileBuffer\r
- .append(" IN EFI_PEI_SERVICES **PeiServices\r\n");\r
- fileBuffer.append(" );\r\n");\r
- break;\r
- case CommonDefinition.ModuleTypeDxeCore:\r
- case CommonDefinition.ModuleTypeDxeDriver:\r
- case CommonDefinition.ModuleTypeDxeRuntimeDriver:\r
- case CommonDefinition.ModuleTypeDxeSmmDriver:\r
- case CommonDefinition.ModuleTypeDxeSalDriver:\r
- case CommonDefinition.ModuleTypeUefiDriver:\r
- case CommonDefinition.ModuleTypeUefiApplication:\r
- fileBuffer.append("EFI_STATUS\r\n");\r
- fileBuffer.append("EFIAPI\r\n");\r
- fileBuffer.append(libInstanceList.get(i));\r
- fileBuffer.append(" (\r\n");\r
- fileBuffer.append(" IN EFI_HANDLE ImageHandle,\r\n");\r
- fileBuffer.append(" IN EFI_SYSTEM_TABLE *SystemTable\r\n");\r
- fileBuffer.append(" );\r\n");\r
- break;\r
+ } else {\r
+ switch (CommonDefinition.getModuleType(moduleType)) {\r
+ case CommonDefinition.ModuleTypeBase:\r
+ fileBuffer.append("RETURN_STATUS\r\n");\r
+ fileBuffer.append("EFIAPI\r\n");\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
+ fileBuffer.append(" (\r\n");\r
+ fileBuffer.append(" VOID\r\n");\r
+ fileBuffer.append(" );\r\n");\r
+ break;\r
+ case CommonDefinition.ModuleTypePeiCore:\r
+ case CommonDefinition.ModuleTypePeim:\r
+ fileBuffer.append("EFI_STATUS\r\n");\r
+ fileBuffer.append("EFIAPI\r\n");\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
+ fileBuffer.append(" (\r\n");\r
+ fileBuffer\r
+ .append(" IN EFI_FFS_FILE_HEADER *FfsHeader,\r\n");\r
+ fileBuffer\r
+ .append(" IN EFI_PEI_SERVICES **PeiServices\r\n");\r
+ fileBuffer.append(" );\r\n");\r
+ break;\r
+ case CommonDefinition.ModuleTypeDxeCore:\r
+ case CommonDefinition.ModuleTypeDxeDriver:\r
+ case CommonDefinition.ModuleTypeDxeRuntimeDriver:\r
+ case CommonDefinition.ModuleTypeDxeSmmDriver:\r
+ case CommonDefinition.ModuleTypeDxeSalDriver:\r
+ case CommonDefinition.ModuleTypeUefiDriver:\r
+ case CommonDefinition.ModuleTypeUefiApplication:\r
+ fileBuffer.append("EFI_STATUS\r\n");\r
+ fileBuffer.append("EFIAPI\r\n");\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
+ fileBuffer.append(" (\r\n");\r
+ fileBuffer.append(" IN EFI_HANDLE ImageHandle,\r\n");\r
+ fileBuffer.append(" IN EFI_SYSTEM_TABLE *SystemTable\r\n");\r
+ fileBuffer.append(" );\r\n");\r
+ break;\r
+ }\r
}\r
}\r
\r
fileBuffer.append("\r\n");\r
isFirst = false;\r
}\r
+ if (libInstanceList.get(i)[1].equalsIgnoreCase(EdkDefinitions.MODULE_TYPE_BASE)) {\r
+ fileBuffer.append(" Status = ");\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
+ fileBuffer.append("();\r\n");\r
+ fileBuffer.append(" VOID\r\n");\r
+ }\r
fileBuffer.append(" Status = ");\r
- fileBuffer.append(libInstanceList.get(i));\r
+ fileBuffer.append(libInstanceList.get(i)[0]);\r
fileBuffer.append("(ImageHandle, SystemTable);\r\n");\r
fileBuffer.append(" ASSERT_EFI_ERROR (Status);\r\n");\r
}\r
\r
String libConstructName = null;\r
String libDestructName = null;\r
+ String libModuleType = null;\r
String[] setVirtuals = null;\r
String[] exitBoots = null;\r
\r
//\r
libConstructName = saq.getLibConstructorName();\r
libDestructName = saq.getLibDestructorName();\r
+ libModuleType = saq.getModuleType();\r
\r
//\r
// Collect SetVirtualAddressMapCallBack and\r
// Add dependent library instance constructor function.\r
//\r
if (libConstructName != null) {\r
- this.libConstructList.add(libConstructName);\r
+ this.libConstructList.add(new String[] {libConstructName, libModuleType});\r
}\r
//\r
// Add dependent library instance destructor fuction.\r
//\r
if (libDestructName != null) {\r
- this.libDestructList.add(libDestructName);\r
+ this.libDestructList.add(new String[] {libDestructName, libModuleType});\r
}\r
}\r
}\r