X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;ds=sidebyside;f=BaseTools%2FSource%2FPython%2FAutoGen%2FGenMake.py;h=1d49a0316daf3334f1e8d457bd32fd45172dc758;hb=867d1cd4cd7d2b4242a227067b3fce69546f0528;hp=64eedfaa1223dbdc562573613cec8ee3c09260c7;hpb=1be2ed90a20618d71ddf34b8a07d038da0b36854;p=mirror_edk2.git diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py index 64eedfaa12..1d49a0316d 100644 --- a/BaseTools/Source/Python/AutoGen/GenMake.py +++ b/BaseTools/Source/Python/AutoGen/GenMake.py @@ -241,12 +241,14 @@ PLATFORM_OUTPUT_DIR = ${platform_output_directory} # MODULE_NAME = ${module_name} MODULE_GUID = ${module_guid} +MODULE_NAME_GUID = ${module_name_guid} MODULE_VERSION = ${module_version} MODULE_TYPE = ${module_type} MODULE_FILE = ${module_file} MODULE_FILE_BASE_NAME = ${module_file_base_name} BASE_NAME = $(MODULE_NAME) MODULE_RELATIVE_DIR = ${module_relative_directory} +PACKAGE_RELATIVE_DIR = ${package_relative_directory} MODULE_DIR = $(WORKSPACE)${separator}${module_relative_directory} MODULE_ENTRY_POINT = ${module_entry_point} @@ -552,6 +554,10 @@ cleanlib: Command = self._MAKE_TEMPLATE_[self._FileType] % {"file":os.path.join(D, MakefileName)} LibraryMakeCommandList.append(Command) + package_rel_dir = self._AutoGenObject.SourceDir + if os.sep in package_rel_dir: + package_rel_dir = package_rel_dir[package_rel_dir.index(os.sep) + 1:] + MakefileTemplateDict = { "makefile_header" : self._FILE_HEADER_[self._FileType], "makefile_path" : os.path.join("$(MODULE_BUILD_DIR)", MakefileName), @@ -564,12 +570,14 @@ cleanlib: "module_name" : self._AutoGenObject.Name, "module_guid" : self._AutoGenObject.Guid, + "module_name_guid" : self._AutoGenObject._GetUniqueBaseName(), "module_version" : self._AutoGenObject.Version, "module_type" : self._AutoGenObject.ModuleType, "module_file" : self._AutoGenObject.MetaFile.Name, "module_file_base_name" : self._AutoGenObject.MetaFile.BaseName, "module_relative_directory" : self._AutoGenObject.SourceDir, - "module_extra_defines" : ["%s = %s" % (k, v) for k,v in self._AutoGenObject.Module.Defines.iteritems()], + "package_relative_directory": package_rel_dir, + "module_extra_defines" : ["%s = %s" % (k, v) for k, v in self._AutoGenObject.Module.Defines.iteritems()], "architecture" : self._AutoGenObject.Arch, "toolchain_tag" : self._AutoGenObject.ToolChain, @@ -673,7 +681,8 @@ cleanlib: NewFile = self.PlaceMacro(str(F), self.Macros) # In order to use file list macro as dependency if T.GenListFile: - self.ListFileMacros[T.ListFileMacro].append(str(F)) + # gnu tools need forward slash path separater, even on Windows + self.ListFileMacros[T.ListFileMacro].append(str(F).replace ('\\', '/')) self.FileListMacros[T.FileListMacro].append(NewFile) elif T.GenFileListMacro: self.FileListMacros[T.FileListMacro].append(NewFile) @@ -839,6 +848,7 @@ PLATFORM_OUTPUT_DIR = ${platform_output_directory} # MODULE_NAME = ${module_name} MODULE_GUID = ${module_guid} +MODULE_NAME_GUID = ${module_name_guid} MODULE_VERSION = ${module_version} MODULE_TYPE = ${module_type} MODULE_FILE = ${module_file} @@ -963,6 +973,7 @@ ${BEGIN}\t-@${create_directory_command}\n${END}\ "module_name" : self._AutoGenObject.Name, "module_guid" : self._AutoGenObject.Guid, + "module_name_guid" : self._AutoGenObject._GetUniqueBaseName(), "module_version" : self._AutoGenObject.Version, "module_type" : self._AutoGenObject.ModuleType, "module_file" : self._AutoGenObject.MetaFile, @@ -1105,6 +1116,7 @@ cleanlib: self.IntermediateDirectoryList = [] self.ModuleBuildDirectoryList = [] self.LibraryBuildDirectoryList = [] + self.LibraryMakeCommandList = [] # Compose a dict object containing information used to do replacement in template def _CreateTemplateDict(self): @@ -1128,6 +1140,7 @@ cleanlib: Command = self._MAKE_TEMPLATE_[self._FileType] % {"file":Makefile} LibraryMakefileList.append(Makefile) LibraryMakeCommandList.append(Command) + self.LibraryMakeCommandList = LibraryMakeCommandList ModuleMakefileList = [] ModuleMakeCommandList = [] @@ -1175,7 +1188,8 @@ cleanlib: def GetModuleBuildDirectoryList(self): DirList = [] for ModuleAutoGen in self._AutoGenObject.ModuleAutoGenList: - DirList.append(os.path.join(self._AutoGenObject.BuildDir, ModuleAutoGen.BuildDir)) + if not ModuleAutoGen.IsBinaryModule: + DirList.append(os.path.join(self._AutoGenObject.BuildDir, ModuleAutoGen.BuildDir)) return DirList ## Get the root directory list for intermediate files of all libraries build @@ -1185,7 +1199,8 @@ cleanlib: def GetLibraryBuildDirectoryList(self): DirList = [] for LibraryAutoGen in self._AutoGenObject.LibraryAutoGenList: - DirList.append(os.path.join(self._AutoGenObject.BuildDir, LibraryAutoGen.BuildDir)) + if not LibraryAutoGen.IsBinaryModule: + DirList.append(os.path.join(self._AutoGenObject.BuildDir, LibraryAutoGen.BuildDir)) return DirList _TemplateDict = property(_CreateTemplateDict) @@ -1198,99 +1213,7 @@ cleanlib: # class TopLevelMakefile(BuildFile): ## template used to generate toplevel makefile - _TEMPLATE_ = TemplateString('''\ -${makefile_header} - -# -# Platform Macro Definition -# -PLATFORM_NAME = ${platform_name} -PLATFORM_GUID = ${platform_guid} -PLATFORM_VERSION = ${platform_version} - -# -# Build Configuration Macro Definition -# -TOOLCHAIN = ${toolchain_tag} -TOOLCHAIN_TAG = ${toolchain_tag} -TARGET = ${build_target} - -# -# Build Directory Macro Definition -# -BUILD_DIR = ${platform_build_directory} -FV_DIR = ${platform_build_directory}${separator}FV - -# -# Shell Command Macro -# -${BEGIN}${shell_command_code} = ${shell_command} -${END} - -MAKE = ${make_path} -MAKE_FILE = ${makefile_path} - -# -# Default target -# -all: modules fds - -# -# Initialization target: print build information and create necessary directories -# -init: -\t-@ -\t${BEGIN}-@${create_directory_command} -\t${END} -# -# library build target -# -libraries: init -${BEGIN}\t@cd $(BUILD_DIR)${separator}${arch} && "$(MAKE)" $(MAKE_FLAGS) libraries -${END}\t@cd $(BUILD_DIR) - -# -# module build target -# -modules: init -${BEGIN}\t@cd $(BUILD_DIR)${separator}${arch} && "$(MAKE)" $(MAKE_FLAGS) modules -${END}\t@cd $(BUILD_DIR) - -# -# Flash Device Image Target -# -fds: init -\t-@cd $(FV_DIR) -${BEGIN}\tGenFds -f ${fdf_file} -o $(BUILD_DIR) -t $(TOOLCHAIN) -b $(TARGET) -p ${active_platform} -a ${build_architecture_list} ${extra_options}${END}${BEGIN} -r ${fd} ${END}${BEGIN} -i ${fv} ${END}${BEGIN} -C ${cap} ${END}${BEGIN} -D ${macro} ${END} - -# -# run command for emulator platform only -# -run: -\tcd $(BUILD_DIR)${separator}IA32 && ".${separator}SecMain" -\tcd $(BUILD_DIR) - -# -# Clean intermediate files -# -clean: -${BEGIN}\t-@${sub_build_command} clean -${END}\t@cd $(BUILD_DIR) - -# -# Clean all generated files except to makefile -# -cleanall: -${BEGIN}\t${cleanall_command} -${END} - -# -# Clean all library files -# -cleanlib: -${BEGIN}\t-@${sub_build_command} cleanlib -${END}\t@cd $(BUILD_DIR)\n -''') + _TEMPLATE_ = TemplateString('''${BEGIN}\tGenFds -f ${fdf_file} --conf=${conf_directory} -o ${platform_build_directory} -t ${toolchain_tag} -b ${build_target} -p ${active_platform} -a ${build_architecture_list} ${extra_options}${END}${BEGIN} -r ${fd} ${END}${BEGIN} -i ${fv} ${END}${BEGIN} -C ${cap} ${END}${BEGIN} -D ${macro} ${END}''') ## Constructor of TopLevelMakefile # @@ -1348,6 +1271,9 @@ ${END}\t@cd $(BUILD_DIR)\n if GlobalData.gCaseInsensitive: ExtraOption += " -c" + if GlobalData.gIgnoreSource: + ExtraOption += " --ignore-sources" + MakefileName = self._FILE_NAME_[self._FileType] SubBuildCommandList = [] for A in PlatformInfo.ArchList: @@ -1362,6 +1288,7 @@ ${END}\t@cd $(BUILD_DIR)\n "platform_guid" : PlatformInfo.Guid, "platform_version" : PlatformInfo.Version, "platform_build_directory" : PlatformInfo.BuildDir, + "conf_directory" : GlobalData.gConfDirectory, "toolchain_tag" : PlatformInfo.ToolChain, "build_target" : PlatformInfo.BuildTarget, @@ -1391,7 +1318,8 @@ ${END}\t@cd $(BUILD_DIR)\n def GetModuleBuildDirectoryList(self): DirList = [] for ModuleAutoGen in self._AutoGenObject.ModuleAutoGenList: - DirList.append(os.path.join(self._AutoGenObject.BuildDir, ModuleAutoGen.BuildDir)) + if not ModuleAutoGen.IsBinaryModule: + DirList.append(os.path.join(self._AutoGenObject.BuildDir, ModuleAutoGen.BuildDir)) return DirList ## Get the root directory list for intermediate files of all libraries build @@ -1401,7 +1329,8 @@ ${END}\t@cd $(BUILD_DIR)\n def GetLibraryBuildDirectoryList(self): DirList = [] for LibraryAutoGen in self._AutoGenObject.LibraryAutoGenList: - DirList.append(os.path.join(self._AutoGenObject.BuildDir, LibraryAutoGen.BuildDir)) + if not LibraryAutoGen.IsBinaryModule: + DirList.append(os.path.join(self._AutoGenObject.BuildDir, LibraryAutoGen.BuildDir)) return DirList _TemplateDict = property(_CreateTemplateDict)