public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [Patch] BaseTools: Fix the bug 'DSC DEFAULT' in report wrongly use FDF value
@ 2017-10-09 13:37 Yonghong Zhu
  2017-10-11  4:48 ` Gao, Liming
  0 siblings, 1 reply; 3+ messages in thread
From: Yonghong Zhu @ 2017-10-09 13:37 UTC (permalink / raw)
  To: edk2-devel; +Cc: Liming Gao

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



^ permalink raw reply related	[flat|nested] 3+ messages in thread
* [Patch] BaseTools: Fix the bug 'DSC DEFAULT' in report wrongly use FDF value
@ 2017-10-09 13:41 Yonghong Zhu
  0 siblings, 0 replies; 3+ messages in thread
From: Yonghong Zhu @ 2017-10-09 13:41 UTC (permalink / raw)
  To: edk2-devel; +Cc: Liming Gao

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



^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-10-11  4:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-09 13:37 [Patch] BaseTools: Fix the bug 'DSC DEFAULT' in report wrongly use FDF value Yonghong Zhu
2017-10-11  4:48 ` Gao, Liming
  -- strict thread matches above, loose matches on Subject: below --
2017-10-09 13:41 Yonghong Zhu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox