]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Enable the flag to treat dynamic pcd as dynamicEx
authorBob Feng <bob.c.feng@intel.com>
Tue, 8 Jun 2021 02:31:55 +0000 (10:31 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Mon, 12 Jul 2021 07:40:07 +0000 (07:40 +0000)
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1688

In order to support binary build, build tool add a
flag to convert type of Dynamic Pcd to DynamicEx Pcd

User can append -D PCD_DYNAMIC_AS_DYNAMICEX to build command
to enable this function.
Also, user can add "PCD_DYNAMIC_AS_DYNAMICEX = TRUE/FALSE" to the
defines section of Dsc file to enable this function.
PCD_DYNAMIC_AS_DYNAMICEX is a new reserved key word for this function.

Signed-off-by: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yuwei Chen <yuwei.chen@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
BaseTools/Source/Python/Common/DataType.py
BaseTools/Source/Python/Workspace/BuildClassObject.py
BaseTools/Source/Python/Workspace/DecBuildData.py
BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools/Source/Python/Workspace/InfBuildData.py

index fb88f20cc4709a5362d205e100fa349639ff6de8..4e9c9e34afa74038593bc8b57c9592f00030d9a0 100644 (file)
@@ -404,6 +404,7 @@ TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES = 'SUPPORTED_ARCHITECTURES'
 TAB_DSC_DEFINES_BUILD_TARGETS = 'BUILD_TARGETS'\r
 TAB_DSC_DEFINES_SKUID_IDENTIFIER = 'SKUID_IDENTIFIER'\r
 TAB_DSC_DEFINES_PCD_INFO_GENERATION = 'PCD_INFO_GENERATION'\r
+TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX = 'PCD_DYNAMIC_AS_DYNAMICEX'\r
 TAB_DSC_DEFINES_PCD_VAR_CHECK_GENERATION = 'PCD_VAR_CHECK_GENERATION'\r
 TAB_DSC_DEFINES_FLASH_DEFINITION = 'FLASH_DEFINITION'\r
 TAB_DSC_DEFINES_BUILD_NUMBER = 'BUILD_NUMBER'\r
index ebb65fc2fe932d8b91e1fe1f852bd759ff04bf3f..88a1d1582cd838a216ce5cc5ff44337a6c7f1f62 100644 (file)
@@ -12,7 +12,9 @@ import re
 from collections import OrderedDict\r
 from Common.Misc import CopyDict,ArrayIndex\r
 import copy\r
+from CommonDataClass.DataClass import *\r
 import Common.EdkLogger as EdkLogger\r
+import Common.GlobalData as GlobalData\r
 from Common.BuildToolError import OPTION_VALUE_INVALID\r
 from Common.caching import cached_property\r
 StructPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_\[\]]*$')\r
@@ -398,6 +400,67 @@ class StructurePcd(PcdClassObject):
 \r
 LibraryClassObject = namedtuple('LibraryClassObject', ['LibraryClass','SupModList'])\r
 \r
+class BuildData(object):\r
+    # dict used to convert PCD type in database to string used by build tool\r
+\r
+    _PCD_TYPE_STRING_ = {\r
+        MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,\r
+        MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,\r
+        MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,\r
+        MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,\r
+        MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,\r
+        MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,\r
+        MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,\r
+        MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,\r
+        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,\r
+        MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,\r
+        MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,\r
+    }\r
+\r
+    def UpdatePcdTypeDict(self):\r
+        if GlobalData.gCommandLineDefines.get(TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX,"FALSE").upper() == "TRUE":\r
+            self._PCD_TYPE_STRING_ = {\r
+                MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,\r
+                MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,\r
+                MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,\r
+                MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC_EX,\r
+                MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC_EX,\r
+                MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_EX_HII,\r
+                MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_EX_VPD,\r
+                MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,\r
+                MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,\r
+                MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,\r
+                MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,\r
+            }\r
+\r
+    ## Convert the class to a string\r
+    #\r
+    #  Convert member MetaFile of the class to a string\r
+    #\r
+    #  @retval string Formatted String\r
+    #\r
+    def __str__(self):\r
+        return str(self.MetaFile)\r
+\r
+    ## Override __eq__ function\r
+    #\r
+    # Check whether ModuleBuildClassObjects are the same\r
+    #\r
+    # @retval False The two ModuleBuildClassObjects are different\r
+    # @retval True  The two ModuleBuildClassObjects are the same\r
+    #\r
+    def __eq__(self, Other):\r
+        return self.MetaFile == Other\r
+\r
+    ## Override __hash__ function\r
+    #\r
+    # Use MetaFile as key in hash table\r
+    #\r
+    # @retval string Key for hash table\r
+    #\r
+    def __hash__(self):\r
+        return hash(self.MetaFile)\r
+\r
 ## ModuleBuildClassObject\r
 #\r
 # This Class defines ModuleBuildClass\r
