]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Append FILE_GUID to BaseName.
authorYingke Liu <yingke.d.liu@intel.com>
Wed, 10 Jun 2015 07:50:59 +0000 (07:50 +0000)
committeryingke <yingke@Edk2>
Wed, 10 Jun 2015 07:50:59 +0000 (07:50 +0000)
This patch makes sure the EFI file in $(BIN_DIR) is unique. If there are modules with same BaseName, the FILE_GUID is appended.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yingke Liu <yingke.d.liu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17608 6f19259b-4bc3-4df7-8a09-765794883524

BaseTools/Conf/build_rule.template
BaseTools/Source/Python/AutoGen/AutoGen.py
BaseTools/Source/Python/AutoGen/GenMake.py

index 3b054c4dddba4089ac9c8e934757200eaa3ba4d3..596d41d5f53ae5d9327dccf9062786dafa03dccb 100644 (file)
@@ -66,6 +66,8 @@
 #   $(LIBS)             Static library files of current module\r
 #   $(<tool>_FLAGS)     Tools flags of current module\r
 #   $(MODULE_NAME)      Current module name\r
+#   $(MODULE_NAME_GUID) Current module name with module FILE_GUID if same $(MODULE_NAME) exists\r
+#                       in different modules, otherwise its value is same as $(MODULE_NAME)\r
 #   $(MODULE_TYPE)      Current module type\r
 #   $(MODULE_GUID)      Current module guid\r
 #   $(ARCH)             Architecture of current module\r
     <Command.MSFT, Command.INTEL, Command.RVCT, Command.ARMGCC, Command.ARMLINUXGCC>  \r
         "$(GENFW)" -e $(MODULE_TYPE) -o ${dst} ${src} $(GENFW_FLAGS)\r
         $(CP) ${dst} $(OUTPUT_DIR)\r
-        $(CP) ${dst} $(BIN_DIR)\r
+        $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi\r
         -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR)\r
         -$(CP) $(DEBUG_DIR)(+)*.pdb $(OUTPUT_DIR) \r
     <Command.GCC>\r
         #The below 2 lines are only needed for UNIXGCC tool chain, which genereates PE image directly\r
         #\r
         -$(OBJCOPY) $(OBJCOPY_ADDDEBUGFLAG) ${src}\r
-        -$(CP) $(DEBUG_DIR)(+)$(MODULE_NAME).debug $(BIN_DIR)\r
+        -$(CP) $(DEBUG_DIR)(+)$(MODULE_NAME).debug $(BIN_DIR)(+)$(MODULE_NAME_GUID).debug\r
 \r
         "$(GENFW)" -e $(MODULE_TYPE) -o ${dst} ${src} $(GENFW_FLAGS)\r
         $(CP) ${dst} $(OUTPUT_DIR)\r
-        $(CP) ${dst} $(BIN_DIR)\r
+        $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi\r
         -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR)\r
         \r
     <Command.XCODE>\r
         -$(DSYMUTIL) ${src}\r
         "$(GENFW)" -e $(MODULE_TYPE) -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff $(GENFW_FLAGS)\r
         $(CP) ${dst} $(OUTPUT_DIR)\r
-        $(CP) ${dst} $(BIN_DIR)\r
+        $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi\r
         -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR)\r
 \r
 [Dependency-Expression-File]\r
 \r
     <Command>\r
         "$(GENFW)" -o ${dst} -j $(MICROCODE_BINARY_FILES) $(GENFW_FLAGS)\r
-        -$(CP) ${dst} $(BIN_DIR)\r
+        -$(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).bin\r
 \r
 [EFI-Image-File]\r
     <InputFile>\r
         ?.efi, ?.EFI, ?.Efi\r
 \r
     <OutputFile>\r
-        $(BIN_DIR)(+)$(MODULE_NAME).rom\r
+        $(BIN_DIR)(+)$(MODULE_NAME_GUID).rom\r
 \r
     <Command>\r
         $(OPTROM) -i $(PCI_DEVICE_ID) -f $(PCI_VENDOR_ID) -l $(PCI_CLASS_CODE) -r $(PCI_REVISION) -o $dst $(OPTROM_FLAGS) $src\r
index b2d9f6a8efb2e5177e309f31fe16bf68d58b26b9..d1ed0a65abce390f694b935722f9d12318f06a54 100644 (file)
@@ -17,6 +17,7 @@ import Common.LongFilePathOs as os
 import re\r
 import os.path as path\r
 import copy\r
+import uuid\r
 \r
 import GenC\r
 import GenMake\r
@@ -2285,12 +2286,26 @@ class ModuleAutoGen(AutoGen):
                 \r
         return self._FixedAtBuildPcds        \r
 \r
+    def _GetUniqueBaseName(self):\r
+        BaseName = self.Name\r
+        for Module in self.PlatformInfo.ModuleAutoGenList:\r
+            if Module.MetaFile == self.MetaFile:\r
+                continue\r
+            if Module.Name == self.Name:\r
+                EdkLogger.warn('build', 'Modules have same BaseName:\n  %s\n  %s' % (Module.MetaFile, self.MetaFile))\r
+                if uuid.UUID(Module.Guid) == uuid.UUID(self.Guid):\r
+                    EdkLogger.error("build", FILE_DUPLICATED, 'Modules have same BaseName and FILE_GUID:\n'\r
+                                    '  %s\n  %s' % (Module.MetaFile, self.MetaFile))\r
+                BaseName = '%s_%s' % (self.Name, self.Guid)\r
+        return BaseName\r
+\r
     # Macros could be used in build_rule.txt (also Makefile)\r
     def _GetMacros(self):\r
         if self._Macro == None:\r
             self._Macro = sdict()\r
             self._Macro["WORKSPACE"             ] = self.WorkspaceDir\r
             self._Macro["MODULE_NAME"           ] = self.Name\r
+            self._Macro["MODULE_NAME_GUID"      ] = self._GetUniqueBaseName()\r
             self._Macro["MODULE_GUID"           ] = self.Guid\r
             self._Macro["MODULE_VERSION"        ] = self.Version\r
             self._Macro["MODULE_TYPE"           ] = self.ModuleType\r
index edbf24398755e0ecc38054b9ee590e45214e030a..1d49a0316daf3334f1e8d457bd32fd45172dc758 100644 (file)
@@ -241,6 +241,7 @@ PLATFORM_OUTPUT_DIR = ${platform_output_directory}
 #\r
 MODULE_NAME = ${module_name}\r
 MODULE_GUID = ${module_guid}\r
+MODULE_NAME_GUID = ${module_name_guid}\r
 MODULE_VERSION = ${module_version}\r
 MODULE_TYPE = ${module_type}\r
 MODULE_FILE = ${module_file}\r
@@ -569,6 +570,7 @@ cleanlib:
 \r
             "module_name"               : self._AutoGenObject.Name,\r
             "module_guid"               : self._AutoGenObject.Guid,\r
+            "module_name_guid"          : self._AutoGenObject._GetUniqueBaseName(),\r
             "module_version"            : self._AutoGenObject.Version,\r
             "module_type"               : self._AutoGenObject.ModuleType,\r
             "module_file"               : self._AutoGenObject.MetaFile.Name,\r
@@ -846,6 +848,7 @@ PLATFORM_OUTPUT_DIR = ${platform_output_directory}
 #\r
 MODULE_NAME = ${module_name}\r
 MODULE_GUID = ${module_guid}\r
+MODULE_NAME_GUID = ${module_name_guid}\r
 MODULE_VERSION = ${module_version}\r
 MODULE_TYPE = ${module_type}\r
 MODULE_FILE = ${module_file}\r
@@ -970,6 +973,7 @@ ${BEGIN}\t-@${create_directory_command}\n${END}\
 \r
             "module_name"               : self._AutoGenObject.Name,\r
             "module_guid"               : self._AutoGenObject.Guid,\r
+            "module_name_guid"          : self._AutoGenObject._GetUniqueBaseName(),\r
             "module_version"            : self._AutoGenObject.Version,\r
             "module_type"               : self._AutoGenObject.ModuleType,\r
             "module_file"               : self._AutoGenObject.MetaFile,\r