[edk2] [Patch] BaseTools: Fix the bug 'DSC DEFAULT' in report wrongly use FDF value

Yonghong Zhu posted 1 patch 6 years, 6 months ago
Failed in applying to current master (apply log)
BaseTools/Source/Python/Workspace/BuildClassObject.py |  7 +++++--
.../Source/Python/Workspace/WorkspaceDatabase.py      | 19 +++++++++----------
BaseTools/Source/Python/build/BuildReport.py          |  7 ++++---
3 files changed, 18 insertions(+), 15 deletions(-)
[edk2] [Patch] BaseTools: Fix the bug 'DSC DEFAULT' in report wrongly use FDF value
Posted by Yonghong Zhu 6 years, 6 months ago
current the PCD value in DSC file may be override by FDF file, then it
cause the 'DSC DEFAULT' in build report wrongly display the FDF value
but not the DSC file's value.
This patch add a attribute DscDefaultValue for PcdClassObject to save
the actual DSC file's PCD value and use this value to display for 'DSC
DEFAULT'.

Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
---
 BaseTools/Source/Python/Workspace/BuildClassObject.py |  7 +++++--
 .../Source/Python/Workspace/WorkspaceDatabase.py      | 19 +++++++++----------
 BaseTools/Source/Python/build/BuildReport.py          |  7 ++++---
 3 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/BaseTools/Source/Python/Workspace/BuildClassObject.py b/BaseTools/Source/Python/Workspace/BuildClassObject.py
index ea26e5e..5fa497b 100644
--- a/BaseTools/Source/Python/Workspace/BuildClassObject.py
+++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py
@@ -1,9 +1,9 @@
 ## @file
 # This file is used to define each component of the build database
 #
-# Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
 # This program and the accompanying materials
 # are licensed and made available under the terms and conditions of the BSD License
 # which accompanies this distribution.  The full text of the license may be found at
 # http://opensource.org/licenses/bsd-license.php
 #
@@ -42,11 +42,11 @@ from Common.BuildToolError import *
 # @var SkuInfoList:          To store value for SkuInfoList
 # @var IsOverrided:          To store value for IsOverrided
 # @var Phase:                To store value for Phase, default is "DXE"
 #
 class PcdClassObject(object):
-    def __init__(self, Name = None, Guid = None, Type = None, DatumType = None, Value = None, Token = None, MaxDatumSize = None, SkuInfoList = {}, IsOverrided = False, GuidValue = None, validateranges = [], validlists = [], expressions = []):
+    def __init__(self, Name = None, Guid = None, Type = None, DatumType = None, Value = None, Token = None, MaxDatumSize = None, SkuInfoList = {}, IsOverrided = False, GuidValue = None, validateranges = [], validlists = [], expressions = [], IsDsc = False):
         self.TokenCName = Name
         self.TokenSpaceGuidCName = Guid
         self.TokenSpaceGuidValue = GuidValue
         self.Type = Type
         self.DatumType = DatumType
@@ -60,10 +60,13 @@ class PcdClassObject(object):
         self.IsFromBinaryInf = False
         self.IsFromDsc = False
         self.validateranges = validateranges
         self.validlists = validlists
         self.expressions = expressions
+        self.DscDefaultValue = None
+        if IsDsc:
+            self.DscDefaultValue = Value
         
     ## Convert the class to a string
     #
     #  Convert each member of the class to string
     #  Organize to a signle line format string
diff --git a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
index b617221..2c4b973 100644
--- a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
+++ b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
@@ -883,12 +883,12 @@ class DscBuildData(PlatformBuildClassObject):
                                                 PcdValue,
                                                 '',
                                                 MaxDatumSize,
                                                 {},
                                                 False,
-                                                None
-                                                )
+                                                None,
+                                                IsDsc=True)
         return Pcds
 
     ## Retrieve dynamic PCD settings
     #
     #   @param  Type    PCD type
@@ -948,13 +948,13 @@ class DscBuildData(PlatformBuildClassObject):
                                                     PcdValue,
                                                     '',
                                                     MaxDatumSize,
                                                     {SkuName : SkuInfo},
                                                     False,
