Re: [edk2] [Patch] BaseTools: Fixed Pcd from command line issue.

2018-03-08 Thread Gao, Liming
Reviewed-by: Liming Gao <liming@intel.com>

>-Original Message-
>From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
>BobCF
>Sent: Thursday, March 08, 2018 1:56 PM
>To: edk2-devel@lists.01.org
>Cc: Gao, Liming <liming@intel.com>
>Subject: [edk2] [Patch] BaseTools: Fixed Pcd from command line issue.
>
>Save the pcd command line value in Pcd object
>
>Contributed-under: TianoCore Contribution Agreement 1.1
>Signed-off-by: Bob Feng <bob.c.f...@intel.com>
>Cc: Liming Gao <liming@intel.com>
>---
> BaseTools/Source/Python/AutoGen/GenC.py| 15 +++
> BaseTools/Source/Python/AutoGen/GenMake.py | 28 +++---
>-
> .../Source/Python/Workspace/BuildClassObject.py|  4 +--
> BaseTools/Source/Python/Workspace/DscBuildData.py  | 31 +++---
>
> 4 files changed, 31 insertions(+), 47 deletions(-)
>
>diff --git a/BaseTools/Source/Python/AutoGen/GenC.py
>b/BaseTools/Source/Python/AutoGen/GenC.py
>index 3e98506cc8..481c4dda14 100644
>--- a/BaseTools/Source/Python/AutoGen/GenC.py
>+++ b/BaseTools/Source/Python/AutoGen/GenC.py
>@@ -914,15 +914,12 @@ def CreateModulePcdCode(Info, AutoGenC,
>AutoGenH, Pcd):
> PcdTokenName = '_PCD_TOKEN_' + TokenCName
> PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'
> PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName
> FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName
>
>-if GlobalData.BuildOptionPcd:
>-for PcdItem in GlobalData.BuildOptionPcd:
>-if (Pcd.TokenSpaceGuidCName, TokenCName) == (PcdItem[0],
>PcdItem[1]):
>-Pcd.DefaultValue = PcdItem[2]
>-break
>+if Pcd.PcdValueFromComm:
>+Pcd.DefaultValue = Pcd.PcdValueFromComm
>
> if Pcd.Type in gDynamicExPcd:
> TokenNumber = int(Pcd.TokenValue, 0)
> # Add TokenSpaceGuidValue value to PcdTokenName to discriminate the
>DynamicEx PCDs with
> # different Guids but same TokenCName
>@@ -1213,16 +1210,12 @@ def CreateLibraryPcdCode(Info, AutoGenC,
>AutoGenH, Pcd):
> PcdTokenName = '_PCD_TOKEN_' + TokenCName
> FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName
> PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'
> PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName
>
>-if GlobalData.BuildOptionPcd:
>-for PcdItem in GlobalData.BuildOptionPcd:
>-if (Pcd.TokenSpaceGuidCName, TokenCName) == (PcdItem[0],
>PcdItem[1]):
>-Pcd.DefaultValue = PcdItem[2]
>-break
>-
>+if Pcd.PcdValueFromComm:
>+Pcd.DefaultValue = Pcd.PcdValueFromComm
> #
> # Write PCDs
> #
> if Pcd.Type in gDynamicExPcd:
> TokenNumber = int(Pcd.TokenValue, 0)
>diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py
>b/BaseTools/Source/Python/AutoGen/GenMake.py
>index 1b0cf17e25..60bd625cd2 100644
>--- a/BaseTools/Source/Python/AutoGen/GenMake.py
>+++ b/BaseTools/Source/Python/AutoGen/GenMake.py
>@@ -1549,29 +1549,19 @@ class TopLevelMakefile(BuildFile):
> if GlobalData.gEnableGenfdsMultiThread:
> ExtraOption += " --genfds-multi-thread"
> if GlobalData.gIgnoreSource:
> ExtraOption += " --ignore-sources"
>
>-for index, option in enumerate(GlobalData.gCommand):
>-if "--pcd" == option and GlobalData.gCommand[index+1]:
>-pcdName, pcdValue = GlobalData.gCommand[index+1].split('=')
>-for Item in GlobalData.BuildOptionPcd:
>-if '.'.join(Item[0:2]) == pcdName:
>-pcdValue = Item[2]
>-if pcdValue.startswith('L') or 
>pcdValue.startswith('"'):
>-pcdValue, Size = ParseFieldValue(pcdValue)
>-NewVal = '{'
>-for S in range(Size):
>-NewVal = NewVal + '0x%02X' % ((pcdValue >> S 
>* 8) & 0xff)
>-NewVal += ','
>-pcdValue =  NewVal[:-1] + '}'
>-break
>-if pcdValue.startswith('{'):
>-pcdValue = 'H' + '"' + pcdValue + '"'
>-ExtraOption += " --pcd " + pcdName + '=' + pcdValue
>-else:
>-ExtraOption += " --pcd " + GlobalData.gCommand[index+1]
>+for pcd in GlobalData.BuildOptionPcd:
>+if pcd[2]:
>+pcdname = '.'.join(pcd[0:3])
>+else:
>+pcdname = '.'.j

[edk2] [Patch] BaseTools: Fixed Pcd from command line issue.

2018-03-07 Thread BobCF
Save the pcd command line value in Pcd object

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Bob Feng 
Cc: Liming Gao 
---
 BaseTools/Source/Python/AutoGen/GenC.py| 15 +++
 BaseTools/Source/Python/AutoGen/GenMake.py | 28 +++
 .../Source/Python/Workspace/BuildClassObject.py|  4 +--
 BaseTools/Source/Python/Workspace/DscBuildData.py  | 31 +++---
 4 files changed, 31 insertions(+), 47 deletions(-)

diff --git a/BaseTools/Source/Python/AutoGen/GenC.py 
b/BaseTools/Source/Python/AutoGen/GenC.py
index 3e98506cc8..481c4dda14 100644
--- a/BaseTools/Source/Python/AutoGen/GenC.py
+++ b/BaseTools/Source/Python/AutoGen/GenC.py
@@ -914,15 +914,12 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd):
 PcdTokenName = '_PCD_TOKEN_' + TokenCName
 PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'
 PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName
 FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName
 
-if GlobalData.BuildOptionPcd:
-for PcdItem in GlobalData.BuildOptionPcd:
-if (Pcd.TokenSpaceGuidCName, TokenCName) == (PcdItem[0], 
PcdItem[1]):
-Pcd.DefaultValue = PcdItem[2]
-break
+if Pcd.PcdValueFromComm:
+Pcd.DefaultValue = Pcd.PcdValueFromComm
 
 if Pcd.Type in gDynamicExPcd:
 TokenNumber = int(Pcd.TokenValue, 0)
 # Add TokenSpaceGuidValue value to PcdTokenName to discriminate the 
DynamicEx PCDs with 
 # different Guids but same TokenCName
@@ -1213,16 +1210,12 @@ def CreateLibraryPcdCode(Info, AutoGenC, AutoGenH, Pcd):
 PcdTokenName = '_PCD_TOKEN_' + TokenCName
 FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName
 PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'
 PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName
 
-if GlobalData.BuildOptionPcd:
-for PcdItem in GlobalData.BuildOptionPcd:
-if (Pcd.TokenSpaceGuidCName, TokenCName) == (PcdItem[0], 
PcdItem[1]):
-Pcd.DefaultValue = PcdItem[2]
-break
-
+if Pcd.PcdValueFromComm:
+Pcd.DefaultValue = Pcd.PcdValueFromComm
 #
 # Write PCDs
 #
 if Pcd.Type in gDynamicExPcd:
 TokenNumber = int(Pcd.TokenValue, 0)
diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py 
b/BaseTools/Source/Python/AutoGen/GenMake.py
index 1b0cf17e25..60bd625cd2 100644
--- a/BaseTools/Source/Python/AutoGen/GenMake.py
+++ b/BaseTools/Source/Python/AutoGen/GenMake.py
@@ -1549,29 +1549,19 @@ class TopLevelMakefile(BuildFile):
 if GlobalData.gEnableGenfdsMultiThread:
 ExtraOption += " --genfds-multi-thread"
 if GlobalData.gIgnoreSource:
 ExtraOption += " --ignore-sources"
 
-for index, option in enumerate(GlobalData.gCommand):
-if "--pcd" == option and GlobalData.gCommand[index+1]:
-pcdName, pcdValue = GlobalData.gCommand[index+1].split('=')
-for Item in GlobalData.BuildOptionPcd:
-if '.'.join(Item[0:2]) == pcdName:
-pcdValue = Item[2]
-if pcdValue.startswith('L') or 
pcdValue.startswith('"'):
-pcdValue, Size = ParseFieldValue(pcdValue)
-NewVal = '{'
-for S in range(Size):
-NewVal = NewVal + '0x%02X' % ((pcdValue >> S * 
8) & 0xff)
-NewVal += ','
-pcdValue =  NewVal[:-1] + '}'
-break
-if pcdValue.startswith('{'):
-pcdValue = 'H' + '"' + pcdValue + '"'
-ExtraOption += " --pcd " + pcdName + '=' + pcdValue
-else:
-ExtraOption += " --pcd " + GlobalData.gCommand[index+1]
+for pcd in GlobalData.BuildOptionPcd:
+if pcd[2]:
+pcdname = '.'.join(pcd[0:3])
+else:
+pcdname = '.'.join(pcd[0:2])
+if pcd[3].startswith('{'):
+ExtraOption += " --pcd " + pcdname + '=' + 'H' + '"' + pcd[3] 
+ '"'
+else:
+ExtraOption += " --pcd " + pcdname + '=' + pcd[3]
 
 MakefileName = self._FILE_NAME_[self._FileType]
 SubBuildCommandList = []
 for A in PlatformInfo.ArchList:
 Command = self._MAKE_TEMPLATE_[self._FileType] % 
{"file":os.path.join("$(BUILD_DIR)", A, MakefileName)}
diff --git a/BaseTools/Source/Python/Workspace/BuildClassObject.py 
b/BaseTools/Source/Python/Workspace/BuildClassObject.py
index 711ba492ef..1352fa21c8 100644
--- a/BaseTools/Source/Python/Workspace/BuildClassObject.py
+++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py
@@ -66,10 +66,11 @@ class PcdClassObject(object):
 self.expressions = 

[edk2] [Patch] BaseTools: Fixed Pcd from command line issue.

2018-03-07 Thread BobCF
Save the pcd command line value in Pcd object

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Bob Feng 
Cc: Liming Gao 
---
 BaseTools/Source/Python/AutoGen/GenC.py| 15 +++
 BaseTools/Source/Python/AutoGen/GenMake.py | 25 +
 .../Source/Python/Workspace/BuildClassObject.py|  4 +--
 BaseTools/Source/Python/Workspace/DscBuildData.py  | 31 +++---
 4 files changed, 28 insertions(+), 47 deletions(-)

diff --git a/BaseTools/Source/Python/AutoGen/GenC.py 
b/BaseTools/Source/Python/AutoGen/GenC.py
index 3e98506cc8..481c4dda14 100644
--- a/BaseTools/Source/Python/AutoGen/GenC.py
+++ b/BaseTools/Source/Python/AutoGen/GenC.py
@@ -914,15 +914,12 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd):
 PcdTokenName = '_PCD_TOKEN_' + TokenCName
 PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'
 PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName
 FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName
 
