Update BaseTools to support the multiple driver combination. The merge style
reuses the library instance syntax in package.dsc file. The below example is
to combine VirtioGpu and QemuVideoDxe driver into one driver. VirtioGpu driver
entry point will be executed first, QemuVideoDxe entry point will run last.
[Components]
OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf {
<LibraryClasses>
NULL|OvmfPkg/VirtioGpuDxe/VirtioGpu.inf
}
Notes: When try combining some drivers, the compile failure may happen,
because the same function name are used in the different drivers. Those
drivers are required to be clean up first, then be combined.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Liming Gao <liming.gao@intel.com>
---
BaseTools/Source/Python/AutoGen/GenC.py | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/BaseTools/Source/Python/AutoGen/GenC.py b/BaseTools/Source/Python/AutoGen/GenC.py
index 67aaef7..6579457 100644
--- a/BaseTools/Source/Python/AutoGen/GenC.py
+++ b/BaseTools/Source/Python/AutoGen/GenC.py
@@ -1359,10 +1359,17 @@ def CreateLibraryDestructorCode(Info, AutoGenC, AutoGenH):
def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):
if Info.IsLibrary or Info.ModuleType in ['USER_DEFINED', 'SEC']:
return
+
+ ModuleEntryPointList = []
+ for Lib in Info.DependentLibraryList:
+ if len (Lib.ModuleEntryPointList) > 0:
+ ModuleEntryPointList = ModuleEntryPointList + Lib.ModuleEntryPointList
+ ModuleEntryPointList = ModuleEntryPointList + Info.Module.ModuleEntryPointList
+
#
# Module Entry Points
#
- NumEntryPoints = len(Info.Module.ModuleEntryPointList)
+ NumEntryPoints = len(ModuleEntryPointList)
if 'PI_SPECIFICATION_VERSION' in Info.Module.Specification:
PiSpecVersion = Info.Module.Specification['PI_SPECIFICATION_VERSION']
else:
@@ -1372,7 +1379,7 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):
else:
UefiSpecVersion = '0x00000000'
Dict = {
- 'Function' : Info.Module.ModuleEntryPointList,
+ 'Function' : ModuleEntryPointList,
'PiSpecVersion' : PiSpecVersion + 'U',
'UefiSpecVersion': UefiSpecVersion + 'U'
}
@@ -1385,7 +1392,7 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):
AUTOGEN_ERROR,
'%s must have exactly one entry point' % Info.ModuleType,
File=str(Info),
- ExtraData= ", ".join(Info.Module.ModuleEntryPointList)
+ ExtraData= ", ".join(ModuleEntryPointList)
)
if Info.ModuleType == 'PEI_CORE':
AutoGenC.Append(gPeiCoreEntryPointString.Replace(Dict))
@@ -1430,11 +1437,18 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):
def CreateModuleUnloadImageCode(Info, AutoGenC, AutoGenH):
if Info.IsLibrary or Info.ModuleType in ['USER_DEFINED', 'SEC']:
return
+
+ ModuleUnloadImageList = []
+ for Lib in Info.DependentLibraryList:
+ if len (Lib.ModuleUnloadImageList) > 0:
+ ModuleUnloadImageList = ModuleUnloadImageList + Lib.ModuleUnloadImageList
+ ModuleUnloadImageList = ModuleUnloadImageList + Info.Module.ModuleUnloadImageList
+
#
# Unload Image Handlers
#
- NumUnloadImage = len(Info.Module.ModuleUnloadImageList)
- Dict = {'Count':str(NumUnloadImage) + 'U', 'Function':Info.Module.ModuleUnloadImageList}
+ NumUnloadImage = len(ModuleUnloadImageList)
+ Dict = {'Count':str(NumUnloadImage) + 'U', 'Function':ModuleUnloadImageList}
if NumUnloadImage < 2:
AutoGenC.Append(gUefiUnloadImageString[NumUnloadImage].Replace(Dict))
else:
--
2.8.0.windows.1
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel