Xiaoyu:
  I want to confirm what output for HOST_APPLICATION module will be used. 
Xxx.dll or xxx.efi? 

Thanks
Liming
>-----Original Message-----
>From: Lu, XiaoyuX
>Sent: Monday, July 01, 2019 6:13 PM
>To: devel@edk2.groups.io
>Cc: Lu, XiaoyuX <xiaoyux...@intel.com>; Feng, Bob C <bob.c.f...@intel.com>;
>Gao, Liming <liming....@intel.com>; Yao, Jiewen <jiewen....@intel.com>
>Subject: [PATCH v1 1/1] BaseTools: Add HOST_APPLICATION module type.
>
>From: Jiewen Yao <jiewen....@intel.com>
>
>It can be used to indicate a module can be build to run
>as OS application and run in OS environment.
>
>Cc: Bob Feng <bob.c.f...@intel.com>
>Cc: Liming Gao <liming....@intel.com>
>Cc: Jiewen Yao <jiewen....@intel.com>
>Signed-off-by: Xiaoyu Lu <xiaoyux...@intel.com>
>---
> BaseTools/Conf/build_rule.template            |  2 +-
> BaseTools/Source/Python/AutoGen/AutoGen.py    |  6 ++---
> BaseTools/Source/Python/AutoGen/GenC.py       | 23 ++++++++++---------
> BaseTools/Source/Python/Common/DataType.py    |  3 ++-
> BaseTools/Source/Python/GenFds/FdfParser.py   |  2 +-
> .../Source/Python/GenFds/FfsInfStatement.py   |  7 +++---
> .../Source/Python/Workspace/InfBuildData.py   |  2 +-
> .../Python/Workspace/WorkspaceCommon.py       |  5 ++--
> 8 files changed, 27 insertions(+), 23 deletions(-)
>
>diff --git a/BaseTools/Conf/build_rule.template
>b/BaseTools/Conf/build_rule.template
>index 030e74c35a65..db06d3a6b45a 100755
>--- a/BaseTools/Conf/build_rule.template
>+++ b/BaseTools/Conf/build_rule.template
>@@ -321,7 +321,7 @@
>         "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}
>
>
>-[Static-Library-File.USER_DEFINED]
>+[Static-Library-File.USER_DEFINED, Static-Library-File.HOST_APPLICATION]
>     <InputFile>
>         *.lib
>
>diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py
>b/BaseTools/Source/Python/AutoGen/AutoGen.py
>index e8e09dc8a366..32b5a5564827 100644
>--- a/BaseTools/Source/Python/AutoGen/AutoGen.py
>+++ b/BaseTools/Source/Python/AutoGen/AutoGen.py
>@@ -2831,7 +2831,7 @@ class ModuleAutoGen(AutoGen):
>                     # the type of build module is USER_DEFINED.
>                     # All different DEPEX section tags would be copied into 
> the As Built
>INF file
>                     # and there would be separate DEPEX section tags
>-                    if self.ModuleType.upper() == SUP_MODULE_USER_DEFINED:
>+                    if self.ModuleType.upper() == SUP_MODULE_USER_DEFINED or
>self.ModuleType.upper() == SUP_MODULE_HOST_APPLICATION:
>                         if (Arch.upper() == self.Arch.upper()) and
>(ModuleType.upper() != TAB_ARCH_COMMON):
>                             DepexList.append({(Arch, ModuleType): DepexExpr})
>                     else:
>@@ -2841,7 +2841,7 @@ class ModuleAutoGen(AutoGen):
>                             DepexList.append({(Arch, ModuleType): DepexExpr})
>
>         #the type of build module is USER_DEFINED.
>-        if self.ModuleType.upper() == SUP_MODULE_USER_DEFINED:
>+        if self.ModuleType.upper() == SUP_MODULE_USER_DEFINED or
>self.ModuleType.upper() == SUP_MODULE_HOST_APPLICATION:
>             for Depex in DepexList:
>                 for key in Depex:
>                     DepexStr += '[Depex.%s.%s]\n' % key
>@@ -4082,7 +4082,7 @@ class ModuleAutoGen(AutoGen):
>
>         for ModuleType in self.DepexList:
>             # Ignore empty [depex] section or [depex] section for
>SUP_MODULE_USER_DEFINED module
>-            if len(self.DepexList[ModuleType]) == 0 or ModuleType ==
>SUP_MODULE_USER_DEFINED:
>+            if len(self.DepexList[ModuleType]) == 0 or ModuleType ==
>SUP_MODULE_USER_DEFINED or ModuleType ==
>SUP_MODULE_HOST_APPLICATION:
>                 continue
>
>             Dpx = GenDepex.DependencyExpression(self.DepexList[ModuleType],
>ModuleType, True)
>diff --git a/BaseTools/Source/Python/AutoGen/GenC.py
>b/BaseTools/Source/Python/AutoGen/GenC.py
>index b527295c0253..4cb776206e90 100644
>--- a/BaseTools/Source/Python/AutoGen/GenC.py
>+++ b/BaseTools/Source/Python/AutoGen/GenC.py
>@@ -776,7 +776,8 @@ gModuleTypeHeaderFile = {
>     SUP_MODULE_SMM_CORE          :   ["PiDxe.h", "Library/BaseLib.h",
>"Library/DebugLib.h", "Library/UefiDriverEntryPoint.h"],
>     SUP_MODULE_MM_STANDALONE     :   ["PiMm.h", "Library/BaseLib.h",
>"Library/DebugLib.h", "Library/StandaloneMmDriverEntryPoint.h"],
>     SUP_MODULE_MM_CORE_STANDALONE :  ["PiMm.h", "Library/BaseLib.h",
>"Library/DebugLib.h", "Library/StandaloneMmCoreEntryPoint.h"],
>-    SUP_MODULE_USER_DEFINED      :   [gBasicHeaderFile,
>"Library/DebugLib.h"]
>+    SUP_MODULE_USER_DEFINED      :   [gBasicHeaderFile,
>"Library/DebugLib.h"],
>+    SUP_MODULE_HOST_APPLICATION  :   [gBasicHeaderFile,
>"Library/DebugLib.h"]
> }
>
> ## Autogen internal worker macro to define DynamicEx PCD name includes
>both the TokenSpaceGuidName
>@@ -1339,7 +1340,7 @@ def CreateLibraryConstructorCode(Info, AutoGenC,
>AutoGenH):
>         if Lib.ModuleType in [SUP_MODULE_BASE, SUP_MODULE_SEC]:
>
>ConstructorPrototypeString.Append(gLibraryStructorPrototype[SUP_MODUL
>E_BASE].Replace(Dict))
>
>ConstructorCallingString.Append(gLibraryStructorCall[SUP_MODULE_BASE].R
>eplace(Dict))
>-        if Info.ModuleType not in [SUP_MODULE_BASE,
>SUP_MODULE_USER_DEFINED]:
>+        if Info.ModuleType not in [SUP_MODULE_BASE,
>SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION]:
>             if Lib.ModuleType in SUP_MODULE_SET_PEI:
>
>ConstructorPrototypeString.Append(gLibraryStructorPrototype['PEI'].Replace
>(Dict))
>
>ConstructorCallingString.Append(gLibraryStructorCall['PEI'].Replace(Dict))
>@@ -1368,7 +1369,7 @@ def CreateLibraryConstructorCode(Info, AutoGenC,
>AutoGenH):
>     if Info.IsLibrary:
>         AutoGenH.Append("${BEGIN}${FunctionPrototype}${END}", Dict)
>     else:
>-        if Info.ModuleType in [SUP_MODULE_BASE, SUP_MODULE_SEC,
>SUP_MODULE_USER_DEFINED]:
>+        if Info.ModuleType in [SUP_MODULE_BASE, SUP_MODULE_SEC,
>SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION]:
>             AutoGenC.Append(gLibraryString[SUP_MODULE_BASE].Replace(Dict))
>         elif Info.ModuleType in SUP_MODULE_SET_PEI:
>             AutoGenC.Append(gLibraryString['PEI'].Replace(Dict))
>@@ -1402,7 +1403,7 @@ def CreateLibraryDestructorCode(Info, AutoGenC,
>AutoGenH):
>         if Lib.ModuleType in [SUP_MODULE_BASE, SUP_MODULE_SEC]:
>
>DestructorPrototypeString.Append(gLibraryStructorPrototype[SUP_MODULE
>_BASE].Replace(Dict))
>
>DestructorCallingString.Append(gLibraryStructorCall[SUP_MODULE_BASE].Re
>place(Dict))
>-        if Info.ModuleType not in [SUP_MODULE_BASE,
>SUP_MODULE_USER_DEFINED]:
>+        if Info.ModuleType not in [SUP_MODULE_BASE,
>SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION]:
>             if Lib.ModuleType in SUP_MODULE_SET_PEI:
>
>DestructorPrototypeString.Append(gLibraryStructorPrototype['PEI'].Replace(
>Dict))
>
>DestructorCallingString.Append(gLibraryStructorCall['PEI'].Replace(Dict))
>@@ -1431,7 +1432,7 @@ def CreateLibraryDestructorCode(Info, AutoGenC,
>AutoGenH):
>     if Info.IsLibrary:
>         AutoGenH.Append("${BEGIN}${FunctionPrototype}${END}", Dict)
>     else:
>-        if Info.ModuleType in [SUP_MODULE_BASE, SUP_MODULE_SEC,
>SUP_MODULE_USER_DEFINED]:
>+        if Info.ModuleType in [SUP_MODULE_BASE, SUP_MODULE_SEC,
>SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION]:
>             AutoGenC.Append(gLibraryString[SUP_MODULE_BASE].Replace(Dict))
>         elif Info.ModuleType in SUP_MODULE_SET_PEI:
>             AutoGenC.Append(gLibraryString['PEI'].Replace(Dict))
>@@ -1449,7 +1450,7 @@ def CreateLibraryDestructorCode(Info, AutoGenC,
>AutoGenH):
> #   @param      AutoGenH    The TemplateString object for header file
> #
> def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):
>-    if Info.IsLibrary or Info.ModuleType in [SUP_MODULE_USER_DEFINED,
>SUP_MODULE_SEC]:
>+    if Info.IsLibrary or Info.ModuleType in [SUP_MODULE_USER_DEFINED,
>SUP_MODULE_HOST_APPLICATION, SUP_MODULE_SEC]:
>         return
>     #
>     # Module Entry Points
>@@ -1529,7 +1530,7 @@ def CreateModuleEntryPointCode(Info, AutoGenC,
>AutoGenH):
> #   @param      AutoGenH    The TemplateString object for header file
> #
> def CreateModuleUnloadImageCode(Info, AutoGenC, AutoGenH):
>-    if Info.IsLibrary or Info.ModuleType in [SUP_MODULE_USER_DEFINED,
>SUP_MODULE_BASE, SUP_MODULE_SEC]:
>+    if Info.IsLibrary or Info.ModuleType in [SUP_MODULE_USER_DEFINED,
>SUP_MODULE_HOST_APPLICATION, SUP_MODULE_BASE,
>SUP_MODULE_SEC]:
>         return
>     #
>     # Unload Image Handlers
>@@ -1549,7 +1550,7 @@ def CreateModuleUnloadImageCode(Info,
>AutoGenC, AutoGenH):
> #   @param      AutoGenH    The TemplateString object for header file
> #
> def CreateGuidDefinitionCode(Info, AutoGenC, AutoGenH):
>-    if Info.ModuleType in [SUP_MODULE_USER_DEFINED,
>SUP_MODULE_BASE]:
>+    if Info.ModuleType in [SUP_MODULE_USER_DEFINED,
>SUP_MODULE_HOST_APPLICATION, SUP_MODULE_BASE]:
>         GuidType = TAB_GUID
>     else:
>         GuidType = "EFI_GUID"
>@@ -1573,7 +1574,7 @@ def CreateGuidDefinitionCode(Info, AutoGenC,
>AutoGenH):
> #   @param      AutoGenH    The TemplateString object for header file
> #
> def CreateProtocolDefinitionCode(Info, AutoGenC, AutoGenH):
>-    if Info.ModuleType in [SUP_MODULE_USER_DEFINED,
>SUP_MODULE_BASE]:
>+    if Info.ModuleType in [SUP_MODULE_USER_DEFINED,
>SUP_MODULE_HOST_APPLICATION, SUP_MODULE_BASE]:
>         GuidType = TAB_GUID
>     else:
>         GuidType = "EFI_GUID"
>@@ -1597,7 +1598,7 @@ def CreateProtocolDefinitionCode(Info, AutoGenC,
>AutoGenH):
> #   @param      AutoGenH    The TemplateString object for header file
> #
> def CreatePpiDefinitionCode(Info, AutoGenC, AutoGenH):
>-    if Info.ModuleType in [SUP_MODULE_USER_DEFINED,
>SUP_MODULE_BASE]:
>+    if Info.ModuleType in [SUP_MODULE_USER_DEFINED,
>SUP_MODULE_HOST_APPLICATION, SUP_MODULE_BASE]:
>         GuidType = TAB_GUID
>     else:
>         GuidType = "EFI_GUID"
>@@ -1634,7 +1635,7 @@ def CreatePcdCode(Info, AutoGenC, AutoGenH):
>     # Add extern declarations to AutoGen.h if one or more Token Space GUIDs
>were found
>     if TokenSpaceList:
>         AutoGenH.Append("\n// Definition of PCD Token Space GUIDs used in
>this module\n\n")
>-        if Info.ModuleType in [SUP_MODULE_USER_DEFINED,
>SUP_MODULE_BASE]:
>+        if Info.ModuleType in [SUP_MODULE_USER_DEFINED,
>SUP_MODULE_HOST_APPLICATION, SUP_MODULE_BASE]:
>             GuidType = TAB_GUID
>         else:
>             GuidType = "EFI_GUID"
>diff --git a/BaseTools/Source/Python/Common/DataType.py
>b/BaseTools/Source/Python/Common/DataType.py
>index 83ec36c2350d..8ae1bd28fabf 100644
>--- a/BaseTools/Source/Python/Common/DataType.py
>+++ b/BaseTools/Source/Python/Common/DataType.py
>@@ -66,13 +66,14 @@ SUP_MODULE_DXE_SMM_DRIVER =
>'DXE_SMM_DRIVER'
> SUP_MODULE_UEFI_DRIVER = 'UEFI_DRIVER'
> SUP_MODULE_UEFI_APPLICATION = 'UEFI_APPLICATION'
> SUP_MODULE_USER_DEFINED = 'USER_DEFINED'
>+SUP_MODULE_HOST_APPLICATION = 'HOST_APPLICATION'
> SUP_MODULE_SMM_CORE = 'SMM_CORE'
> SUP_MODULE_MM_STANDALONE = 'MM_STANDALONE'
> SUP_MODULE_MM_CORE_STANDALONE = 'MM_CORE_STANDALONE'
>
> SUP_MODULE_LIST = [SUP_MODULE_BASE, SUP_MODULE_SEC,
>SUP_MODULE_PEI_CORE, SUP_MODULE_PEIM, SUP_MODULE_DXE_CORE,
>SUP_MODULE_DXE_DRIVER, \
>                    SUP_MODULE_DXE_RUNTIME_DRIVER,
>SUP_MODULE_DXE_SAL_DRIVER, SUP_MODULE_DXE_SMM_DRIVER,
>SUP_MODULE_UEFI_DRIVER, \
>-                   SUP_MODULE_UEFI_APPLICATION, SUP_MODULE_USER_DEFINED,
>SUP_MODULE_SMM_CORE, SUP_MODULE_MM_STANDALONE,
>SUP_MODULE_MM_CORE_STANDALONE]
>+                   SUP_MODULE_UEFI_APPLICATION, SUP_MODULE_USER_DEFINED,
>SUP_MODULE_HOST_APPLICATION, SUP_MODULE_SMM_CORE,
>SUP_MODULE_MM_STANDALONE, SUP_MODULE_MM_CORE_STANDALONE]
> SUP_MODULE_LIST_STRING = TAB_VALUE_SPLIT.join(SUP_MODULE_LIST)
> SUP_MODULE_SET_PEI = {SUP_MODULE_PEIM, SUP_MODULE_PEI_CORE}
>
>diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py
>b/BaseTools/Source/Python/GenFds/FdfParser.py
>index fb5fd85e0a82..9b04a76af8c5 100644
>--- a/BaseTools/Source/Python/GenFds/FdfParser.py
>+++ b/BaseTools/Source/Python/GenFds/FdfParser.py
>@@ -3543,7 +3543,7 @@ class FdfParser:
>                 SUP_MODULE_DXE_CORE, SUP_MODULE_DXE_DRIVER,
>                 SUP_MODULE_DXE_SAL_DRIVER, SUP_MODULE_DXE_SMM_DRIVER,
>                 SUP_MODULE_DXE_RUNTIME_DRIVER, SUP_MODULE_UEFI_DRIVER,
>-                SUP_MODULE_UEFI_APPLICATION, SUP_MODULE_USER_DEFINED,
>+                SUP_MODULE_UEFI_APPLICATION, SUP_MODULE_USER_DEFINED,
>SUP_MODULE_HOST_APPLICATION,
>                 TAB_DEFAULT, SUP_MODULE_BASE,
>                 EDK_COMPONENT_TYPE_SECURITY_CORE,
>                 EDK_COMPONENT_TYPE_COMBINED_PEIM_DRIVER,
>diff --git a/BaseTools/Source/Python/GenFds/FfsInfStatement.py
>b/BaseTools/Source/Python/GenFds/FfsInfStatement.py
>index cd3b0f647793..ebb93b14c4ff 100644
>--- a/BaseTools/Source/Python/GenFds/FfsInfStatement.py
>+++ b/BaseTools/Source/Python/GenFds/FfsInfStatement.py
>@@ -25,6 +25,7 @@ from . import RuleComplexFile
> from CommonDataClass.FdfClass import FfsInfStatementClassObject
> from Common.MultipleWorkspace import MultipleWorkspace as mws
> from Common.DataType import SUP_MODULE_USER_DEFINED
>+from Common.DataType import SUP_MODULE_HOST_APPLICATION
> from Common.StringUtils import *
> from Common.Misc import PathClass
> from Common.Misc import GuidStructureByteArrayToGuidString
>@@ -84,12 +85,12 @@ class FfsInfStatement(FfsInfStatementClassObject):
>                 
> self.FinalTargetSuffixMap.setdefault(os.path.splitext(File)[1],
>[]).append(File)
>
>             # Check if current INF module has DEPEX
>-            if '.depex' not in self.FinalTargetSuffixMap and
>self.InfModule.ModuleType != SUP_MODULE_USER_DEFINED \
>+            if '.depex' not in self.FinalTargetSuffixMap and
>self.InfModule.ModuleType != SUP_MODULE_USER_DEFINED and
>self.InfModule.ModuleType != SUP_MODULE_HOST_APPLICATION \
>                 and not self.InfModule.DxsFile and not 
> self.InfModule.LibraryClass:
>                 ModuleType = self.InfModule.ModuleType
>                 PlatformDataBase =
>GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActiveP
>latform, self.CurrentArch, GenFdsGlobalVariable.TargetName,
>GenFdsGlobalVariable.ToolChainTag]
>
>-                if ModuleType != SUP_MODULE_USER_DEFINED:
>+                if ModuleType != SUP_MODULE_USER_DEFINED and ModuleType !=
>SUP_MODULE_HOST_APPLICATION:
>                     for LibraryClass in 
> PlatformDataBase.LibraryClasses.GetKeys():
>                         if LibraryClass.startswith("NULL") and
>PlatformDataBase.LibraryClasses[LibraryClass, ModuleType]:
>                             self.InfModule.LibraryClasses[LibraryClass] =
>PlatformDataBase.LibraryClasses[LibraryClass, ModuleType]
>@@ -378,7 +379,7 @@ class FfsInfStatement(FfsInfStatementClassObject):
>         #
>         # Only patch file if FileType is PE32 or ModuleType is USER_DEFINED
>         #
>-        if FileType != BINARY_FILE_TYPE_PE32 and self.ModuleType !=
>SUP_MODULE_USER_DEFINED:
>+        if FileType != BINARY_FILE_TYPE_PE32 and self.ModuleType !=
>SUP_MODULE_USER_DEFINED and self.ModuleType !=
>SUP_MODULE_HOST_APPLICATION:
>             return EfiFile
>
>         #
>diff --git a/BaseTools/Source/Python/Workspace/InfBuildData.py
>b/BaseTools/Source/Python/Workspace/InfBuildData.py
>index e66b7c983278..60970cd92836 100644
>--- a/BaseTools/Source/Python/Workspace/InfBuildData.py
>+++ b/BaseTools/Source/Python/Workspace/InfBuildData.py
>@@ -748,7 +748,7 @@ class InfBuildData(ModuleBuildClassObject):
>                 EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, "No [Depex]
>section or no valid expression in [Depex] section for [%s] module" \
>                                 % self.ModuleType, File=self.MetaFile)
>
>-        if len(RecordList) != 0 and self.ModuleType ==
>SUP_MODULE_USER_DEFINED:
>+        if len(RecordList) != 0 and (self.ModuleType ==
>SUP_MODULE_USER_DEFINED or self.ModuleType ==
>SUP_MODULE_HOST_APPLICATION):
>             for Record in RecordList:
>                 if Record[4] not in [SUP_MODULE_PEIM, SUP_MODULE_DXE_DRIVER,
>SUP_MODULE_DXE_SMM_DRIVER]:
>                     EdkLogger.error('build', FORMAT_INVALID,
>diff --git a/BaseTools/Source/Python/Workspace/WorkspaceCommon.py
>b/BaseTools/Source/Python/Workspace/WorkspaceCommon.py
>index 0cc83110efd5..41ae684d3ee9 100644
>--- a/BaseTools/Source/Python/Workspace/WorkspaceCommon.py
>+++ b/BaseTools/Source/Python/Workspace/WorkspaceCommon.py
>@@ -8,6 +8,7 @@
> from __future__ import absolute_import
> from collections import OrderedDict, defaultdict
> from Common.DataType import SUP_MODULE_USER_DEFINED
>+from Common.DataType import SUP_MODULE_HOST_APPLICATION
> from .BuildClassObject import LibraryClassObject
> import Common.GlobalData as GlobalData
> from Workspace.BuildClassObject import StructurePcd
>@@ -94,7 +95,7 @@ def GetModuleLibInstances(Module, Platform,
>BuildDatabase, Arch, Target, Toolcha
>     # If a module has a MODULE_TYPE of USER_DEFINED,
>     # do not link in NULL library class instances from the global 
> [LibraryClasses.*]
>sections.
>     #
>-    if Module.ModuleType != SUP_MODULE_USER_DEFINED:
>+    if Module.ModuleType != SUP_MODULE_USER_DEFINED and
>Module.ModuleType != SUP_MODULE_HOST_APPLICATION:
>         for LibraryClass in Platform.LibraryClasses.GetKeys():
>             if LibraryClass.startswith("NULL") and
>Platform.LibraryClasses[LibraryClass, Module.ModuleType]:
>                 Module.LibraryClasses[LibraryClass] =
>Platform.LibraryClasses[LibraryClass, Module.ModuleType]
>@@ -137,7 +138,7 @@ def GetModuleLibInstances(Module, Platform,
>BuildDatabase, Arch, Target, Toolcha
>
>LibraryModule.LibraryClass.append(LibraryClassObject(LibraryClassName,
>[ModuleType]))
>                 elif LibraryModule.LibraryClass is None \
>                      or len(LibraryModule.LibraryClass) == 0 \
>-                     or (ModuleType != SUP_MODULE_USER_DEFINED
>+                     or (ModuleType != SUP_MODULE_USER_DEFINED and
>ModuleType != SUP_MODULE_HOST_APPLICATION
>                          and ModuleType not in
>LibraryModule.LibraryClass[0].SupModList):
>                     # only USER_DEFINED can link against any library instance 
> despite of
>its SupModList
>                     if FileName:
>--
>2.17.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#43385): https://edk2.groups.io/g/devel/message/43385
Mute This Topic: https://groups.io/mt/32269882/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to