diff options
author | Feng, YunhuaX </o=Intel/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=Feng, YunhuaX4e1> | 2018-02-05 11:42:33 +0800 |
---|---|---|
committer | Yonghong Zhu <yonghong.zhu@intel.com> | 2018-02-07 09:28:17 +0800 |
commit | f9bba77495750bb5f9bc5c5864b7c76fece5ec9f (patch) | |
tree | 51626abc8d9280f2a45965ecfd83c0c0782dc5b6 /BaseTools/Source/Python/Workspace/DscBuildData.py | |
parent | 17ac6b23dc92c9a052a252055bec46c70a4b16ee (diff) | |
download | edk2-f9bba77495750bb5f9bc5c5864b7c76fece5ec9f.tar.gz edk2-f9bba77495750bb5f9bc5c5864b7c76fece5ec9f.tar.bz2 edk2-f9bba77495750bb5f9bc5c5864b7c76fece5ec9f.zip |
BaseTools: Fix build argument --pcd for flexible format bugs
Build argument --pcd flexible format, like as:
1. VOID* type
gTokenSpaceGuid.Test=H"{flexible format}"
gTokenSpaceGuid.Test=L"string"
gTokenSpaceGuid.Test="string"
gTokenSpaceGuid.Test=L'string'
gTokenSpaceGuid.Test='string'
2. UINT8/UINT16/UINT32/UINT64 type
gTokenSpaceGuid.Test=H"{flexible format}"
gTokenSpaceGuid.Test=L"string"
gTokenSpaceGuid.Test="string"
gTokenSpaceGuid.Test=L'string'
gTokenSpaceGuid.Test='string'
In linux, single quotes need escape
gTokenSpaceGuid.Test=L\'string\'
gTokenSpaceGuid.Test=\'string\'
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com>
Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
Diffstat (limited to 'BaseTools/Source/Python/Workspace/DscBuildData.py')
-rw-r--r-- | BaseTools/Source/Python/Workspace/DscBuildData.py | 73 |
1 files changed, 68 insertions, 5 deletions
diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.py index 1da4f03ab8..d9165f2ac7 100644 --- a/BaseTools/Source/Python/Workspace/DscBuildData.py +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py @@ -999,10 +999,39 @@ class DscBuildData(PlatformBuildClassObject): try:
pcdvalue = ValueExpressionEx(pcdvalue[1:], PcdDatumType, self._GuidDict)(True)
except BadExpression, Value:
- if Value.result > 1:
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %
- (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))
- pcdvalue = 'H' + pcdvalue
+ EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %
+ (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))
+ if PcdDatumType == "VOID*":
+ pcdvalue = 'H' + pcdvalue
+ elif pcdvalue.startswith("L'"):
+ try:
+ pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)
+ except BadExpression, Value:
+ EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %
+ (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))
+ if pcdvalue.startswith('{'):
+ pcdvalue = 'H' + pcdvalue
+ elif pcdvalue.startswith("'"):
+ try:
+ pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)
+ except BadExpression, Value:
+ EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %
+ (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))
+ if pcdvalue.startswith('{'):
+ pcdvalue = 'H' + pcdvalue
+ elif pcdvalue.startswith('L'):
+ pcdvalue = 'L"' + pcdvalue[1:] + '"'
+ try:
+ pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)
+ except BadExpression, Value:
+ EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %
+ (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))
+ else:
+ try:
+ pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)
+ except BadExpression, Value:
+ EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %
+ (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))
NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)
FoundFlag = True
else:
@@ -1018,7 +1047,41 @@ class DscBuildData(PlatformBuildClassObject): except BadExpression, Value:
EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %
(TokenSpaceGuidCName, TokenCName, pcdvalue, Value))
- pcdvalue = 'H' + pcdvalue
+ if PcdDatumType == "VOID*":
+ pcdvalue = 'H' + pcdvalue
+ elif pcdvalue.startswith("L'"):
+ try:
+ pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(
+ True)
+ except BadExpression, Value:
+ EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %
+ (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))
+ if pcdvalue.startswith('{'):
+ pcdvalue = 'H' + pcdvalue
+ elif pcdvalue.startswith("'"):
+ try:
+ pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(
+ True)
+ except BadExpression, Value:
+ EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %
+ (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))
+ if pcdvalue.startswith('{'):
+ pcdvalue = 'H' + pcdvalue
+ elif pcdvalue.startswith('L'):
+ pcdvalue = 'L"' + pcdvalue[1:] + '"'
+ try:
+ pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(
+ True)
+ except BadExpression, Value:
+ EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %
+ (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))
+ else:
+ try:
+ pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)
+ except BadExpression, Value:
+ EdkLogger.error('Parser', FORMAT_INVALID,
+ 'PCD [%s.%s] Value "%s", %s' %
+ (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))
NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)
FoundFlag = True
else:
|