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