[edk2] [Patch] BaseTools: Fixed build failed issue.

2018-03-01 Thread BobCF
Case 1. A Pcd has no default sku setting in DSC.
Case 2. Build as Single SKU.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Bob Feng 
Cc: Liming Gao 
---
 BaseTools/Source/Python/Workspace/DscBuildData.py | 21 ++---
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py 
b/BaseTools/Source/Python/Workspace/DscBuildData.py
index 06d2f2fbcd..9dcdcfcf1c 100644
--- a/BaseTools/Source/Python/Workspace/DscBuildData.py
+++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
@@ -1304,14 +1304,14 @@ class DscBuildData(PlatformBuildClassObject):
 if str_pcd_dec:
 str_pcd_obj_str = StructurePcd()
 str_pcd_obj_str.copy(str_pcd_dec)
 if str_pcd_obj:
 str_pcd_obj_str.copy(str_pcd_obj)
-if str_pcd_obj.Type in 
[self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], 
self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:
-str_pcd_obj_str.DefaultFromDSC = {skuname:{defaultstore: 
str_pcd_obj.SkuInfoList[skuname].DefaultStoreDict.get(defaultstore, 
str_pcd_obj.SkuInfoList[skuname].HiiDefaultValue) for defaultstore in 
DefaultStores} for skuname in str_pcd_obj.SkuInfoList}
-else:
-str_pcd_obj_str.DefaultFromDSC = {skuname:{defaultstore: 
str_pcd_obj.SkuInfoList[skuname].DefaultStoreDict.get(defaultstore, 
str_pcd_obj.SkuInfoList[skuname].DefaultValue) for defaultstore in 
DefaultStores} for skuname in str_pcd_obj.SkuInfoList}
+if str_pcd_obj.Type in 
[self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], 
self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:
+str_pcd_obj_str.DefaultFromDSC = 
{skuname:{defaultstore: 
str_pcd_obj.SkuInfoList[skuname].DefaultStoreDict.get(defaultstore, 
str_pcd_obj.SkuInfoList[skuname].HiiDefaultValue) for defaultstore in 
DefaultStores} for skuname in str_pcd_obj.SkuInfoList}
+else:
+str_pcd_obj_str.DefaultFromDSC = 
{skuname:{defaultstore: 
str_pcd_obj.SkuInfoList[skuname].DefaultStoreDict.get(defaultstore, 
str_pcd_obj.SkuInfoList[skuname].DefaultValue) for defaultstore in 
DefaultStores} for skuname in str_pcd_obj.SkuInfoList}
 for str_pcd_data in StrPcdSet[str_pcd]:
 if str_pcd_data[3] in SkuIds:
 str_pcd_obj_str.AddOverrideValue(str_pcd_data[2], 
str(str_pcd_data[6]), 'DEFAULT' if str_pcd_data[3] == 'COMMON' else 
str_pcd_data[3],'STANDARD' if str_pcd_data[4] == 'COMMON' else str_pcd_data[4], 
self.MetaFile.File if self.WorkspaceDir not in self.MetaFile.File else 
self.MetaFile.File[len(self.WorkspaceDir) if 
self.WorkspaceDir.endswith(os.path.sep) else 
len(self.WorkspaceDir)+1:],LineNo=str_pcd_data[5])
 S_pcd_set[str_pcd[1], str_pcd[0]] = str_pcd_obj_str
 else:
@@ -1729,10 +1729,13 @@ class DscBuildData(PlatformBuildClassObject):
 CApp = CApp + "// SkuName: %s,  DefaultStoreName: %s \n" % ('DEFAULT', 
'STANDARD')
 inherit_OverrideValues = Pcd.SkuOverrideValues[SkuName]
 if (SkuName,DefaultStoreName) == ('DEFAULT','STANDARD'):
 pcddefaultvalue = 
Pcd.DefaultFromDSC.get('DEFAULT',{}).get('STANDARD', Pcd.DefaultValue) if 
Pcd.DefaultFromDSC else Pcd.DefaultValue
 else:
