Revision: 19078
          http://sourceforge.net/p/edk2/code/19078
Author:   vanjeff
Date:     2015-12-01 02:32:33 +0000 (Tue, 01 Dec 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.

(Sync patch r19027 from main trunk.)

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yonghong Zhu <[email protected]>
Reviewed-by: Liming Gao <[email protected]>

Revision Links:
--------------
    http://sourceforge.net/p/edk2/code/19027

Modified Paths:
--------------
    branches/UDK2015/BaseTools/Source/Python/AutoGen/GenC.py

Modified: branches/UDK2015/BaseTools/Source/Python/AutoGen/GenC.py
===================================================================
--- branches/UDK2015/BaseTools/Source/Python/AutoGen/GenC.py    2015-12-01 
02:32:08 UTC (rev 19077)
+++ branches/UDK2015/BaseTools/Source/Python/AutoGen/GenC.py    2015-12-01 
02:32:33 UTC (rev 19078)
@@ -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=254741911&iu=/4140
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to