diff options
author | Yonghong Zhu <yonghong.zhu@intel.com> | 2018-02-26 15:36:47 +0800 |
---|---|---|
committer | Yonghong Zhu <yonghong.zhu@intel.com> | 2018-02-28 13:40:07 +0800 |
commit | cdbf45ad859b1e75e055f1fd06d0c8a10452b3aa (patch) | |
tree | dcb110f7e8ad405497093bb1a751b56ae1127ec6 /BaseTools/Source/Python/AutoGen/AutoGen.py | |
parent | dc9b2a57403262cf6df9d150ea3a118a7d765ad8 (diff) | |
download | edk2-cdbf45ad859b1e75e055f1fd06d0c8a10452b3aa.tar.gz edk2-cdbf45ad859b1e75e055f1fd06d0c8a10452b3aa.tar.bz2 edk2-cdbf45ad859b1e75e055f1fd06d0c8a10452b3aa.zip |
BaseTools: Fix a bug override Pcd by DSC Components section
The case is: define a VOID* pcd in DEC file, eg: Value is {0x1}.
then override this PCD on DSC component section, eg: Value is
{0x1, 0x2, 0x3}, the max size of this PCD is calculate wrong
which cause build error.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Diffstat (limited to 'BaseTools/Source/Python/AutoGen/AutoGen.py')
-rw-r--r-- | BaseTools/Source/Python/AutoGen/AutoGen.py | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index 1787decd1d..e2589cfbae 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -2421,7 +2421,7 @@ class PlatformAutoGen(AutoGen): ToPcd.validlists = FromPcd.validlists
ToPcd.expressions = FromPcd.expressions
- if ToPcd.DatumType == "VOID*" and ToPcd.MaxDatumSize in ['', None]:
+ if FromPcd != None and ToPcd.DatumType == "VOID*" and ToPcd.MaxDatumSize in ['', None]:
EdkLogger.debug(EdkLogger.DEBUG_9, "No MaxDatumSize specified for PCD %s.%s" \
% (ToPcd.TokenSpaceGuidCName, TokenCName))
Value = ToPcd.DefaultValue
@@ -2494,6 +2494,19 @@ class PlatformAutoGen(AutoGen): break
if Flag:
self._OverridePcd(ToPcd, PlatformModule.Pcds[Key], Module)
+ # use PCD value to calculate the MaxDatumSize when it is not specified
+ for Name, Guid in Pcds:
+ Pcd = Pcds[Name, Guid]
+ if Pcd.DatumType == "VOID*" and Pcd.MaxDatumSize in ['', None]:
+ Value = Pcd.DefaultValue
+ if Value in [None, '']:
+ Pcd.MaxDatumSize = '1'
+ elif Value[0] == 'L':
+ Pcd.MaxDatumSize = str((len(Value) - 2) * 2)
+ elif Value[0] == '{':
+ Pcd.MaxDatumSize = str(len(Value.split(',')))
+ else:
+ Pcd.MaxDatumSize = str(len(Value) - 1)
return Pcds.values()
## Resolve library names to library modules
|