]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/GenC.py
BaseTools:BaseTools supports to the driver combination.
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / GenC.py
index 9700bf85270586cb337a4bf5f2a2768299a3fd11..e6fc5cda3cdd16f7114020d8f650ef7fe61c7cc9 100644 (file)
@@ -1455,10 +1455,25 @@ def CreateLibraryDestructorCode(Info, AutoGenC, AutoGenH):
 def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):\r
     if Info.IsLibrary or Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_SEC]:\r
         return\r
+    ModuleEntryPointList = []\r
+    for Lib in Info.DependentLibraryList:\r
+        if len(Lib.ModuleEntryPointList) > 0:\r
+            if Lib.ModuleType == Info.ModuleType:\r
+                ModuleEntryPointList = ModuleEntryPointList + Lib.ModuleEntryPointList\r
+            else:\r
+                EdkLogger.error(\r
+                    "build",\r
+                    PREBUILD_ERROR,\r
+                    "Driver's ModuleType must be consistent [%s]"%(str(Lib)),\r
+                    File=str(Info.PlatformInfo),\r
+                    ExtraData="consumed by [%s]" % str(Info.MetaFile)\r
+                )\r
+    ModuleEntryPointList = ModuleEntryPointList + Info.Module.ModuleEntryPointList\r
+\r
     #\r
     # Module Entry Points\r
     #\r
-    NumEntryPoints = len(Info.Module.ModuleEntryPointList)\r
+    NumEntryPoints = len(ModuleEntryPointList)\r
     if 'PI_SPECIFICATION_VERSION' in Info.Module.Specification:\r
         PiSpecVersion = Info.Module.Specification['PI_SPECIFICATION_VERSION']\r
     else:\r
@@ -1468,7 +1483,7 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):
     else:\r
         UefiSpecVersion = '0x00000000'\r
     Dict = {\r
-        'Function'       :   Info.Module.ModuleEntryPointList,\r
+        'Function'       :   ModuleEntryPointList,\r
         'PiSpecVersion'  :   PiSpecVersion + 'U',\r
         'UefiSpecVersion':   UefiSpecVersion + 'U'\r
     }\r
@@ -1481,7 +1496,7 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):
                   AUTOGEN_ERROR,\r
                   '%s must have exactly one entry point' % Info.ModuleType,\r
                   File=str(Info),\r
-                  ExtraData= ", ".join(Info.Module.ModuleEntryPointList)\r
+                  ExtraData= ", ".join(ModuleEntryPointList)\r
                   )\r
     if Info.ModuleType == SUP_MODULE_PEI_CORE:\r
         AutoGenC.Append(gPeiCoreEntryPointString.Replace(Dict))\r
@@ -1535,11 +1550,18 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):
 def CreateModuleUnloadImageCode(Info, AutoGenC, AutoGenH):\r
     if Info.IsLibrary or Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_SEC]:\r
         return\r
+\r
+    ModuleUnloadImageList = []\r
+    for Lib in Info.DependentLibraryList:\r
+        if len(Lib.ModuleUnloadImageList) > 0:\r
+            ModuleUnloadImageList = ModuleUnloadImageList + Lib.ModuleUnloadImageList\r
+    ModuleUnloadImageList = ModuleUnloadImageList + Info.Module.ModuleUnloadImageList\r
+\r
     #\r
     # Unload Image Handlers\r
     #\r
-    NumUnloadImage = len(Info.Module.ModuleUnloadImageList)\r
-    Dict = {'Count':str(NumUnloadImage) + 'U', 'Function':Info.Module.ModuleUnloadImageList}\r
+    NumUnloadImage = len(ModuleUnloadImageList)\r
+    Dict = {'Count':str(NumUnloadImage) + 'U', 'Function':ModuleUnloadImageList}\r
     if NumUnloadImage < 2:\r
         AutoGenC.Append(gUefiUnloadImageString[NumUnloadImage].Replace(Dict))\r
     else:\r