diff options
Diffstat (limited to 'BaseTools/Source/Python')
-rw-r--r-- | BaseTools/Source/Python/AutoGen/GenMake.py | 2 | ||||
-rw-r--r-- | BaseTools/Source/Python/Common/Misc.py | 4 | ||||
-rw-r--r-- | BaseTools/Source/Python/Workspace/DscBuildData.py | 73 |
3 files changed, 72 insertions, 7 deletions
diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py index 7d3374a493..9df5d8e2d7 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 d80f645d2e..b8c2ce1ddc 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 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:
|