+if not Pcd.DscRawValue:
+# handle the case that structure pcd is not appear in DSC
+self.CopyDscRawValue(Pcd)
 pcddefaultvalue = 
Pcd.DscRawValue.get(SkuName,{}).get(DefaultStoreName)
 for FieldList in 
[pcddefaultvalue,inherit_OverrideValues.get(DefaultStoreName)]:
 if not FieldList:
 continue
 if pcddefaultvalue and FieldList == pcddefaultvalue:
@@ -1925,12 +1928,12 @@ class DscBuildData(PlatformBuildClassObject):
 CApp = CApp + "// SkuName: %s,  DefaultStoreName: %s 
\n" % (skuname, defaultstorenameitem)
 CApp = CApp + 
self.GenerateInitValueStatement(Pcd,skuname,defaultstorenameitem)
 if skuname == SkuName:
 break
 else:
-CApp = CApp + "// SkuName: DEFAULT,  DefaultStoreName: 
STANDARD \n"
-CApp = CApp + 
self.GenerateInitValueStatement(Pcd,"DEFAULT","STANDARD")
+CApp = CApp + "// SkuName: %s,  DefaultStoreName: STANDARD \n" 
% self.SkuIdMgr.SystemSkuId
+CApp = CApp + 
self.GenerateInitValueStatement(Pcd,self.SkuIdMgr.SystemSkuId,"STANDARD")
 CApp = CApp + self.GenerateCommandLineValueStatement(Pcd)
 #
 # Set new PCD value and size
 #
 CApp = CApp + '  PcdSetPtr (%s, %s, %s, %s, Size, (UINT8 
*)Pcd);\n' % (SkuName, DefaultStoreName, Pcd.TokenSpaceGuidCName, 
Pcd.TokenCName)
@@ -2292,10 +2295,14 @@ class 

Re: [edk2] [Patch] BaseTools: Fixed Build failed issue.

2018-02-07 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: Tuesday, February 06, 2018 3:21 PM
>To: edk2-devel@lists.01.org
>Cc: Gao, Liming <liming@intel.com>
>Subject: [edk2] [Patch] BaseTools: Fixed Build failed issue.
>
>If the PCD is not used in DSC file and user set
>that PCD value from Command line, build will fail.
>
>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/Workspace/DscBuildData.py | 7 ++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
>diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py
>b/BaseTools/Source/Python/Workspace/DscBuildData.py
>index 1da4f03ab8..6e3cd0f3f1 100644
>--- a/BaseTools/Source/Python/Workspace/DscBuildData.py
>+++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
>@@ -896,11 +896,12 @@ class DscBuildData(PlatformBuildClassObject):
> else:
> pcdobj = self._Pcds.get((pcd[1],pcd[0]))
> if pcdobj:
> pcdset.append((pcd[0],pcd[1], pcdobj.DefaultValue))
> else:
>-pcdset.append((pcd[0],pcd[1],pcd[3]))
>+pcdvalue = pcd[3] if len(pcd) == 4 else pcd[2]
>+pcdset.append((pcd[0],pcd[1],pcdvalue))
> GlobalData.BuildOptionPcd = pcdset
> def GetFieldValueFromComm(self,ValueStr,TokenSpaceGuidCName,
>TokenCName, FieldName):
> PredictedFieldType = "VOID*"
> if ValueStr.startswith('L'):
> if not ValueStr[1]:
>@@ -2163,14 +2164,18 @@ class DscBuildData(PlatformBuildClassObject):
>
>
> for pcd in Pcds.values():
> SkuInfoObj = pcd.SkuInfoList.values()[0]
> pcdDecObject = self._DecPcds[pcd.TokenCName,
>pcd.TokenSpaceGuidCName]
>+pcd.DatumType = pcdDecObject.DatumType
> # Only fix the value while no value provided in DSC file.
> for sku in pcd.SkuInfoList.values():
> if (sku.HiiDefaultValue == "" or sku.HiiDefaultValue == None):
> sku.HiiDefaultValue = pcdDecObject.DefaultValue
>+for default_store in sku.DefaultStoreDict:
>+
>sku.DefaultStoreDict[default_store]=pcdDecObject.DefaultValue
>+pcd.DefaultValue = pcdDecObject.DefaultValue
> if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in
>pcd.SkuInfoList.keys():
> valuefromDec = pcdDecObject.DefaultValue
> SkuInfo = SkuInfoClass('DEFAULT', '0', 
> SkuInfoObj.VariableName,
>SkuInfoObj.VariableGuid, SkuInfoObj.VariableOffset,
>valuefromDec,VariableAttribute=SkuInfoObj.VariableAttribute,DefaultStore=
>{DefaultStore:valuefromDec})
> pcd.SkuInfoList['DEFAULT'] = SkuInfo
> elif 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' in
>pcd.SkuInfoList.keys():
>--
>2.14.3.windows.1
>
>___
>edk2-devel mailing list
>edk2-devel@lists.01.org
>https://lists.01.org/mailman/listinfo/edk2-devel
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


[edk2] [Patch] BaseTools: Fixed Build failed issue.

2018-02-05 Thread BobCF
If the PCD is not used in DSC file and user set
that PCD value from Command line, build will fail.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Bob Feng 
Cc: Liming Gao 
---
 BaseTools/Source/Python/Workspace/DscBuildData.py | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py 
b/BaseTools/Source/Python/Workspace/DscBuildData.py
index 1da4f03ab8..6e3cd0f3f1 100644
--- a/BaseTools/Source/Python/Workspace/DscBuildData.py
+++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
@@ -896,11 +896,12 @@ class DscBuildData(PlatformBuildClassObject):
 else:
 pcdobj = self._Pcds.get((pcd[1],pcd[0]))
 if pcdobj:
 pcdset.append((pcd[0],pcd[1], pcdobj.DefaultValue))
 else:
-pcdset.append((pcd[0],pcd[1],pcd[3]))
+pcdvalue = pcd[3] if len(pcd) == 4 else pcd[2]
+pcdset.append((pcd[0],pcd[1],pcdvalue))
 GlobalData.BuildOptionPcd = pcdset
 def GetFieldValueFromComm(self,ValueStr,TokenSpaceGuidCName, TokenCName, 
FieldName):
 PredictedFieldType = "VOID*"
 if ValueStr.startswith('L'):
 if not ValueStr[1]:
@@ -2163,14 +2164,18 @@ class DscBuildData(PlatformBuildClassObject):
 
 
 for pcd in Pcds.values():
 SkuInfoObj = pcd.SkuInfoList.values()[0]
 pcdDecObject = self._DecPcds[pcd.TokenCName, 
pcd.TokenSpaceGuidCName]
+pcd.DatumType = pcdDecObject.DatumType
 # Only fix the value while no value provided in DSC file.
 for sku in pcd.SkuInfoList.values():
 if (sku.HiiDefaultValue == "" or sku.HiiDefaultValue == None):
 sku.HiiDefaultValue = pcdDecObject.DefaultValue
+for default_store in sku.DefaultStoreDict:
+
sku.DefaultStoreDict[default_store]=pcdDecObject.DefaultValue
+pcd.DefaultValue = pcdDecObject.DefaultValue
 if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in 
pcd.SkuInfoList.keys():
 valuefromDec = pcdDecObject.DefaultValue
 SkuInfo = SkuInfoClass('DEFAULT', '0', 
SkuInfoObj.VariableName, SkuInfoObj.VariableGuid, SkuInfoObj.VariableOffset, 
valuefromDec,VariableAttribute=SkuInfoObj.VariableAttribute,DefaultStore={DefaultStore:valuefromDec})
 pcd.SkuInfoList['DEFAULT'] = SkuInfo
 elif 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' in 
pcd.SkuInfoList.keys():
-- 
2.14.3.windows.1

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