Yingke Liu
2015-06-08 06:20:22 UTC
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yingke Liu <***@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:
Signed-off-by: Yingke Liu <***@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
------------------------------------------------------------------------------
1.9.5.msysgit.0
------------------------------------------------------------------------------