-                                                    None
-                                                    )
-        
+                                                    None,
+                                                    IsDsc=True)
+
         for pcd in Pcds.values():
             pcdDecObject = self._DecPcds[pcd.TokenCName,pcd.TokenSpaceGuidCName]
             if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys():                
                 valuefromDec = pcdDecObject.DefaultValue
                 SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '', '', '', valuefromDec)
@@ -1067,13 +1067,12 @@ class DscBuildData(PlatformBuildClassObject):
                                                 {SkuName : SkuInfo},
                                                 False,
                                                 None,
                                                 pcdDecObject.validateranges,
                                                 pcdDecObject.validlists,
-                                                pcdDecObject.expressions
-                                                )
-                
+                                                pcdDecObject.expressions,
+                                                IsDsc=True)
 
         for pcd in Pcds.values():
             SkuInfoObj = pcd.SkuInfoList.values()[0]
             pcdDecObject = self._DecPcds[pcd.TokenCName,pcd.TokenSpaceGuidCName]
             # Only fix the value while no value provided in DSC file.
@@ -1177,12 +1176,12 @@ class DscBuildData(PlatformBuildClassObject):
                                                 InitialValue,
                                                 '',
                                                 MaxDatumSize,
                                                 {SkuName : SkuInfo},
                                                 False,
-                                                None
-                                                )
+                                                None,
+                                                IsDsc=True)
         for pcd in Pcds.values():
             SkuInfoObj = pcd.SkuInfoList.values()[0]
             pcdDecObject = self._DecPcds[pcd.TokenCName,pcd.TokenSpaceGuidCName]
             if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys():
                 valuefromDec = pcdDecObject.DefaultValue
diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py
index f0e9093..6a4d7e0 100644
--- a/BaseTools/Source/Python/build/BuildReport.py
+++ b/BaseTools/Source/Python/build/BuildReport.py
@@ -831,11 +831,11 @@ class PcdReport(object):
         #
         self.DscPcdDefault = {}
         for Arch in Wa.ArchList:
             Platform = Wa.BuildDatabase[Wa.MetaFile, Arch, Wa.BuildTarget, Wa.ToolChain]
             for (TokenCName, TokenSpaceGuidCName) in Platform.Pcds:
-                DscDefaultValue = Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DefaultValue
+                DscDefaultValue = Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DscDefaultValue
                 if DscDefaultValue:
                     self.DscPcdDefault[(TokenCName, TokenSpaceGuidCName)] = DscDefaultValue
 
     def GenerateReport(self, File, ModulePcdSet):
         if self.ConditionalPcds:
@@ -912,10 +912,11 @@ class PcdReport(object):
                     #
                     # Get PCD default value and their override relationship
                     #
                     DecDefaultValue = self.DecPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType))
                     DscDefaultValue = self.DscPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName))
+                    DscDefaultValBak= DscDefaultValue
                     DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, Key), DscDefaultValue)
                     InfDefaultValue = None
                     
                     PcdValue = DecDefaultValue
                     if DscDefaultValue:
@@ -998,12 +999,12 @@ class PcdReport(object):
                             if TypeName in ('DYNHII', 'DEXHII'):
                                 FileWrite(File, '%*s: %s: %s' % (self.MaxLen + 4, SkuInfo.VariableGuid, SkuInfo.VariableName, SkuInfo.VariableOffset))
                             else:
                                 FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))
                                
-                    if not DscMatch and DscDefaultValue != None:
-                        FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', DscDefaultValue.strip()))
+                    if not DscMatch and DscDefaultValBak != None:
+                        FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', DscDefaultValBak.strip()))
 
                     if not InfMatch and InfDefaultValue != None:
                         FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', InfDefaultValue.strip()))
 
                     if not DecMatch and DecDefaultValue != None:
-- 
2.6.1.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [Patch] BaseTools: Fix the bug 'DSC DEFAULT' in report wrongly use FDF value
Posted by Gao, Liming 6 years, 6 months ago
Reviewed-by: Liming Gao <liming.gao@intel.com>

