Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yingke Liu <yingke.d....@intel.com>
---
 BaseTools/Source/Python/AutoGen/AutoGen.py        |  3 ++-
 BaseTools/Source/Python/Common/Misc.py            | 27 +++++++++++++++++++++++
 BaseTools/Source/Python/GenFds/FfsInfStatement.py |  5 ++++-
 3 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py 
b/BaseTools/Source/Python/AutoGen/AutoGen.py
index b2d9f6a..153746c 100644
--- a/BaseTools/Source/Python/AutoGen/AutoGen.py
+++ b/BaseTools/Source/Python/AutoGen/AutoGen.py
@@ -2323,7 +2323,8 @@ class ModuleAutoGen(AutoGen):
 
     ## Return the module name
     def _GetBaseName(self):
-        return self.Module.BaseName
+        return GetUniqueBaseName(self.MetaFile, self.Workspace.BuildDatabase, 
self.PlatformInfo.MetaFile,
+                                 self.Arch, self.BuildTarget, self.ToolChain)
 
     ## Return the module DxsFile if exist
     def _GetDxsFile(self):
diff --git a/BaseTools/Source/Python/Common/Misc.py 
b/BaseTools/Source/Python/Common/Misc.py
index fc1680b..82a47c1 100644
--- a/BaseTools/Source/Python/Common/Misc.py
+++ b/BaseTools/Source/Python/Common/Misc.py
@@ -24,6 +24,7 @@ import re
 import cPickle
 import array
 import shutil
+import uuid
 from UserDict import IterableUserDict
 from UserList import UserList
 
@@ -2007,6 +2008,32 @@ class SkuClass():
     AvailableSkuIdSet = property(__GetAvailableSkuIds)
     SkuUsageType = property(__SkuUsageType)
     AvailableSkuIdNumSet = property(__GetAvailableSkuIdNumber)
+
+def GetUniqueBaseName(ModuleInf, BuildDb, PlatformFile, Arch, Target, 
ToolChain):
+    Platform = BuildDb[PlatformFile, Arch, Target, ToolChain]
+    CurModule = BuildDb[ModuleInf, Arch, Target, ToolChain]
+    CurGuid = CurModule.Guid
+    if os.path.basename(ModuleInf.File) != os.path.basename(ModuleInf.Path):
+        CurGuid = os.path.basename(ModuleInf.Path)[:36]
+    BaseName = CurModule.BaseName
+    for Module in Platform.Modules:
+        if Module == ModuleInf:
+            continue
+        #
+        # If other module has same basename, return basename with its GUID 
appended
+        #
+        Inf = BuildDb[Module, Arch, Target, ToolChain]
+        if Inf.BaseName == CurModule.BaseName:
+            if os.path.basename(Module.File) != os.path.basename(Module.Path):
+                Guid = os.path.basename(Module.Path)[:36]
+            else:
+                Guid = Inf.Guid
+            if uuid.UUID(Guid) == uuid.UUID(CurGuid):
+                EdkLogger.error("build", FILE_DUPLICATED, 'Modules have same 
BaseName and FILE_GUID:\n'
+                                '  %s\n  %s' % (ModuleInf, Module))
+            BaseName = '%s_%s' % (CurModule.BaseName, CurGuid)
+    return BaseName
+
 ##
 #
 # This acts like the main() function for the script, unless it is 'import'ed 
into another
diff --git a/BaseTools/Source/Python/GenFds/FfsInfStatement.py 
b/BaseTools/Source/Python/GenFds/FfsInfStatement.py
index 29dc75f..023657e 100644
--- a/BaseTools/Source/Python/GenFds/FfsInfStatement.py
+++ b/BaseTools/Source/Python/GenFds/FfsInfStatement.py
@@ -33,6 +33,7 @@ from Common.Misc import PathClass
 from Common.Misc import GuidStructureByteArrayToGuidString
 from Common.Misc import ProcessDuplicatedInf
 from Common.Misc import GetVariableOffset
+from Common.Misc import GetUniqueBaseName
 from Common import EdkLogger
 from Common.BuildToolError import *
 from GuidSection import GuidSection
@@ -181,7 +182,9 @@ class FfsInfStatement(FfsInfStatementClassObject):
             #
             # Set Ffs BaseName, MdouleGuid, ModuleType, Version, OutputPath
             #
-            self.BaseName = Inf.BaseName
+            self.BaseName = GetUniqueBaseName(PathClassObj, 
GenFdsGlobalVariable.WorkSpace.BuildObject,
+                                              
GenFdsGlobalVariable.ActivePlatform, self.CurrentArch,
+                                              GenFdsGlobalVariable.TargetName, 
GenFdsGlobalVariable.ToolChainTag)
             self.ModuleGuid = Inf.Guid
             self.ModuleType = Inf.ModuleType
             if Inf.Specification != None and 'PI_SPECIFICATION_VERSION' in 
Inf.Specification:
-- 
1.9.5.msysgit.0


------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to