@@ -442,7 +505,7 @@ LibraryClassObject = namedtuple('LibraryClassObject', ['LibraryClass','SupModLis
 #                              { [BuildOptionKey] : BuildOptionValue}\r
 # @var Depex:                  To store value for Depex\r
 #\r
-class ModuleBuildClassObject(object):\r
+class ModuleBuildClassObject(BuildData):\r
     def __init__(self):\r
         self.AutoGenVersion          = 0\r
         self.MetaFile                = ''\r
@@ -476,34 +539,6 @@ class ModuleBuildClassObject(object):
         self.StrPcdSet               = []\r
         self.StrPcdOverallValue      = {}\r
 \r
-    ## Convert the class to a string\r
-    #\r
-    #  Convert member MetaFile of the class to a string\r
-    #\r
-    #  @retval string Formatted String\r
-    #\r
-    def __str__(self):\r
-        return str(self.MetaFile)\r
-\r
-    ## Override __eq__ function\r
-    #\r
-    # Check whether ModuleBuildClassObjects are the same\r
-    #\r
-    # @retval False The two ModuleBuildClassObjects are different\r
-    # @retval True  The two ModuleBuildClassObjects are the same\r
-    #\r
-    def __eq__(self, Other):\r
-        return self.MetaFile == Other\r
-\r
-    ## Override __hash__ function\r
-    #\r
-    # Use MetaFile as key in hash table\r
-    #\r
-    # @retval string Key for hash table\r
-    #\r
-    def __hash__(self):\r
-        return hash(self.MetaFile)\r
-\r
 ## PackageBuildClassObject\r
 #\r
 # This Class defines PackageBuildClass\r
@@ -527,7 +562,7 @@ class ModuleBuildClassObject(object):
 # @var Pcds:            To store value for Pcds, it is a set structure as\r
 #                       { [(PcdCName, PcdGuidCName)] : PcdClassObject}\r
 #\r
-class PackageBuildClassObject(object):\r
+class PackageBuildClassObject(BuildData):\r
     def __init__(self):\r
         self.MetaFile                = ''\r
         self.PackageName             = ''\r
@@ -541,34 +576,6 @@ class PackageBuildClassObject(object):
         self.LibraryClasses          = {}\r
         self.Pcds                    = {}\r
 \r
-    ## Convert the class to a string\r
-    #\r
-    #  Convert member MetaFile of the class to a string\r
-    #\r
-    #  @retval string Formatted String\r
-    #\r
-    def __str__(self):\r
-        return str(self.MetaFile)\r
-\r
-    ## Override __eq__ function\r
-    #\r
-    # Check whether PackageBuildClassObjects are the same\r
-    #\r
-    # @retval False The two PackageBuildClassObjects are different\r
-    # @retval True  The two PackageBuildClassObjects are the same\r
-    #\r
-    def __eq__(self, Other):\r
-        return self.MetaFile == Other\r
-\r
-    ## Override __hash__ function\r
-    #\r
-    # Use MetaFile as key in hash table\r
-    #\r
-    # @retval string Key for hash table\r
-    #\r
-    def __hash__(self):\r
-        return hash(self.MetaFile)\r
-\r
 ## PlatformBuildClassObject\r
 #\r
 # This Class defines PlatformBuildClass\r
@@ -597,7 +604,7 @@ class PackageBuildClassObject(object):
 # @var BuildOptions:      To store value for BuildOptions, it is a set structure as\r
 #                         { [BuildOptionKey] : BuildOptionValue }\r
 #\r
-class PlatformBuildClassObject(object):\r
+class PlatformBuildClassObject(BuildData):\r
     def __init__(self):\r
         self.MetaFile                = ''\r
         self.PlatformName            = ''\r
@@ -616,31 +623,3 @@ class PlatformBuildClassObject(object):
         self.Libraries               = {}\r
         self.Pcds                    = {}\r
         self.BuildOptions            = {}\r
-\r
-    ## Convert the class to a string\r
-    #\r
-    #  Convert member MetaFile of the class to a string\r
-    #\r
-    #  @retval string Formatted String\r
-    #\r
-    def __str__(self):\r
-        return str(self.MetaFile)\r
-\r
-    ## Override __eq__ function\r
-    #\r
-    # Check whether PlatformBuildClassObjects are the same\r
-    #\r
-    # @retval False The two PlatformBuildClassObjects are different\r
-    # @retval True  The two PlatformBuildClassObjects are the same\r
-    #\r
-    def __eq__(self, Other):\r
-        return self.MetaFile == Other\r
-\r
-    ## Override __hash__ function\r
-    #\r
-    # Use MetaFile as key in hash table\r
-    #\r
-    # @retval string Key for hash table\r
-    #\r
-    def __hash__(self):\r
-        return hash(self.MetaFile)\r
index 30826a3cea1fa5323808c1fa3e9ced96db209585..eeb7c490ac8ce3784136ffdcf16ced876fcfeb44 100644 (file)
@@ -21,20 +21,6 @@ from re import compile
 # into PackageBuildClassObject form for easier use for AutoGen.\r
 #\r
 class DecBuildData(PackageBuildClassObject):\r
-    # dict used to convert PCD type in database to string used by build tool\r
-    _PCD_TYPE_STRING_ = {\r
-        MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,\r
-        MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,\r
-        MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,\r
-        MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,\r
-        MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,\r
-        MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,\r
-        MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,\r
-        MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,\r
-        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,\r
-        MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,\r
-        MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,\r
-    }\r
 \r
     # dict used to convert part of [Defines] to members of DecBuildData directly\r
     _PROPERTY_ = {\r
@@ -47,7 +33,6 @@ class DecBuildData(PackageBuildClassObject):
         TAB_DEC_DEFINES_PKG_UNI_FILE                : "_PkgUniFile",\r
     }\r
 \r
-\r
     ## Constructor of DecBuildData\r
     #\r
     #  Initialize object of DecBuildData\r
@@ -68,6 +53,7 @@ class DecBuildData(PackageBuildClassObject):
         self._Target = Target\r
         self._Toolchain = Toolchain\r
         self._Clear()\r
+        self.UpdatePcdTypeDict()\r
 \r
     ## XXX[key] = value\r
     def __setitem__(self, key, value):\r
index 5f07d3e75c88cd39102b8054a579474a18d313b7..4d5b1ad4d90a1f241d1dc7e255c01e79363a9008 100644 (file)
@@ -179,20 +179,6 @@ def GetDependencyList(FileStack, SearchPathList):
     return DependencyList\r
 \r
 class DscBuildData(PlatformBuildClassObject):\r
-    # dict used to convert PCD type in database to string used by build tool\r
-    _PCD_TYPE_STRING_ = {\r
-        MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,\r
-        MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,\r
-        MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,\r
-        MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,\r
-        MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,\r
-        MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,\r
-        MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,\r
-        MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,\r
-        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,\r
-        MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,\r
-        MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,\r
-    }\r
 \r
     # dict used to convert part of [Defines] to members of DscBuildData directly\r
     _PROPERTY_ = {\r
@@ -242,7 +228,7 @@ class DscBuildData(PlatformBuildClassObject):
         self.WorkspaceDir = os.getenv("WORKSPACE") if os.getenv("WORKSPACE") else ""\r
         self.DefaultStores = None\r
         self.SkuIdMgr = SkuClass(self.SkuName, self.SkuIds)\r
-\r
+        self.UpdatePcdTypeDict()\r
     @property\r
     def OutputPath(self):\r
         if os.getenv("WORKSPACE"):\r
@@ -411,6 +397,9 @@ class DscBuildData(PlatformBuildClassObject):
                 except:\r
                     EdkLogger.error("build", FORMAT_INVALID, "Invalid GUID format for VPD_TOOL_GUID", File=self.MetaFile)\r
                 self._VpdToolGuid = Record[2]\r
+            elif Name == TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX:\r
+                if TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX not in gCommandLineDefines:\r
+                    gCommandLineDefines[TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX] = Record[2].strip()\r
             elif Name in self:\r
                 self[Name] = Record[2]\r
         # set _Header to non-None in order to avoid database re-querying\r
index 7675b0ea00ebd6a5fc3e823c965e32066f66f650..45b8ef4716dd51241469cb256d77d3cee26d27e7 100644 (file)
@@ -59,20 +59,6 @@ def _PpiValue(CName, PackageList, Inffile = None):
 # into ModuleBuildClassObject form for easier use for AutoGen.\r
 #\r
 class InfBuildData(ModuleBuildClassObject):\r
-    # dict used to convert PCD type in database to string used by build tool\r
-    _PCD_TYPE_STRING_ = {\r
-        MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,\r
-        MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,\r
-        MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,\r
-        MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,\r
-        MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,\r
-        MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,\r
-        MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,\r
-        MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,\r
-        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,\r
-        MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,\r
-        MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,\r
-    }\r
 \r
     # dict used to convert part of [Defines] to members of InfBuildData directly\r
     _PROPERTY_ = {\r
@@ -154,6 +140,7 @@ class InfBuildData(ModuleBuildClassObject):
         self._PcdComments = None\r
         self._BuildOptions = None\r
         self._DependencyFileList = None\r
+        self.UpdatePcdTypeDict()\r
         self.LibInstances = []\r
         self.ReferenceModules = set()\r
 \r