-if GlobalData.BuildOptionPcd:
-for PcdItem in GlobalData.BuildOptionPcd:
-if (Pcd.TokenSpaceGuidCName, TokenCName) == (PcdItem[0], 
PcdItem[1]):
-Pcd.DefaultValue = PcdItem[2]
-break
+if Pcd.PcdValueFromComm:
+Pcd.DefaultValue = Pcd.PcdValueFromComm
 
 if Pcd.Type in gDynamicExPcd:
 TokenNumber = int(Pcd.TokenValue, 0)
 # Add TokenSpaceGuidValue value to PcdTokenName to discriminate the 
DynamicEx PCDs with 
 # different Guids but same TokenCName
@@ -1213,16 +1210,12 @@ def CreateLibraryPcdCode(Info, AutoGenC, AutoGenH, Pcd):
 PcdTokenName = '_PCD_TOKEN_' + TokenCName
 FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName
 PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'
 PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName
 
-if GlobalData.BuildOptionPcd:
-for PcdItem in GlobalData.BuildOptionPcd:
-if (Pcd.TokenSpaceGuidCName, TokenCName) == (PcdItem[0], 
PcdItem[1]):
-Pcd.DefaultValue = PcdItem[2]
-break
-
+if Pcd.PcdValueFromComm:
+Pcd.DefaultValue = Pcd.PcdValueFromComm
 #
 # Write PCDs
 #
 if Pcd.Type in gDynamicExPcd:
 TokenNumber = int(Pcd.TokenValue, 0)
diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py 
b/BaseTools/Source/Python/AutoGen/GenMake.py
index 1b0cf17e25..0a3cc32155 100644
--- a/BaseTools/Source/Python/AutoGen/GenMake.py
+++ b/BaseTools/Source/Python/AutoGen/GenMake.py
@@ -1549,29 +1549,16 @@ class TopLevelMakefile(BuildFile):
 if GlobalData.gEnableGenfdsMultiThread:
 ExtraOption += " --genfds-multi-thread"
 if GlobalData.gIgnoreSource:
 ExtraOption += " --ignore-sources"
 
-for index, option in enumerate(GlobalData.gCommand):
-if "--pcd" == option and GlobalData.gCommand[index+1]:
-pcdName, pcdValue = GlobalData.gCommand[index+1].split('=')
-for Item in GlobalData.BuildOptionPcd:
-if '.'.join(Item[0:2]) == pcdName:
-pcdValue = Item[2]
-if pcdValue.startswith('L') or 
pcdValue.startswith('"'):
-pcdValue, Size = ParseFieldValue(pcdValue)
-NewVal = '{'
-for S in range(Size):
-NewVal = NewVal + '0x%02X' % ((pcdValue >> S * 
8) & 0xff)
-NewVal += ','
-pcdValue =  NewVal[:-1] + '}'
-break
-if pcdValue.startswith('{'):
-pcdValue = 'H' + '"' + pcdValue + '"'
-ExtraOption += " --pcd " + pcdName + '=' + pcdValue
-else:
-ExtraOption += " --pcd " + GlobalData.gCommand[index+1]
+for pcd in GlobalData.BuildOptionPcd:
+if pcd[2]:
+pcdname = '.'.join(pcd[0:3])
+else:
+pcdname = '.'.join(pcd[0:2])
+ExtraOption += " --pcd " + pcdname + '=' + pcd[3]
 
 MakefileName = self._FILE_NAME_[self._FileType]
 SubBuildCommandList = []
 for A in PlatformInfo.ArchList:
 Command = self._MAKE_TEMPLATE_[self._FileType] % 
{"file":os.path.join("$(BUILD_DIR)", A, MakefileName)}
diff --git a/BaseTools/Source/Python/Workspace/BuildClassObject.py 
b/BaseTools/Source/Python/Workspace/BuildClassObject.py
index 711ba492ef..1352fa21c8 100644
--- a/BaseTools/Source/Python/Workspace/BuildClassObject.py
+++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py
@@ -66,10 +66,11 @@ class PcdClassObject(object):
 self.expressions = expressions
 self.DscDefaultValue = None
 self.DscRawValue = None
 if IsDsc:
 self.DscDefaultValue = Value
+