]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/autogen/AutoGen.java
Fixed grammar in messages.
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / autogen / AutoGen.java
index d8249dd86cd9f244357eb4077ffca39fc472b84d..0704bf44119b1bec734773634e8d9b1f923f1037 100644 (file)
@@ -98,6 +98,21 @@ public class AutoGen {
     // area and it's dependence on library instance surface are.\r
     //\r
     private List<PackageIdentification> mDepPkgList = new LinkedList<PackageIdentification>();\r
+\r
+       //\r
+       //  For non library module, add its library instance's construct and destructor to \r
+       //  list.\r
+       //  \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
+       // \r
+       private List<String> setVirtalAddList = new ArrayList<String>();\r
+       private List<String> exitBootServiceList = new ArrayList<String>();\r
+\r
+       \r
        /**\r
         * Construct function\r
         * \r
@@ -204,6 +219,7 @@ public class AutoGen {
        void moduleGenAutogen() throws BuildException {\r
 \r
                try {\r
+                       collectLibInstanceInfo();\r
                        moduleGenAutogenC();\r
                        moduleGenAutogenH();\r
                } catch (Exception e) {\r
@@ -227,7 +243,7 @@ public class AutoGen {
                        libGenAutogenH();\r
                } catch (Exception e) {\r
                        throw new BuildException(\r
-                                       "Faile to create library AutoGen.c & AutoGen.h!\n"\r
+                                       "Failed to create library AutoGen.c & AutoGen.h!\n"\r
                                                        + e.getMessage());\r
                }\r
        }\r
@@ -656,7 +672,7 @@ public class AutoGen {
                                        libClassList[i]);\r
                        if (includerName == null) {\r
                                throw new AutoGenException("Can not find library class ["\r
-                                               + libClassList[i] + "] declaration in every packages. ");\r
+                                               + libClassList[i] + "] declaration in any SPD package. ");\r
                        }\r
                        for (int j = 0; j < includerName.length; j++) {\r
                                String includeNameStr = includerName[j];\r
@@ -698,7 +714,7 @@ public class AutoGen {
                        if (pkgHeader == null) {\r
                                throw new AutoGenException("Can not find package ["\r
                                                + packageNameList[i]\r
-                                               + "] declaration in every packages. ");\r
+                                               + "] declaration in any SPD package. ");\r
                        } else if (!pkgHeader.equalsIgnoreCase("")) {\r
                                includeStr = CommonDefinition.include + " <" + pkgHeader\r
                                                + ">\r\n";\r
@@ -735,7 +751,7 @@ public class AutoGen {
                case CommonDefinition.ModuleTypePeiCore:\r
                        if (entryPointList == null ||entryPointList.length != 1 ) {\r
                                throw new BuildException(\r
-                                               "Module type = 'PEI_CORE', only have one module entry point!");\r
+                                               "Module type = 'PEI_CORE', can have only one module entry point!");\r
                        } else {\r
                                fileBuffer.append("EFI_STATUS\r\n");\r
                                fileBuffer.append("EFIAPI\r\n");\r
@@ -767,7 +783,7 @@ public class AutoGen {
                        fileBuffer.append("const UINT32 _gUefiDriverRevision = 0;\r\n");\r
                        if (entryPointList == null || entryPointList.length != 1) {\r
                                throw new BuildException(\r
-                                               "Module type = 'DXE_CORE', only have one module entry point!");\r
+                                               "Module type = 'DXE_CORE', can have only one module entry point!");\r
                        } else {\r
 \r
                                fileBuffer.append("VOID\r\n");\r
@@ -1074,10 +1090,10 @@ public class AutoGen {
                 }\r
                 fileBuffer.append("}\r\n\r\n");\r
 \r
-                fileBuffer.append("VOID\n");\r
-                fileBuffer.append("EFIAPI\n");\r
+                fileBuffer.append("VOID\r\n");\r
+                fileBuffer.append("EFIAPI\r\n");\r
                 fileBuffer.append("ExitDriver (\r\n");\r
-                fileBuffer.append("  IN EFI_STATUS  Status\n");\r
+                fileBuffer.append("  IN EFI_STATUS  Status\r\n");\r
                 fileBuffer.append("  )\r\n\r\n");\r
                 fileBuffer.append("{\r\n");\r
                 if (entryPointCount <= 1) {\r
@@ -1215,7 +1231,7 @@ public class AutoGen {
                                // If can't find Ppi GUID declaration in every package\r
                                //\r
                                throw new AutoGenException("Can not find Ppi GUID ["\r
-                                               + ppiKeyWord + "] declaration in every packages. ");\r
+                                               + ppiKeyWord + "] declaration in any SPD package!");\r
                        }\r
                }\r
        }\r
@@ -1272,7 +1288,7 @@ public class AutoGen {
                                // If can't find protocol GUID declaration in every package\r
                                //\r
                                throw new BuildException("Can not find protocol Guid ["\r
-                                               + protocolKeyWord + "] declaration in every packages. ");\r
+                                               + protocolKeyWord + "] declaration in any SPD package!");\r
                        }\r
                }\r
        }\r
@@ -1315,7 +1331,7 @@ public class AutoGen {
                                // If can't find GUID declaration in every package\r
                                //\r
                                throw new AutoGenException("Can not find Guid [" + guidKeyWord\r
-                                               + "] declaration in every packages. ");\r
+                                               + "] declaration in any SPD package. ");\r
                        }\r
 \r
                }\r
@@ -1333,128 +1349,17 @@ public class AutoGen {
         * @throws BuildException\r
         */\r
        void LibInstanceToAutogenC(StringBuffer fileBuffer) throws BuildException {\r
-               int index;\r
-\r
-               String moduleType = SurfaceAreaQuery.getModuleType();\r
-               List<String> libConstructList = new ArrayList<String>();\r
-               List<String> libDestructList = new ArrayList<String>();\r
-\r
-               String libConstructName = null;\r
-               String libDestructName = null;\r
-               ModuleIdentification[] libraryIdList = SurfaceAreaQuery\r
-                               .getLibraryInstance(this.arch);\r
-\r
                try {\r
-                       if (libraryIdList != null) {\r
-                               //\r
-                               // Reorder library instance sequence.\r
-                               //\r
-                               AutogenLibOrder libOrder = new AutogenLibOrder(libraryIdList,\r
-                                               this.arch);\r
-                               List<ModuleIdentification> orderList = libOrder\r
-                                               .orderLibInstance();\r
-\r
-                               if (orderList != null) {\r
-                                       //\r
-                                       // Process library instance one by one.\r
-                                       //\r
-                                       for (int i = 0; i < orderList.size(); i++) {\r
-\r
-                                               //\r
-                                               // Get library instance basename.\r
-                                               //\r
-                                               ModuleIdentification libInstanceId = orderList.get(i);\r
-\r
-                                               //\r
-                                               // Get override map\r
-                                               //\r
-                                                \r
-                                               Map<String, XmlObject> libDoc = GlobalData.getDoc(\r
-                                                               libInstanceId, this.arch);\r
-                                               SurfaceAreaQuery.push(libDoc);\r
-\r
-                                               //\r
-                                               // Get <PPis>, <Protocols>, <Guids> list of this library\r
-                                               // instance.\r
-                                               //\r
-                                               String[] ppiList = SurfaceAreaQuery.getPpiArray(this.arch);\r
-                                               String[] ppiNotifyList = SurfaceAreaQuery\r
-                                                               .getPpiNotifyArray(this.arch);\r
-                                               String[] protocolList = SurfaceAreaQuery\r
-                                                               .getProtocolArray(this.arch);\r
-                                               String[] protocolNotifyList = SurfaceAreaQuery\r
-                                                               .getProtocolNotifyArray(this.arch);\r
-                                               String[] guidList = SurfaceAreaQuery\r
-                                                               .getGuidEntryArray(this.arch);\r
-                        PackageIdentification[] pkgList = SurfaceAreaQuery.getDependencePkg(this.arch);\r
-\r
-                                               //\r
-                                               // Add those ppi, protocol, guid in global ppi,\r
-                                               // protocol, guid\r
-                                               // list.\r
-                                               //\r
-                                               for (index = 0; index < ppiList.length; index++) {\r
-                                                       this.mPpiList.add(ppiList[index]);\r
-                                               }\r
-\r
-                                               for (index = 0; index < ppiNotifyList.length; index++) {\r
-                                                       this.mPpiList.add(ppiNotifyList[index]);\r
-                                               }\r
-\r
-                                               for (index = 0; index < protocolList.length; index++) {\r
-                                                       this.mProtocolList.add(protocolList[index]);\r
-                                               }\r
-\r
-                                               for (index = 0; index < protocolNotifyList.length; index++) {\r
-                                                       this.mProtocolList.add(protocolNotifyList[index]);\r
-                                               }\r
-\r
-                                               for (index = 0; index < guidList.length; index++) {\r
-                                                       this.mGuidList.add(guidList[index]);\r
-                                               }\r
-                        for (index = 0; index < pkgList.length; index++){\r
-                            if (!this.mDepPkgList.contains(pkgList[index])){\r
-                                this.mDepPkgList.add(pkgList[index]);\r
-                            }\r
-                        }\r
-\r
-                                               //\r
-                                               // If not yet parse this library instance's constructor\r
-                                               // element,parse it.\r
-                                               //\r
-                                               libConstructName = SurfaceAreaQuery\r
-                                                               .getLibConstructorName();\r
-                                               libDestructName = SurfaceAreaQuery\r
-                                                               .getLibDestructorName();\r
-\r
-                                               SurfaceAreaQuery.pop();\r
-                                               //\r
-                                               // Add dependent library instance constructor function.\r
-                                               //\r
-                                               if (libConstructName != null) {\r
-                                                       libConstructList.add(libConstructName);\r
-                                               }\r
-                                               //\r
-                                               // Add dependent library instance destructor fuction.\r
-                                               //\r
-                                               if (libDestructName != null) {\r
-                                                       libDestructList.add(libDestructName);\r
-                                               }\r
-                                       }\r
-\r
-                               }\r
-\r
-                               //\r
-                               // Add library constructor to AutoGen.c\r
-                               //\r
-                               LibConstructorToAutogenC(libConstructList, moduleType,\r
-                                               fileBuffer/* autogenC */);\r
-                               //\r
-                               // Add library destructor to AutoGen.c\r
-                               //\r
-                               LibDestructorToAutogenC(libDestructList, moduleType, fileBuffer/* autogenC */);\r
-                       }\r
-\r
+            String moduleType = this.moduleId.getModuleType();\r
+                   //\r
+                       // Add library constructor to AutoGen.c\r
+                       //\r
+                       LibConstructorToAutogenC(libConstructList, moduleType,\r
+                               fileBuffer/* autogenC */);\r
+                       //\r
+                       // Add library destructor to AutoGen.c\r
+                       //\r
+                       LibDestructorToAutogenC(libDestructList, moduleType, fileBuffer/* autogenC */);\r
                } catch (Exception e) {\r
                        throw new BuildException(e.getMessage());\r
                }\r
@@ -1594,7 +1499,7 @@ public class AutoGen {
                                fileBuffer.append(" (ImageHandle, SystemTable);\r\n");\r
                                break;\r
             default:\r
-                EdkLog.log(EdkLog.EDK_INFO,"Autogen don't know how to deal with module type -"+ moduleType + " !");\r
+                EdkLog.log(EdkLog.EDK_INFO,"Autogen doesn't know how to deal with module type - " + moduleType + "!");\r
                        }\r
                        fileBuffer.append("  ASSERT_EFI_ERROR (Status);\r\n");\r
                }\r
@@ -1867,15 +1772,31 @@ public class AutoGen {
         */\r
        void ExternCallBackToAutoGenC(StringBuffer fileBuffer)\r
                        throws BuildException {\r
-               String[] setVirtualList = SurfaceAreaQuery\r
-                               .getSetVirtualAddressMapCallBackArray();\r
-               String[] exitBootList = SurfaceAreaQuery\r
-                               .getExitBootServicesCallBackArray();\r
-               String moduleType = SurfaceAreaQuery.getModuleType();\r
+               //\r
+               // Collect module's <SetVirtualAddressMapCallBack> and \r
+               // <ExitBootServiceCallBack> and add to setVirtualAddList \r
+               //  exitBootServiceList.\r
+               // \r
+        String[] setVirtuals = SurfaceAreaQuery.getSetVirtualAddressMapCallBackArray();\r
+        String[] exitBoots = SurfaceAreaQuery.getExitBootServicesCallBackArray();\r
+        if (setVirtuals != null) {\r
+            for (int j = 0; j < setVirtuals.length; j++) {\r
+                           this.setVirtalAddList.add(setVirtuals[j]);\r
+                       }\r
+               }\r
+               if (exitBoots != null) {\r
+                   for (int k = 0; k < exitBoots.length; k++) {\r
+                           this.exitBootServiceList.add(exitBoots[k]);\r
+                       }\r
+               }\r
+               //\r
+               //  Add c code in autogen.c which relate to <SetVirtualAddressMapCallBack>\r
+               //  and <ExitBootServicesCallBack> \r
+               // \r
+               String moduleType = this.moduleId.getModuleType();\r
                boolean UefiOrDxeModule = false;\r
                int Count = 0;\r
                int i;\r
-\r
                switch (CommonDefinition.getModuleType(moduleType)) {\r
                case CommonDefinition.ModuleTypeDxeDriver:\r
                case CommonDefinition.ModuleTypeDxeRuntimeDriver:\r
@@ -1895,9 +1816,9 @@ public class AutoGen {
                        // set count to the number of valid entries\r
                        //\r
                        Count = 0;\r
-                       if (setVirtualList != null) {\r
-                               for (i = 0; i < setVirtualList.length; i++) {\r
-                                       if (setVirtualList[i].equalsIgnoreCase("")) {\r
+                       if (this.setVirtalAddList != null) {\r
+                               for (i = 0; i < this.setVirtalAddList.size(); i++) {\r
+                                       if (this.setVirtalAddList.get(i).equalsIgnoreCase("")) {\r
                                                break;\r
                                        }\r
                                }\r
@@ -1911,7 +1832,7 @@ public class AutoGen {
                        break;\r
                }\r
 \r
-               if (setVirtualList == null) {\r
+               if (this.setVirtalAddList == null || this.setVirtalAddList.size() == 0) {\r
                        if (UefiOrDxeModule) {\r
                                //\r
                                // No data so make a NULL list\r
@@ -1925,13 +1846,13 @@ public class AutoGen {
                        //\r
                        // Write SetVirtualAddressMap function definition.\r
                        //\r
-                       for (i = 0; i < setVirtualList.length; i++) {\r
-                               if (setVirtualList[i].equalsIgnoreCase("")) {\r
+                       for (i = 0; i < this.setVirtalAddList.size(); i++) {\r
+                               if (this.setVirtalAddList.get(i).equalsIgnoreCase("")) {\r
                                        break;\r
                                }\r
                                fileBuffer.append("VOID\r\n");\r
                                fileBuffer.append("EFIAPI\r\n");\r
-                               fileBuffer.append(setVirtualList[i]);\r
+                               fileBuffer.append(this.setVirtalAddList.get(i));\r
                                fileBuffer.append(" (\r\n");\r
                                fileBuffer.append("  IN EFI_EVENT  Event,\r\n");\r
                                fileBuffer.append("  IN VOID       *Context\r\n");\r
@@ -1943,8 +1864,8 @@ public class AutoGen {
                        //\r
                        fileBuffer\r
                                        .append("\r\nGLOBAL_REMOVE_IF_UNREFERENCED const EFI_EVENT_NOTIFY _gDriverSetVirtualAddressMapEvent[] = {");\r
-                       for (i = 0; i < setVirtualList.length; i++) {\r
-                               if (setVirtualList[i].equalsIgnoreCase("")) {\r
+                       for (i = 0; i < this.setVirtalAddList.size(); i++) {\r
+                               if (this.setVirtalAddList.get(i).equalsIgnoreCase("")) {\r
                                        break;\r
                                }\r
 \r
@@ -1954,7 +1875,7 @@ public class AutoGen {
                                        fileBuffer.append(",\r\n  ");\r
                                }\r
 \r
-                               fileBuffer.append(setVirtualList[i]);\r
+                               fileBuffer.append(this.setVirtalAddList.get(i));\r
                        }\r
                        //\r
                        //  If module is not DXE_DRIVER, DXE_RUNTIME_DIRVER, UEFI_DRIVER\r
@@ -1979,9 +1900,9 @@ public class AutoGen {
                        // set count to the number of valid entries.\r
                        //\r
                        Count = 0;\r
-                       if (exitBootList != null) {\r
-                               for (i = 0; i < exitBootList.length; i++) {\r
-                                       if (exitBootList[i].equalsIgnoreCase("")) {\r
+                       if (this.exitBootServiceList != null) {\r
+                               for (i = 0; i < this.exitBootServiceList.size(); i++) {\r
+                                       if (this.exitBootServiceList.get(i).equalsIgnoreCase("")) {\r
                                                break;\r
                                        }\r
                                }\r
@@ -1991,7 +1912,7 @@ public class AutoGen {
                        fileBuffer.append(";\r\n\r\n");\r
                }\r
 \r
-               if (exitBootList == null) {\r
+               if (this.exitBootServiceList == null || this.exitBootServiceList.size() == 0) {\r
                        if (UefiOrDxeModule) {\r
                                //\r
                                // No data so make a NULL list.\r
@@ -2005,14 +1926,14 @@ public class AutoGen {
                        //\r
                        // Write DriverExitBootServices function definition.\r
                        //\r
-                       for (i = 0; i < exitBootList.length; i++) {\r
-                               if (exitBootList[i].equalsIgnoreCase("")) {\r
+                       for (i = 0; i < this.exitBootServiceList.size(); i++) {\r
+                               if (this.exitBootServiceList.get(i).equalsIgnoreCase("")) {\r
                                        break;\r
                                }\r
 \r
                                fileBuffer.append("VOID\r\n");\r
                                fileBuffer.append("EFIAPI\r\n");\r
-                               fileBuffer.append(exitBootList[i]);\r
+                               fileBuffer.append(this.exitBootServiceList.get(i));\r
                                fileBuffer.append(" (\r\n");\r
                                fileBuffer.append("  IN EFI_EVENT  Event,\r\n");\r
                                fileBuffer.append("  IN VOID       *Context\r\n");\r
@@ -2024,8 +1945,8 @@ public class AutoGen {
                        //\r
                        fileBuffer\r
                                        .append("\r\nGLOBAL_REMOVE_IF_UNREFERENCED const EFI_EVENT_NOTIFY _gDriverExitBootServicesEvent[] = {");\r
-                       for (i = 0; i < exitBootList.length; i++) {\r
-                               if (exitBootList[i].equalsIgnoreCase("")) {\r
+                       for (i = 0; i < this.exitBootServiceList.size(); i++) {\r
+                               if (this.exitBootServiceList.get(i).equalsIgnoreCase("")) {\r
                                        break;\r
                                }\r
 \r
@@ -2034,7 +1955,7 @@ public class AutoGen {
                                } else {\r
                                        fileBuffer.append(",\r\n  ");\r
                                }\r
-                               fileBuffer.append(exitBootList[i]);\r
+                               fileBuffer.append(this.exitBootServiceList.get(i));\r
                        }\r
                        if (!UefiOrDxeModule) {\r
                                fileBuffer.append(",\r\n  NULL");\r
@@ -2064,11 +1985,151 @@ public class AutoGen {
                     fis.close();\r
                     fos.close();\r
                 }else {\r
-                    throw new AutoGenException("The flashMap.h file don't exist!!");\r
+                    throw new AutoGenException("The file, flashMap.h doesn't exist!");\r
                 }\r
             } catch (Exception e){\r
                 throw new AutoGenException(e.getMessage());\r
             }\r
                }\r
     }\r
-}
\ No newline at end of file
+    \r
+    /**\r
+    *This function first order the library instances, then collect\r
+    *library instance 's PPI, Protocol, GUID,\r
+    *SetVirtalAddressMapCallBack, ExitBootServiceCallBack, and\r
+    *Destructor, Constructor.\r
+    *\r
+       **/\r
+       private void collectLibInstanceInfo(){\r
+               int index;\r
+\r
+               String moduleType = SurfaceAreaQuery.getModuleType();\r
+               String libConstructName = null;\r
+               String libDestructName = null;\r
+               String[] setVirtuals = null;\r
+               String[] exitBoots = null;\r
+\r
+               ModuleIdentification[] libraryIdList = SurfaceAreaQuery\r
+                               .getLibraryInstance(this.arch);\r
+               try {\r
+                       if (libraryIdList != null) {\r
+                               //\r
+                               // Reorder library instance sequence.\r
+                               //\r
+                               AutogenLibOrder libOrder = new AutogenLibOrder(libraryIdList,\r
+                                               this.arch);\r
+                               List<ModuleIdentification> orderList = libOrder\r
+                                               .orderLibInstance();\r
+\r
+                               if (orderList != null) {\r
+                                       //\r
+                                       // Process library instance one by one.\r
+                                       //\r
+                                       for (int i = 0; i < orderList.size(); i++) {\r
+\r
+                                               //\r
+                                               // Get library instance basename.\r
+                                               //\r
+                                               ModuleIdentification libInstanceId = orderList.get(i);\r
+\r
+                                               //\r
+                                               // Get override map\r
+                                               //\r
+\r
+                                               Map<String, XmlObject> libDoc = GlobalData.getDoc(\r
+                                                               libInstanceId, this.arch);\r
+                                               SurfaceAreaQuery.push(libDoc);\r
+                                               //\r
+                                               // Get <PPis>, <Protocols>, <Guids> list of this library\r
+                                               // instance.\r
+                                               //\r
+                                               String[] ppiList = SurfaceAreaQuery.getPpiArray(this.arch);\r
+                                               String[] ppiNotifyList = SurfaceAreaQuery\r
+                                                               .getPpiNotifyArray(this.arch);\r
+                                               String[] protocolList = SurfaceAreaQuery\r
+                                                               .getProtocolArray(this.arch);\r
+                                               String[] protocolNotifyList = SurfaceAreaQuery\r
+                                                               .getProtocolNotifyArray(this.arch);\r
+                                               String[] guidList = SurfaceAreaQuery\r
+                                                               .getGuidEntryArray(this.arch);\r
+                                               PackageIdentification[] pkgList = SurfaceAreaQuery.getDependencePkg(this.arch);\r
+\r
+                                               //\r
+                                               // Add those ppi, protocol, guid in global ppi,\r
+                                               // protocol, guid\r
+                                               // list.\r
+                                               //\r
+                                               for (index = 0; index < ppiList.length; index++) {\r
+                                                       this.mPpiList.add(ppiList[index]);\r
+                                               }\r
+\r
+                                               for (index = 0; index < ppiNotifyList.length; index++) {\r
+                                                       this.mPpiList.add(ppiNotifyList[index]);\r
+                                               }\r
+\r
+                                               for (index = 0; index < protocolList.length; index++) {\r
+                                                       this.mProtocolList.add(protocolList[index]);\r
+                                               }\r
+\r
+                                               for (index = 0; index < protocolNotifyList.length; index++) {\r
+                                                       this.mProtocolList.add(protocolNotifyList[index]);\r
+                                               }\r
+\r
+                                               for (index = 0; index < guidList.length; index++) {\r
+                                                       this.mGuidList.add(guidList[index]);\r
+                                               }\r
+                                               for (index = 0; index < pkgList.length; index++){\r
+                                                       if (!this.mDepPkgList.contains(pkgList[index])){\r
+                                                               this.mDepPkgList.add(pkgList[index]);\r
+                                                       }\r
+                                               }\r
+\r
+                                               //\r
+                                               // If not yet parse this library instance's constructor\r
+                                               // element,parse it.\r
+                                               //\r
+                                               libConstructName = SurfaceAreaQuery\r
+                                                               .getLibConstructorName();\r
+                                               libDestructName = SurfaceAreaQuery\r
+                                                               .getLibDestructorName();\r
+\r
+                                               //\r
+                                               // Collect SetVirtualAddressMapCallBack and \r
+                                               // ExitBootServiceCallBack.\r
+                                               // \r
+                        setVirtuals = SurfaceAreaQuery.getSetVirtualAddressMapCallBackArray();\r
+                        exitBoots = SurfaceAreaQuery.getExitBootServicesCallBackArray();\r
+                        if (setVirtuals != null) {\r
+                            for (int j = 0; j < setVirtuals.length; j++) {\r
+                                                           this.setVirtalAddList.add(setVirtuals[j]);\r
+                                                   }\r
+                                               }\r
+                                               if (exitBoots != null) {\r
+                                                       for (int k = 0; k < exitBoots.length; k++) {\r
+                                                           this.exitBootServiceList.add(exitBoots[k]);\r
+                                                   }\r
+                                               }\r
+                                               SurfaceAreaQuery.pop();\r
+                                               //\r
+                                               // Add dependent library instance constructor function.\r
+                                               //\r
+                                               if (libConstructName != null) {\r
+                                                       this.libConstructList.add(libConstructName);\r
+                                               }\r
+                                               //\r
+                                               // Add dependent library instance destructor fuction.\r
+                                               //\r
+                                               if (libDestructName != null) {\r
+                                                       this.libDestructList.add(libDestructName);\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                       }\r
+\r
+       }catch (Exception e){\r
+       System.out.println(e.getMessage());\r
+       System.out.println("Collect library instance failed!");\r
+}\r
+}\r
+}\r