]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/AutoGen.py
UefiCpuPkg/CpuCommonFeaturesLib: Add check for input parameter.
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / AutoGen.py
index e05bf479ff837d13916b22a86caed8a08a86ca0f..6bbfc8774fedf0c27fd98d434d5d44f7c3b19731 100644 (file)
@@ -143,6 +143,8 @@ ${END}
 \r
 ${depexsection_item}\r
 \r
+${userextension_tianocore_item}\r
+\r
 ${tail_comments}\r
 \r
 [BuildOptions.${module_arch}]\r
@@ -2333,8 +2335,18 @@ class PlatformAutoGen(AutoGen):
         if Module in self.Platform.Modules:\r
             PlatformModule = self.Platform.Modules[str(Module)]\r
             for Key  in PlatformModule.Pcds:\r
+                Flag = False\r
                 if Key in Pcds:\r
-                    self._OverridePcd(Pcds[Key], PlatformModule.Pcds[Key], Module)\r
+                    ToPcd = Pcds[Key]\r
+                    Flag = True\r
+                elif Key in GlobalData.MixedPcd:\r
+                    for PcdItem in GlobalData.MixedPcd[Key]:\r
+                        if PcdItem in Pcds:\r
+                            ToPcd = Pcds[PcdItem]\r
+                            Flag = True\r
+                            break\r
+                if Flag:\r
+                    self._OverridePcd(ToPcd, PlatformModule.Pcds[Key], Module)\r
         return Pcds.values()\r
 \r
     ## Resolve library names to library modules\r
@@ -2683,6 +2695,7 @@ class ModuleAutoGen(AutoGen):
 \r
         self.BuildDatabase = self.Workspace.BuildDatabase\r
         self.BuildRuleOrder = None\r
+        self.BuildTime      = 0\r
 \r
         self._Module          = None\r
         self._Name            = None\r
@@ -3088,6 +3101,30 @@ class ModuleAutoGen(AutoGen):
                 self._DepexExpressionList[ModuleType] = DepexExpressionList\r
         return self._DepexExpressionList\r
 \r
+    # Get the tiano core user extension, it is contain dependent library.\r
+    # @retval: a list contain tiano core userextension.\r
+    #\r
+    def _GetTianoCoreUserExtensionList(self):\r
+        TianoCoreUserExtentionList = []\r
+        for M in [self.Module] + self.DependentLibraryList:\r
+            Filename = M.MetaFile.Path\r
+            InfObj = InfSectionParser.InfSectionParser(Filename)\r
+            TianoCoreUserExtenList = InfObj.GetUserExtensionTianoCore()\r
+            for TianoCoreUserExtent in TianoCoreUserExtenList:\r
+                for Section in TianoCoreUserExtent.keys():\r
+                    ItemList = Section.split(TAB_SPLIT)\r
+                    Arch = self.Arch\r
+                    if len(ItemList) == 4:\r
+                        Arch = ItemList[3]\r
+                    if Arch.upper() == TAB_ARCH_COMMON or Arch.upper() == self.Arch.upper():\r
+                        TianoCoreList = []\r
+                        TianoCoreList.extend([TAB_SECTION_START + Section + TAB_SECTION_END])\r
+                        TianoCoreList.extend(TianoCoreUserExtent[Section][:])\r
+                        TianoCoreList.append('\n')\r
+                        TianoCoreUserExtentionList.append(TianoCoreList)\r
+\r
+        return TianoCoreUserExtentionList\r
+\r
     ## Return the list of specification version required for the module\r
     #\r
     #   @retval     list    The list of specification defined in module file\r
@@ -4059,6 +4096,16 @@ class ModuleAutoGen(AutoGen):
         for Library in self.LibraryAutoGenList:\r
             AsBuiltInfDict['libraryclasses_item'] += [Library.MetaFile.File.replace('\\', '/')]\r
         \r
+        # Generated UserExtensions TianoCore section.\r
+        # All tianocore user extensions are copied.\r
+        UserExtStr = ''\r
+        for TianoCore in self._GetTianoCoreUserExtensionList():\r
+            UserExtStr += '\n'.join(TianoCore)\r
+            ExtensionFile = os.path.join(self.MetaFile.Dir, TianoCore[1])\r
+            if os.path.isfile(ExtensionFile):\r
+                shutil.copy2(ExtensionFile, self.OutputDir)\r
+        AsBuiltInfDict['userextension_tianocore_item'] = UserExtStr\r
+\r
         # Generated depex expression section in comments.\r
         AsBuiltInfDict['depexsection_item'] = ''\r
         DepexExpresion = self._GetDepexExpresionString()\r