]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools: Enable component override functionality
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / DscBuildData.py
index ff41af13723435753a9e4764acd95878d8eef0d3..93751678f95d0661d6c339850a99a371ede8c66d 100644 (file)
@@ -706,18 +706,30 @@ class DscBuildData(PlatformBuildClassObject):
             GlobalData.gDefaultStores = sorted(self.DefaultStores.keys())\r
         return self.DefaultStores\r
 \r
+    def OverrideDuplicateModule(self):\r
+        RecordList = self._RawData[MODEL_META_DATA_COMPONENT, self._Arch]\r
+        Macros = self._Macros\r
+        Macros["EDK_SOURCE"] = GlobalData.gEcpSource\r
+        Components = {}\r
+        for Record in RecordList:\r
+            ModuleId = Record[6]\r
+            file_guid = self._RawData[MODEL_META_DATA_HEADER, self._Arch, None, ModuleId]\r
+            file_guid_str = file_guid[0][2] if file_guid else "NULL"\r
+            ModuleFile = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch)\r
+            if self._Arch != TAB_ARCH_COMMON and (file_guid_str,str(ModuleFile)) in Components:\r
+                self._RawData.DisableOverrideComponent(Components[(file_guid_str,str(ModuleFile))])\r
+            Components[(file_guid_str,str(ModuleFile))] = ModuleId\r
+        self._RawData._PostProcessed = False\r
     ## Retrieve [Components] section information\r
     @property\r
     def Modules(self):\r
         if self._Modules is not None:\r
             return self._Modules\r
-\r
+        self.OverrideDuplicateModule()\r
         self._Modules = OrderedDict()\r
         RecordList = self._RawData[MODEL_META_DATA_COMPONENT, self._Arch]\r
         Macros = self._Macros\r
         for Record in RecordList:\r
-            DuplicatedFile = False\r
-\r
             ModuleFile = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch)\r
             ModuleId = Record[6]\r
             LineNo = Record[7]\r
@@ -727,10 +739,6 @@ class DscBuildData(PlatformBuildClassObject):
             if ErrorCode != 0:\r
                 EdkLogger.error('build', ErrorCode, File=self.MetaFile, Line=LineNo,\r
                                 ExtraData=ErrorInfo)\r
-            # Check duplication\r
-            # If arch is COMMON, no duplicate module is checked since all modules in all component sections are selected\r
-            if self._Arch != TAB_ARCH_COMMON and ModuleFile in self._Modules:\r
-                DuplicatedFile = True\r
 \r
             Module = ModuleBuildClassObject()\r
             Module.MetaFile = ModuleFile\r
@@ -793,8 +801,6 @@ class DscBuildData(PlatformBuildClassObject):
                     Module.BuildOptions[ToolChainFamily, ToolChain] = OptionString + " " + Option\r
 \r
             RecordList = self._RawData[MODEL_META_DATA_HEADER, self._Arch, None, ModuleId]\r
-            if DuplicatedFile and not RecordList:\r
-                EdkLogger.error('build', FILE_DUPLICATED, File=self.MetaFile, ExtraData=str(ModuleFile), Line=LineNo)\r
             if RecordList:\r
                 if len(RecordList) != 1:\r
                     EdkLogger.error('build', OPTION_UNKNOWN, 'Only FILE_GUID can be listed in <Defines> section.',\r