>-----Original Message-----
>From: Zhu, Yonghong
>Sent: Monday, October 09, 2017 9:37 PM
>To: edk2-devel@lists.01.org
>Cc: Gao, Liming <liming.gao@intel.com>
>Subject: [Patch] BaseTools: Fix the bug 'DSC DEFAULT' in report wrongly use
>FDF value
>
>current the PCD value in DSC file may be override by FDF file, then it
>cause the 'DSC DEFAULT' in build report wrongly display the FDF value
>but not the DSC file's value.
>This patch add a attribute DscDefaultValue for PcdClassObject to save
>the actual DSC file's PCD value and use this value to display for 'DSC
>DEFAULT'.
>
>Cc: Liming Gao <liming.gao@intel.com>
>Contributed-under: TianoCore Contribution Agreement 1.1
>Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
>---
> BaseTools/Source/Python/Workspace/BuildClassObject.py |  7 +++++--
> .../Source/Python/Workspace/WorkspaceDatabase.py      | 19 +++++++++----
>------
> BaseTools/Source/Python/build/BuildReport.py          |  7 ++++---
> 3 files changed, 18 insertions(+), 15 deletions(-)
>
>diff --git a/BaseTools/Source/Python/Workspace/BuildClassObject.py
>b/BaseTools/Source/Python/Workspace/BuildClassObject.py
>index ea26e5e..5fa497b 100644
>--- a/BaseTools/Source/Python/Workspace/BuildClassObject.py
>+++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py
>@@ -1,9 +1,9 @@
> ## @file
> # This file is used to define each component of the build database
> #
>-# Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
> # This program and the accompanying materials
> # are licensed and made available under the terms and conditions of the BSD
>License
> # which accompanies this distribution.  The full text of the license may be
>found at
> # http://opensource.org/licenses/bsd-license.php
> #
>@@ -42,11 +42,11 @@ from Common.BuildToolError import *
> # @var SkuInfoList:          To store value for SkuInfoList
> # @var IsOverrided:          To store value for IsOverrided
> # @var Phase:                To store value for Phase, default is "DXE"
> #
> class PcdClassObject(object):
>-    def __init__(self, Name = None, Guid = None, Type = None, DatumType =
>None, Value = None, Token = None, MaxDatumSize = None, SkuInfoList = {},
>IsOverrided = False, GuidValue = None, validateranges = [], validlists = [],
>expressions = []):
>+    def __init__(self, Name = None, Guid = None, Type = None, DatumType =
>None, Value = None, Token = None, MaxDatumSize = None, SkuInfoList = {},
>IsOverrided = False, GuidValue = None, validateranges = [], validlists = [],
>expressions = [], IsDsc = False):
>         self.TokenCName = Name
>         self.TokenSpaceGuidCName = Guid
>         self.TokenSpaceGuidValue = GuidValue
>         self.Type = Type
>         self.DatumType = DatumType
>@@ -60,10 +60,13 @@ class PcdClassObject(object):
>         self.IsFromBinaryInf = False
>         self.IsFromDsc = False
>         self.validateranges = validateranges
>         self.validlists = validlists
>         self.expressions = expressions
>+        self.DscDefaultValue = None
>+        if IsDsc:
>+            self.DscDefaultValue = Value
>
>     ## Convert the class to a string
>     #
>     #  Convert each member of the class to string
>     #  Organize to a signle line format string
>diff --git a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
>b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
>index b617221..2c4b973 100644
>--- a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
>+++ b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
>@@ -883,12 +883,12 @@ class DscBuildData(PlatformBuildClassObject):
>                                                 PcdValue,
>                                                 '',
>                                                 MaxDatumSize,
>                                                 {},
>                                                 False,
>-                                                None
>-                                                )
>+                                                None,
>+                                                IsDsc=True)
>         return Pcds
>
>     ## Retrieve dynamic PCD settings
>     #
>     #   @param  Type    PCD type
>@@ -948,13 +948,13 @@ class DscBuildData(PlatformBuildClassObject):
>                                                     PcdValue,
>                                                     '',
>                                                     MaxDatumSize,
>                                                     {SkuName : SkuInfo},
>                                                     False,
>-                                                    None
>-                                                    )
>-
>+                                                    None,
>+                                                    IsDsc=True)
>+
>         for pcd in Pcds.values():
>             pcdDecObject =
>self._DecPcds[pcd.TokenCName,pcd.TokenSpaceGuidCName]
>             if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in
>pcd.SkuInfoList.keys():
>                 valuefromDec = pcdDecObject.DefaultValue
>                 SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '', '', '', valuefromDec)
>@@ -1067,13 +1067,12 @@ class DscBuildData(PlatformBuildClassObject):
>                                                 {SkuName : SkuInfo},
>                                                 False,
>                                                 None,
>                                                 pcdDecObject.validateranges,
>                                                 pcdDecObject.validlists,
>-                                                pcdDecObject.expressions
>-                                                )
>-
>+                                                pcdDecObject.expressions,
>+                                                IsDsc=True)
>
>         for pcd in Pcds.values():
>             SkuInfoObj = pcd.SkuInfoList.values()[0]
>             pcdDecObject =
>self._DecPcds[pcd.TokenCName,pcd.TokenSpaceGuidCName]
>             # Only fix the value while no value provided in DSC file.
>@@ -1177,12 +1176,12 @@ class DscBuildData(PlatformBuildClassObject):
>                                                 InitialValue,
>                                                 '',
>                                                 MaxDatumSize,
>                                                 {SkuName : SkuInfo},
>                                                 False,
>-                                                None
>-                                                )
>+                                                None,
>+                                                IsDsc=True)
>         for pcd in Pcds.values():
>             SkuInfoObj = pcd.SkuInfoList.values()[0]
>             pcdDecObject =
>self._DecPcds[pcd.TokenCName,pcd.TokenSpaceGuidCName]
>             if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in
>pcd.SkuInfoList.keys():
>                 valuefromDec = pcdDecObject.DefaultValue
>diff --git a/BaseTools/Source/Python/build/BuildReport.py
>b/BaseTools/Source/Python/build/BuildReport.py
>index f0e9093..6a4d7e0 100644
>--- a/BaseTools/Source/Python/build/BuildReport.py
>+++ b/BaseTools/Source/Python/build/BuildReport.py
>@@ -831,11 +831,11 @@ class PcdReport(object):
>         #
>         self.DscPcdDefault = {}
>         for Arch in Wa.ArchList:
>             Platform = Wa.BuildDatabase[Wa.MetaFile, Arch, Wa.BuildTarget,
>Wa.ToolChain]
>             for (TokenCName, TokenSpaceGuidCName) in Platform.Pcds:
>-                DscDefaultValue = Platform.Pcds[(TokenCName,
>TokenSpaceGuidCName)].DefaultValue
>+                DscDefaultValue = Platform.Pcds[(TokenCName,
>TokenSpaceGuidCName)].DscDefaultValue
>                 if DscDefaultValue:
>                     self.DscPcdDefault[(TokenCName, TokenSpaceGuidCName)] =
>DscDefaultValue
>
>     def GenerateReport(self, File, ModulePcdSet):
>         if self.ConditionalPcds:
>@@ -912,10 +912,11 @@ class PcdReport(object):
>                     #
>                     # Get PCD default value and their override relationship
>                     #
>                     DecDefaultValue = self.DecPcdDefault.get((Pcd.TokenCName,
>Pcd.TokenSpaceGuidCName, DecType))
>                     DscDefaultValue = self.DscPcdDefault.get((Pcd.TokenCName,
>Pcd.TokenSpaceGuidCName))
>+                    DscDefaultValBak= DscDefaultValue
>                     DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, Key),
>DscDefaultValue)
>                     InfDefaultValue = None
>
>                     PcdValue = DecDefaultValue
>                     if DscDefaultValue:
>@@ -998,12 +999,12 @@ class PcdReport(object):
>                             if TypeName in ('DYNHII', 'DEXHII'):
>                                 FileWrite(File, '%*s: %s: %s' % (self.MaxLen + 4,
>SkuInfo.VariableGuid, SkuInfo.VariableName, SkuInfo.VariableOffset))
>                             else:
>                                 FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))
>
>-                    if not DscMatch and DscDefaultValue != None:
>-                        FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT',
>DscDefaultValue.strip()))
>+                    if not DscMatch and DscDefaultValBak != None:
>+                        FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT',
>DscDefaultValBak.strip()))
>
>                     if not InfMatch and InfDefaultValue != None:
>                         FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT',
>InfDefaultValue.strip()))
>
>                     if not DecMatch and DecDefaultValue != None:
>--
>2.6.1.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel