summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFeng, YunhuaX </o=Intel/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=Feng, YunhuaX4e1>2018-02-05 11:42:33 +0800
committerYonghong Zhu <yonghong.zhu@intel.com>2018-02-07 09:28:17 +0800
commitf9bba77495750bb5f9bc5c5864b7c76fece5ec9f (patch)
tree51626abc8d9280f2a45965ecfd83c0c0782dc5b6
parent17ac6b23dc92c9a052a252055bec46c70a4b16ee (diff)
downloadedk2-f9bba77495750bb5f9bc5c5864b7c76fece5ec9f.zip
edk2-f9bba77495750bb5f9bc5c5864b7c76fece5ec9f.tar.gz
edk2-f9bba77495750bb5f9bc5c5864b7c76fece5ec9f.tar.bz2
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>
-rw-r--r--BaseTools/Source/Python/AutoGen/GenMake.py2
-rw-r--r--BaseTools/Source/Python/Common/Misc.py4
-rw-r--r--BaseTools/Source/Python/Workspace/DscBuildData.py73
3 files changed, 72 insertions, 7 deletions
diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py
index 7d3374a..9df5d8e 100644
--- a/BaseTools/Source/Python/AutoGen/GenMake.py
+++ b/BaseTools/Source/Python/AutoGen/GenMake.py
@@ -1554,6 +1554,8 @@ class TopLevelMakefile(BuildFile):
if pcdValue.startswith('H'):
pcdValue = 'H' + '"' + pcdValue[1:] + '"'
ExtraOption += " --pcd " + pcdName + '=' + pcdValue
+ elif pcdValue.startswith("L'"):
+ ExtraOption += "--pcd " + pcdName + '=' + pcdValue
elif pcdValue.startswith('L'):
pcdValue = 'L' + '"' + pcdValue[1:] + '"'
ExtraOption += " --pcd " + pcdName + '=' + pcdValue
diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Source/Python/Common/Misc.py
index d80f645..b8c2ce1 100644
--- a/BaseTools/Source/Python/Common/Misc.py
+++ b/BaseTools/Source/Python/Common/Misc.py
@@ -2353,10 +2353,10 @@ def PackRegistryFormatGuid(Guid):
def BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, Value):
if PcdDatumType not in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64,'BOOLEAN']:
- if Value.startswith('L'):
+ if Value.startswith('L') or Value.startswith('"'):
if not Value[1]:
EdkLogger.error("build", FORMAT_INVALID, 'For Void* type PCD, when specify the Value in the command line, please use the following format: "string", L"string", H"{...}"')
- Value = Value[0] + '"' + Value[1:] + '"'
+ Value = Value
elif Value.startswith('H'):
if not Value[1]:
EdkLogger.error("build", FORMAT_INVALID, 'For Void* type PCD, when specify the Value in the command line, please use the following format: "string", L"string", H"{...}"')
diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.py
index 1da4f03..d9165f2 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: