"$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}\r
\r
\r
-[Static-Library-File.USER_DEFINED]\r
+[Static-Library-File.USER_DEFINED, Static-Library-File.HOST_APPLICATION]\r
<InputFile>\r
*.lib\r
\r
# the type of build module is USER_DEFINED.\r
# All different DEPEX section tags would be copied into the As Built INF file\r
# and there would be separate DEPEX section tags\r
- if self.ModuleType.upper() == SUP_MODULE_USER_DEFINED:\r
+ if self.ModuleType.upper() == SUP_MODULE_USER_DEFINED or self.ModuleType.upper() == SUP_MODULE_HOST_APPLICATION:\r
if (Arch.upper() == self.Arch.upper()) and (ModuleType.upper() != TAB_ARCH_COMMON):\r
DepexList.append({(Arch, ModuleType): DepexExpr})\r
else:\r
DepexList.append({(Arch, ModuleType): DepexExpr})\r
\r
#the type of build module is USER_DEFINED.\r
- if self.ModuleType.upper() == SUP_MODULE_USER_DEFINED:\r
+ if self.ModuleType.upper() == SUP_MODULE_USER_DEFINED or self.ModuleType.upper() == SUP_MODULE_HOST_APPLICATION:\r
for Depex in DepexList:\r
for key in Depex:\r
DepexStr += '[Depex.%s.%s]\n' % key\r
\r
for ModuleType in self.DepexList:\r
# Ignore empty [depex] section or [depex] section for SUP_MODULE_USER_DEFINED module\r
- if len(self.DepexList[ModuleType]) == 0 or ModuleType == SUP_MODULE_USER_DEFINED:\r
+ if len(self.DepexList[ModuleType]) == 0 or ModuleType == SUP_MODULE_USER_DEFINED or ModuleType == SUP_MODULE_HOST_APPLICATION:\r
continue\r
\r
Dpx = GenDepex.DependencyExpression(self.DepexList[ModuleType], ModuleType, True)\r
SUP_MODULE_SMM_CORE : ["PiDxe.h", "Library/BaseLib.h", "Library/DebugLib.h", "Library/UefiDriverEntryPoint.h"],\r
SUP_MODULE_MM_STANDALONE : ["PiMm.h", "Library/BaseLib.h", "Library/DebugLib.h", "Library/StandaloneMmDriverEntryPoint.h"],\r
SUP_MODULE_MM_CORE_STANDALONE : ["PiMm.h", "Library/BaseLib.h", "Library/DebugLib.h", "Library/StandaloneMmCoreEntryPoint.h"],\r
- SUP_MODULE_USER_DEFINED : [gBasicHeaderFile, "Library/DebugLib.h"]\r
+ SUP_MODULE_USER_DEFINED : [gBasicHeaderFile, "Library/DebugLib.h"],\r
+ SUP_MODULE_HOST_APPLICATION : [gBasicHeaderFile, "Library/DebugLib.h"]\r
}\r
\r
## Autogen internal worker macro to define DynamicEx PCD name includes both the TokenSpaceGuidName\r
if Lib.ModuleType in [SUP_MODULE_BASE, SUP_MODULE_SEC]:\r
ConstructorPrototypeString.Append(gLibraryStructorPrototype[SUP_MODULE_BASE].Replace(Dict))\r
ConstructorCallingString.Append(gLibraryStructorCall[SUP_MODULE_BASE].Replace(Dict))\r
- if Info.ModuleType not in [SUP_MODULE_BASE, SUP_MODULE_USER_DEFINED]:\r
+ if Info.ModuleType not in [SUP_MODULE_BASE, SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION]:\r
if Lib.ModuleType in SUP_MODULE_SET_PEI:\r
ConstructorPrototypeString.Append(gLibraryStructorPrototype['PEI'].Replace(Dict))\r
ConstructorCallingString.Append(gLibraryStructorCall['PEI'].Replace(Dict))\r
if Info.IsLibrary:\r
AutoGenH.Append("${BEGIN}${FunctionPrototype}${END}", Dict)\r
else:\r
- if Info.ModuleType in [SUP_MODULE_BASE, SUP_MODULE_SEC, SUP_MODULE_USER_DEFINED]:\r
+ if Info.ModuleType in [SUP_MODULE_BASE, SUP_MODULE_SEC, SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION]:\r
AutoGenC.Append(gLibraryString[SUP_MODULE_BASE].Replace(Dict))\r
elif Info.ModuleType in SUP_MODULE_SET_PEI:\r
AutoGenC.Append(gLibraryString['PEI'].Replace(Dict))\r
if Lib.ModuleType in [SUP_MODULE_BASE, SUP_MODULE_SEC]:\r
DestructorPrototypeString.Append(gLibraryStructorPrototype[SUP_MODULE_BASE].Replace(Dict))\r
DestructorCallingString.Append(gLibraryStructorCall[SUP_MODULE_BASE].Replace(Dict))\r
- if Info.ModuleType not in [SUP_MODULE_BASE, SUP_MODULE_USER_DEFINED]:\r
+ if Info.ModuleType not in [SUP_MODULE_BASE, SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION]:\r
if Lib.ModuleType in SUP_MODULE_SET_PEI:\r
DestructorPrototypeString.Append(gLibraryStructorPrototype['PEI'].Replace(Dict))\r
DestructorCallingString.Append(gLibraryStructorCall['PEI'].Replace(Dict))\r
if Info.IsLibrary:\r
AutoGenH.Append("${BEGIN}${FunctionPrototype}${END}", Dict)\r
else:\r
- if Info.ModuleType in [SUP_MODULE_BASE, SUP_MODULE_SEC, SUP_MODULE_USER_DEFINED]:\r
+ if Info.ModuleType in [SUP_MODULE_BASE, SUP_MODULE_SEC, SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION]:\r
AutoGenC.Append(gLibraryString[SUP_MODULE_BASE].Replace(Dict))\r
elif Info.ModuleType in SUP_MODULE_SET_PEI:\r
AutoGenC.Append(gLibraryString['PEI'].Replace(Dict))\r
# @param AutoGenH The TemplateString object for header file\r
#\r
def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):\r
- if Info.IsLibrary or Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_SEC]:\r
+ if Info.IsLibrary or Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION, SUP_MODULE_SEC]:\r
return\r
#\r
# Module Entry Points\r
# @param AutoGenH The TemplateString object for header file\r
#\r
def CreateModuleUnloadImageCode(Info, AutoGenC, AutoGenH):\r
- if Info.IsLibrary or Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_BASE, SUP_MODULE_SEC]:\r
+ if Info.IsLibrary or Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION, SUP_MODULE_BASE, SUP_MODULE_SEC]:\r
return\r
#\r
# Unload Image Handlers\r
# @param AutoGenH The TemplateString object for header file\r
#\r
def CreateGuidDefinitionCode(Info, AutoGenC, AutoGenH):\r
- if Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_BASE]:\r
+ if Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION, SUP_MODULE_BASE]:\r
GuidType = TAB_GUID\r
else:\r
GuidType = "EFI_GUID"\r
# @param AutoGenH The TemplateString object for header file\r
#\r
def CreateProtocolDefinitionCode(Info, AutoGenC, AutoGenH):\r
- if Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_BASE]:\r
+ if Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION, SUP_MODULE_BASE]:\r
GuidType = TAB_GUID\r
else:\r
GuidType = "EFI_GUID"\r
# @param AutoGenH The TemplateString object for header file\r
#\r
def CreatePpiDefinitionCode(Info, AutoGenC, AutoGenH):\r
- if Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_BASE]:\r
+ if Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION, SUP_MODULE_BASE]:\r
GuidType = TAB_GUID\r
else:\r
GuidType = "EFI_GUID"\r
# Add extern declarations to AutoGen.h if one or more Token Space GUIDs were found\r
if TokenSpaceList:\r
AutoGenH.Append("\n// Definition of PCD Token Space GUIDs used in this module\n\n")\r
- if Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_BASE]:\r
+ if Info.ModuleType in [SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION, SUP_MODULE_BASE]:\r
GuidType = TAB_GUID\r
else:\r
GuidType = "EFI_GUID"\r
SUP_MODULE_UEFI_DRIVER = 'UEFI_DRIVER'\r
SUP_MODULE_UEFI_APPLICATION = 'UEFI_APPLICATION'\r
SUP_MODULE_USER_DEFINED = 'USER_DEFINED'\r
+SUP_MODULE_HOST_APPLICATION = 'HOST_APPLICATION'\r
SUP_MODULE_SMM_CORE = 'SMM_CORE'\r
SUP_MODULE_MM_STANDALONE = 'MM_STANDALONE'\r
SUP_MODULE_MM_CORE_STANDALONE = 'MM_CORE_STANDALONE'\r
\r
SUP_MODULE_LIST = [SUP_MODULE_BASE, SUP_MODULE_SEC, SUP_MODULE_PEI_CORE, SUP_MODULE_PEIM, SUP_MODULE_DXE_CORE, SUP_MODULE_DXE_DRIVER, \\r
SUP_MODULE_DXE_RUNTIME_DRIVER, SUP_MODULE_DXE_SAL_DRIVER, SUP_MODULE_DXE_SMM_DRIVER, SUP_MODULE_UEFI_DRIVER, \\r
- SUP_MODULE_UEFI_APPLICATION, SUP_MODULE_USER_DEFINED, SUP_MODULE_SMM_CORE, SUP_MODULE_MM_STANDALONE, SUP_MODULE_MM_CORE_STANDALONE]\r
+ 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]\r
SUP_MODULE_LIST_STRING = TAB_VALUE_SPLIT.join(SUP_MODULE_LIST)\r
SUP_MODULE_SET_PEI = {SUP_MODULE_PEIM, SUP_MODULE_PEI_CORE}\r
\r
SUP_MODULE_DXE_CORE, SUP_MODULE_DXE_DRIVER,\r
SUP_MODULE_DXE_SAL_DRIVER, SUP_MODULE_DXE_SMM_DRIVER,\r
SUP_MODULE_DXE_RUNTIME_DRIVER, SUP_MODULE_UEFI_DRIVER,\r
- SUP_MODULE_UEFI_APPLICATION, SUP_MODULE_USER_DEFINED,\r
+ SUP_MODULE_UEFI_APPLICATION, SUP_MODULE_USER_DEFINED, SUP_MODULE_HOST_APPLICATION,\r
TAB_DEFAULT, SUP_MODULE_BASE,\r
EDK_COMPONENT_TYPE_SECURITY_CORE,\r
EDK_COMPONENT_TYPE_COMBINED_PEIM_DRIVER,\r
from CommonDataClass.FdfClass import FfsInfStatementClassObject\r
from Common.MultipleWorkspace import MultipleWorkspace as mws\r
from Common.DataType import SUP_MODULE_USER_DEFINED\r
+from Common.DataType import SUP_MODULE_HOST_APPLICATION\r
from Common.StringUtils import *\r
from Common.Misc import PathClass\r
from Common.Misc import GuidStructureByteArrayToGuidString\r
self.FinalTargetSuffixMap.setdefault(os.path.splitext(File)[1], []).append(File)\r
\r
# Check if current INF module has DEPEX\r
- if '.depex' not in self.FinalTargetSuffixMap and self.InfModule.ModuleType != SUP_MODULE_USER_DEFINED \\r
+ if '.depex' not in self.FinalTargetSuffixMap and self.InfModule.ModuleType != SUP_MODULE_USER_DEFINED and self.InfModule.ModuleType != SUP_MODULE_HOST_APPLICATION \\r
and not self.InfModule.DxsFile and not self.InfModule.LibraryClass:\r
ModuleType = self.InfModule.ModuleType\r
PlatformDataBase = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, self.CurrentArch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]\r
\r
- if ModuleType != SUP_MODULE_USER_DEFINED:\r
+ if ModuleType != SUP_MODULE_USER_DEFINED and ModuleType != SUP_MODULE_HOST_APPLICATION:\r
for LibraryClass in PlatformDataBase.LibraryClasses.GetKeys():\r
if LibraryClass.startswith("NULL") and PlatformDataBase.LibraryClasses[LibraryClass, ModuleType]:\r
self.InfModule.LibraryClasses[LibraryClass] = PlatformDataBase.LibraryClasses[LibraryClass, ModuleType]\r
#\r
# Only patch file if FileType is PE32 or ModuleType is USER_DEFINED\r
#\r
- if FileType != BINARY_FILE_TYPE_PE32 and self.ModuleType != SUP_MODULE_USER_DEFINED:\r
+ if FileType != BINARY_FILE_TYPE_PE32 and self.ModuleType != SUP_MODULE_USER_DEFINED and self.ModuleType != SUP_MODULE_HOST_APPLICATION:\r
return EfiFile\r
\r
#\r
EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, "No [Depex] section or no valid expression in [Depex] section for [%s] module" \\r
% self.ModuleType, File=self.MetaFile)\r
\r
- if len(RecordList) != 0 and self.ModuleType == SUP_MODULE_USER_DEFINED:\r
+ if len(RecordList) != 0 and (self.ModuleType == SUP_MODULE_USER_DEFINED or self.ModuleType == SUP_MODULE_HOST_APPLICATION):\r
for Record in RecordList:\r
if Record[4] not in [SUP_MODULE_PEIM, SUP_MODULE_DXE_DRIVER, SUP_MODULE_DXE_SMM_DRIVER]:\r
EdkLogger.error('build', FORMAT_INVALID,\r
from __future__ import absolute_import\r
from collections import OrderedDict, defaultdict\r
from Common.DataType import SUP_MODULE_USER_DEFINED\r
+from Common.DataType import SUP_MODULE_HOST_APPLICATION\r
from .BuildClassObject import LibraryClassObject\r
import Common.GlobalData as GlobalData\r
from Workspace.BuildClassObject import StructurePcd\r
# If a module has a MODULE_TYPE of USER_DEFINED,\r
# do not link in NULL library class instances from the global [LibraryClasses.*] sections.\r
#\r
- if Module.ModuleType != SUP_MODULE_USER_DEFINED:\r
+ if Module.ModuleType != SUP_MODULE_USER_DEFINED and Module.ModuleType != SUP_MODULE_HOST_APPLICATION:\r
for LibraryClass in Platform.LibraryClasses.GetKeys():\r
if LibraryClass.startswith("NULL") and Platform.LibraryClasses[LibraryClass, Module.ModuleType]:\r
Module.LibraryClasses[LibraryClass] = Platform.LibraryClasses[LibraryClass, Module.ModuleType]\r
LibraryModule.LibraryClass.append(LibraryClassObject(LibraryClassName, [ModuleType]))\r
elif LibraryModule.LibraryClass is None \\r
or len(LibraryModule.LibraryClass) == 0 \\r
- or (ModuleType != SUP_MODULE_USER_DEFINED\r
+ or (ModuleType != SUP_MODULE_USER_DEFINED and ModuleType != SUP_MODULE_HOST_APPLICATION\r
and ModuleType not in LibraryModule.LibraryClass[0].SupModList):\r
# only USER_DEFINED can link against any library instance despite of its SupModList\r
if FileName:\r