]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Add HOST_APPLICATION module type.
authorJiewen Yao <jiewen.yao@intel.com>
Mon, 1 Jul 2019 06:19:13 +0000 (06:19 +0000)
committerLiming Gao <liming.gao@intel.com>
Fri, 12 Jul 2019 13:06:57 +0000 (21:06 +0800)
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.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Signed-off-by: Xiaoyu Lu <xiaoyux.lu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
BaseTools/Conf/build_rule.template
BaseTools/Source/Python/AutoGen/AutoGen.py
BaseTools/Source/Python/AutoGen/GenC.py
BaseTools/Source/Python/Common/DataType.py
BaseTools/Source/Python/GenFds/FdfParser.py
BaseTools/Source/Python/GenFds/FfsInfStatement.py
BaseTools/Source/Python/Workspace/InfBuildData.py
BaseTools/Source/Python/Workspace/WorkspaceCommon.py

index 030e74c35a65a0f99a1b3fad2c3b18f781bb954b..db06d3a6b45af6eaa9e08e34487d053d9edc07cb 100755 (executable)
         "$(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
index 5cfaf2141af03678c559b0bd28c3b42ba4b78627..2df055a109f791aa83148e1d1e99bc1ae03081f2 100644 (file)
@@ -2837,7 +2837,7 @@ class ModuleAutoGen(AutoGen):
                     # 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
@@ -2847,7 +2847,7 @@ class ModuleAutoGen(AutoGen):
                             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
@@ -4088,7 +4088,7 @@ class ModuleAutoGen(AutoGen):
 \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
index b527295c0253fe090ddfaef92a2b1e372e8cde8c..4cb776206e90623d426d9d440a9921237815a1aa 100644 (file)
@@ -776,7 +776,8 @@ gModuleTypeHeaderFile = {
     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
@@ -1339,7 +1340,7 @@ def CreateLibraryConstructorCode(Info, AutoGenC, AutoGenH):
         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
@@ -1368,7 +1369,7 @@ def CreateLibraryConstructorCode(Info, AutoGenC, AutoGenH):
     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
@@ -1402,7 +1403,7 @@ def CreateLibraryDestructorCode(Info, AutoGenC, AutoGenH):
         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
@@ -1431,7 +1432,7 @@ def CreateLibraryDestructorCode(Info, AutoGenC, AutoGenH):
     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
@@ -1449,7 +1450,7 @@ def CreateLibraryDestructorCode(Info, AutoGenC, AutoGenH):
 #   @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
@@ -1529,7 +1530,7 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):
 #   @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
@@ -1549,7 +1550,7 @@ def CreateModuleUnloadImageCode(Info, AutoGenC, AutoGenH):
 #   @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
@@ -1573,7 +1574,7 @@ def CreateGuidDefinitionCode(Info, AutoGenC, AutoGenH):
 #   @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
@@ -1597,7 +1598,7 @@ def CreateProtocolDefinitionCode(Info, AutoGenC, AutoGenH):
 #   @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
@@ -1634,7 +1635,7 @@ def CreatePcdCode(Info, AutoGenC, AutoGenH):
     # 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
index 83ec36c2350d77f4b119f2c441d93892da7a7e2b..8ae1bd28fabf113bc682ec6ca21a5babff2dbe0c 100644 (file)
@@ -66,13 +66,14 @@ SUP_MODULE_DXE_SMM_DRIVER = 'DXE_SMM_DRIVER'
 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
index fb5fd85e0a825ebf3341e2ca706af9b0b37b57c3..9b04a76af8c5ebb42c094426c58ca9790f870771 100644 (file)
@@ -3543,7 +3543,7 @@ class FdfParser:
                 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
index cd3b0f647793da01772e6fee4a98e3c576a6026d..ebb93b14c4ff7ae9ef42dd1818dd90c22e0da580 100644 (file)
@@ -25,6 +25,7 @@ from . import RuleComplexFile
 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
@@ -84,12 +85,12 @@ class FfsInfStatement(FfsInfStatementClassObject):
                 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
@@ -378,7 +379,7 @@ class FfsInfStatement(FfsInfStatementClassObject):
         #\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
index e66b7c983278d0e73345e231756b844cd3d0618a..60970cd928361b0f78f25a91e0fc7fe42f962a60 100644 (file)
@@ -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" \\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
index 0cc83110efd5e72ea384516c19b3bc925f1a7198..41ae684d3ee916f9082c0052932baff360fec5f3 100644 (file)
@@ -8,6 +8,7 @@
 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
@@ -94,7 +95,7 @@ def GetModuleLibInstances(Module, Platform, BuildDatabase, Arch, Target, Toolcha
     # 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
@@ -137,7 +138,7 @@ def GetModuleLibInstances(Module, Platform, BuildDatabase, Arch, Target, Toolcha
                     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