Revision: 19027
http://sourceforge.net/p/edk2/code/19027
Author: yzhu52
Date: 2015-11-30 03:40:37 +0000 (Mon, 30 Nov 2015)
Log Message:
-----------
BaseTools: Add build error detection for Dynamic PCD name conflict
when multiple Dynamic PCD have different token space guid but same PCD
name, it is difficult for user to check why the generated autogen.c and
autogen.h are not consistent. so we add a check before generating
autogen.c and report error directly that user can know what happened
immediately.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yonghong Zhu <[email protected]>
Reviewed-by: Liming Gao <[email protected]>
Modified Paths:
--------------
trunk/edk2/BaseTools/Source/Python/AutoGen/GenC.py
Modified: trunk/edk2/BaseTools/Source/Python/AutoGen/GenC.py
===================================================================
--- trunk/edk2/BaseTools/Source/Python/AutoGen/GenC.py 2015-11-30 03:36:50 UTC
(rev 19026)
+++ trunk/edk2/BaseTools/Source/Python/AutoGen/GenC.py 2015-11-30 03:40:37 UTC
(rev 19027)
@@ -833,7 +833,7 @@
AutoGenH.Append('// Disabled the macros, as PcdToken and
PcdGet/Set are not allowed in the case that more than one DynamicEx Pcds are
different Guids but same CName.\n')
AutoGenH.Append('// #define %s %s\n' % (PcdTokenName,
PcdExTokenName))
AutoGenH.Append('// #define %s LibPcdGetEx%s(&%s, %s)\n' %
(GetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName))
- AutoGenH.Append('#define %s LibPcdGetExSize(&%s, %s)\n' %
(GetModeSizeName,Pcd.TokenSpaceGuidCName, PcdTokenName))
+ AutoGenH.Append('// #define %s LibPcdGetExSize(&%s, %s)\n' %
(GetModeSizeName,Pcd.TokenSpaceGuidCName, PcdTokenName))
if Pcd.DatumType == 'VOID*':
AutoGenH.Append('// #define %s(SizeOfBuffer, Buffer)
LibPcdSetEx%s(&%s, %s, (SizeOfBuffer), (Buffer))\n' % (SetModeName,
DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName))
AutoGenH.Append('// #define %s(SizeOfBuffer, Buffer)
LibPcdSetEx%sS(&%s, %s, (SizeOfBuffer), (Buffer))\n' % (SetModeStatusName,
DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName))
@@ -851,14 +851,24 @@
AutoGenH.Append('#define %s(Value) LibPcdSetEx%s(&%s, %s,
(Value))\n' % (SetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName,
PcdTokenName))
AutoGenH.Append('#define %s(Value) LibPcdSetEx%sS(&%s, %s,
(Value))\n' % (SetModeStatusName, DatumSizeLib, Pcd.TokenSpaceGuidCName,
PcdTokenName))
elif Pcd.Type in gDynamicPcd:
- AutoGenH.Append('#define %s LibPcdGet%s(%s)\n' % (GetModeName,
DatumSizeLib, PcdTokenName))
- AutoGenH.Append('#define %s LibPcdGetSize(%s)\n' % (GetModeSizeName,
PcdTokenName))
- if Pcd.DatumType == 'VOID*':
- AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPcdSet%s(%s,
(SizeOfBuffer), (Buffer))\n' %(SetModeName, DatumSizeLib, PcdTokenName))
- AutoGenH.Append('#define %s(SizeOfBuffer, Buffer)
LibPcdSet%sS(%s, (SizeOfBuffer), (Buffer))\n' % (SetModeStatusName,
DatumSizeLib, PcdTokenName))
+ PcdList = []
+ PcdCNameList = []
+ PcdList.extend(Info.LibraryPcdList)
+ PcdList.extend(Info.ModulePcdList)
+ for PcdModule in PcdList:
+ if PcdModule.Type in gDynamicPcd:
+ PcdCNameList.append(PcdModule.TokenCName)
+ if PcdCNameList.count(Pcd.TokenCName) > 1:
+ EdkLogger.error("build", AUTOGEN_ERROR, "More than one Dynamic
Pcds [%s] are different Guids but same CName. They need to be changed to
DynamicEx type to avoid the confliction.\n" % (Pcd.TokenCName),
ExtraData="[%s]" % str(Info.MetaFile.Path))
else:
- AutoGenH.Append('#define %s(Value) LibPcdSet%s(%s, (Value))\n' %
(SetModeName, DatumSizeLib, PcdTokenName))
- AutoGenH.Append('#define %s(Value) LibPcdSet%sS(%s, (Value))\n' %
(SetModeStatusName, DatumSizeLib, PcdTokenName))
+ AutoGenH.Append('#define %s LibPcdGet%s(%s)\n' % (GetModeName,
DatumSizeLib, PcdTokenName))
+ AutoGenH.Append('#define %s LibPcdGetSize(%s)\n' %
(GetModeSizeName, PcdTokenName))
+ if Pcd.DatumType == 'VOID*':
+ AutoGenH.Append('#define %s(SizeOfBuffer, Buffer)
LibPcdSet%s(%s, (SizeOfBuffer), (Buffer))\n' %(SetModeName, DatumSizeLib,
PcdTokenName))
+ AutoGenH.Append('#define %s(SizeOfBuffer, Buffer)
LibPcdSet%sS(%s, (SizeOfBuffer), (Buffer))\n' % (SetModeStatusName,
DatumSizeLib, PcdTokenName))
+ else:
+ AutoGenH.Append('#define %s(Value) LibPcdSet%s(%s,
(Value))\n' % (SetModeName, DatumSizeLib, PcdTokenName))
+ AutoGenH.Append('#define %s(Value) LibPcdSet%sS(%s,
(Value))\n' % (SetModeStatusName, DatumSizeLib, PcdTokenName))
else:
PcdVariableName = '_gPcd_' + gItemTypeStringDatabase[Pcd.Type] + '_' +
Pcd.TokenCName
Const = 'const'
@@ -1111,7 +1121,7 @@
AutoGenH.Append('// Disabled the macros, as PcdToken and
PcdGet/Set are not allowed in the case that more than one DynamicEx Pcds are
different Guids but same CName.\n')
AutoGenH.Append('// #define %s %s\n' % (PcdTokenName,
PcdExTokenName))
AutoGenH.Append('// #define %s LibPcdGetEx%s(&%s, %s)\n' %
(GetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName))
- AutoGenH.Append('// #define %s LibPcdGetExSize(&%s, %s \n' %
(GetModeSizeName,Pcd.TokenSpaceGuidCName, PcdTokenName))
+ AutoGenH.Append('// #define %s LibPcdGetExSize(&%s, %s \n' %
(GetModeSizeName,Pcd.TokenSpaceGuidCName, PcdTokenName))
if Pcd.DatumType == 'VOID*':
AutoGenH.Append('// #define %s(SizeOfBuffer, Buffer)
LibPcdSetEx%s(&%s, %s, (SizeOfBuffer), (Buffer))\n' % (SetModeName,
DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName))
AutoGenH.Append('// #define %s(SizeOfBuffer, Buffer)
LibPcdSetEx%sS(&%s, %s, (SizeOfBuffer), (Buffer))\n' % (SetModeStatusName,
DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName))
@@ -1131,14 +1141,24 @@
else:
AutoGenH.Append('#define _PCD_TOKEN_%s %dU\n' % (TokenCName,
TokenNumber))
if PcdItemType in gDynamicPcd:
- AutoGenH.Append('#define %s LibPcdGet%s(%s)\n' % (GetModeName,
DatumSizeLib, PcdTokenName))
- AutoGenH.Append('#define %s LibPcdGetSize(%s)\n' % (GetModeSizeName,
PcdTokenName))
- if DatumType == 'VOID*':
- AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPcdSet%s(%s,
(SizeOfBuffer), (Buffer))\n' %(SetModeName, DatumSizeLib, PcdTokenName))
- AutoGenH.Append('#define %s(SizeOfBuffer, Buffer)
LibPcdSet%sS(%s, (SizeOfBuffer), (Buffer))\n' % (SetModeStatusName,
DatumSizeLib, PcdTokenName))
+ PcdList = []
+ PcdCNameList = []
+ PcdList.extend(Info.LibraryPcdList)
+ PcdList.extend(Info.ModulePcdList)
+ for PcdModule in PcdList:
+ if PcdModule.Type in gDynamicPcd:
+ PcdCNameList.append(PcdModule.TokenCName)
+ if PcdCNameList.count(Pcd.TokenCName) > 1:
+ EdkLogger.error("build", AUTOGEN_ERROR, "More than one Dynamic
Pcds [%s] are different Guids but same CName.They need to be changed to
DynamicEx type to avoid the confliction.\n" % (Pcd.TokenCName),
ExtraData="[%s]" % str(Info.MetaFile.Path))
else:
- AutoGenH.Append('#define %s(Value) LibPcdSet%s(%s, (Value))\n' %
(SetModeName, DatumSizeLib, PcdTokenName))
- AutoGenH.Append('#define %s(Value) LibPcdSet%sS(%s, (Value))\n' %
(SetModeStatusName, DatumSizeLib, PcdTokenName))
+ AutoGenH.Append('#define %s LibPcdGet%s(%s)\n' % (GetModeName,
DatumSizeLib, PcdTokenName))
+ AutoGenH.Append('#define %s LibPcdGetSize(%s)\n' %
(GetModeSizeName, PcdTokenName))
+ if DatumType == 'VOID*':
+ AutoGenH.Append('#define %s(SizeOfBuffer, Buffer)
LibPcdSet%s(%s, (SizeOfBuffer), (Buffer))\n' %(SetModeName, DatumSizeLib,
PcdTokenName))
+ AutoGenH.Append('#define %s(SizeOfBuffer, Buffer)
LibPcdSet%sS(%s, (SizeOfBuffer), (Buffer))\n' % (SetModeStatusName,
DatumSizeLib, PcdTokenName))
+ else:
+ AutoGenH.Append('#define %s(Value) LibPcdSet%s(%s,
(Value))\n' % (SetModeName, DatumSizeLib, PcdTokenName))
+ AutoGenH.Append('#define %s(Value) LibPcdSet%sS(%s,
(Value))\n' % (SetModeStatusName, DatumSizeLib, PcdTokenName))
if PcdItemType == TAB_PCDS_PATCHABLE_IN_MODULE:
PcdVariableName = '_gPcd_' +
gItemTypeStringDatabase[TAB_PCDS_PATCHABLE_IN_MODULE] + '_' + TokenCName
AutoGenH.Append('extern volatile %s _gPcd_BinaryPatch_%s%s;\n'
%(DatumType, TokenCName, Array) )
------------------------------------------------------------------------------
Go from Idea to Many App Stores Faster with Intel(R) XDK
Give your users amazing mobile app experiences with Intel(R) XDK.
Use one codebase in this all-in-one HTML5 development environment.
Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs.
http://pubads.g.doubleclick.net/gampad/clk?id=254741551&iu=/4140
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits