From f3decdc362d74c06b6b5028b09eecbaf8db23c12 Mon Sep 17 00:00:00 2001 From: lgao4 Date: Fri, 19 Mar 2010 06:55:07 +0000 Subject: Sync EDKII BaseTools to BaseTools project r1937. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10287 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Source/C/GenFw/GenFw.c | 4 -- BaseTools/Source/Python/AutoGen/AutoGen.py | 10 ++- BaseTools/Source/Python/AutoGen/UniClassObject.py | 4 +- BaseTools/Source/Python/GenFds/GenFds.py | 2 +- .../Source/Python/Workspace/MetaFileParser.py | 3 + BaseTools/Source/Python/build/build.py | 82 +++++++++++++++------- 6 files changed, 72 insertions(+), 33 deletions(-) (limited to 'BaseTools/Source') diff --git a/BaseTools/Source/C/GenFw/GenFw.c b/BaseTools/Source/C/GenFw/GenFw.c index 4d60814..ee02f85 100644 --- a/BaseTools/Source/C/GenFw/GenFw.c +++ b/BaseTools/Source/C/GenFw/GenFw.c @@ -3213,8 +3213,6 @@ Returns: if (PeHdr->Pe32.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { Optional32 = (EFI_IMAGE_OPTIONAL_HEADER32 *)&PeHdr->Pe32.OptionalHeader; - Optional32->MajorLinkerVersion = 0; - Optional32->MinorLinkerVersion = 0; Optional32->MajorOperatingSystemVersion = 0; Optional32->MinorOperatingSystemVersion = 0; Optional32->MajorImageVersion = 0; @@ -3307,8 +3305,6 @@ Returns: } } else if (PeHdr->Pe32.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) { Optional64 = (EFI_IMAGE_OPTIONAL_HEADER64 *)&PeHdr->Pe32.OptionalHeader; - Optional64->MajorLinkerVersion = 0; - Optional64->MinorLinkerVersion = 0; Optional64->MajorOperatingSystemVersion = 0; Optional64->MinorOperatingSystemVersion = 0; Optional64->MajorImageVersion = 0; diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index 4755e31..fa434e8 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -138,7 +138,7 @@ class WorkspaceAutoGen(AutoGen): # @param SkuId SKU id from command line # def _Init(self, WorkspaceDir, ActivePlatform, Target, Toolchain, ArchList, MetaFileDb, - BuildConfig, ToolDefinition, FlashDefinitionFile='', Fds=[], Fvs=[], SkuId=''): + BuildConfig, ToolDefinition, FlashDefinitionFile='', Fds=[], Fvs=[], SkuId='', UniFlag=None): self.MetaFile = ActivePlatform.MetaFile self.WorkspaceDir = WorkspaceDir self.Platform = ActivePlatform @@ -146,6 +146,7 @@ class WorkspaceAutoGen(AutoGen): self.ToolChain = Toolchain self.ArchList = ArchList self.SkuId = SkuId + self.UniFlag = UniFlag self.BuildDatabase = MetaFileDb self.TargetTxt = BuildConfig @@ -1191,6 +1192,13 @@ class PlatformAutoGen(AutoGen): BuildOptions[Tool][Attr] = Value[1:] else: BuildOptions[Tool][Attr] += " " + Value + if Module.AutoGenVersion < 0x00010005 and self.Workspace.UniFlag != None: + # + # Override UNI flag only for EDK module. + # + if 'BUILD' not in BuildOptions: + BuildOptions['BUILD'] = {} + BuildOptions['BUILD']['FLAGS'] = self.Workspace.UniFlag return BuildOptions Platform = property(_GetPlatform) diff --git a/BaseTools/Source/Python/AutoGen/UniClassObject.py b/BaseTools/Source/Python/AutoGen/UniClassObject.py index de2f93b..717c10f 100644 --- a/BaseTools/Source/Python/AutoGen/UniClassObject.py +++ b/BaseTools/Source/Python/AutoGen/UniClassObject.py @@ -1,4 +1,4 @@ -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -193,7 +193,7 @@ class UniFileClassObject(object): # Get Language definition # def GetLangDef(self, File, Line): - Lang = Line.split() + Lang = Line.split(u"//")[0].split() if len(Lang) != 3: try: FileIn = codecs.open(File, mode='rb', encoding='utf-16').read() diff --git a/BaseTools/Source/Python/GenFds/GenFds.py b/BaseTools/Source/Python/GenFds/GenFds.py index d586346..5e9a022 100644 --- a/BaseTools/Source/Python/GenFds/GenFds.py +++ b/BaseTools/Source/Python/GenFds/GenFds.py @@ -263,7 +263,7 @@ def main(): "\nPython", CODE_ERROR, "Tools code failure", - ExtraData="Please submit bug report in www.TianoCore.org, attaching following call stack trace!\n", + ExtraData="Please send email to edk2-buildtools-devel@lists.sourceforge.net for help, attaching following call stack trace!\n", RaiseError=False ) EdkLogger.quiet(traceback.format_exc()) diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py b/BaseTools/Source/Python/Workspace/MetaFileParser.py index 4c7ea03..eb2e038 100644 --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py @@ -398,6 +398,9 @@ class InfParser(MetaFileParser): -1, 0 ) + if IsFindBlockComment: + EdkLogger.error("Parser", FORMAT_INVALID, "Open block comments (starting with /*) are expected to end with */", + File=self.MetaFile) self._Done() ## Data parser for the format in which there's path diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py index 6129308..f608dee 100644 --- a/BaseTools/Source/Python/build/build.py +++ b/BaseTools/Source/Python/build/build.py @@ -656,14 +656,16 @@ class PeImageInfo(): # @param BaseName The full file path of image. # @param Guid The GUID for image. # @param Arch Arch of this image. - # @param OutpuDir The output directory for image. + # @param OutputDir The output directory for image. + # @param DebugDir The debug directory for image. # @param ImageClass PeImage Information # - def __init__(self, BaseName, Guid, Arch, OutpuDir, ImageClass): + def __init__(self, BaseName, Guid, Arch, OutputDir, DebugDir, ImageClass): self.BaseName = BaseName self.Guid = Guid self.Arch = Arch - self.OutpuDir = OutpuDir + self.OutputDir = OutputDir + self.DebugDir = DebugDir self.Image = ImageClass self.Image.Size = (self.Image.Size / 0x1000 + 1) * 0x1000 @@ -704,7 +706,7 @@ class Build(): BuildTarget, FlashDefinition, FdList=[], FvList=[], MakefileType="nmake", SilentMode=False, ThreadNumber=2, SkipAutoGen=False, Reparse=False, SkuId=None, - ReportFile=None, ReportType=None): + ReportFile=None, ReportType=None, UniFlag=None): self.WorkspaceDir = WorkspaceDir self.Target = Target @@ -731,6 +733,7 @@ class Build(): self.BuildDatabase = self.Db.BuildObject self.Platform = None self.LoadFixAddress = 0 + self.UniFlag = UniFlag # print dot charater during doing some time-consuming work self.Progress = Utils.Progressor() @@ -1007,22 +1010,26 @@ class Build(): sys.stdout.flush() ModuleInfo = ModuleList[InfFile] ModuleName = ModuleInfo.BaseName + ModuleOutputImage = ModuleInfo.Image.FileName + ModuleDebugImage = os.path.join(ModuleInfo.DebugDir, ModuleInfo.BaseName + '.efi') ## for SMM module in SMRAM, the SMRAM will be allocated from base to top. if not ModeIsSmm: BaseAddress = BaseAddress - ModuleInfo.Image.Size # # Update Image to new BaseAddress by GenFw tool # - LaunchCommand(["GenFw", "--rebase", str(BaseAddress), "-r", ModuleInfo.Image.FileName], ModuleInfo.OutpuDir) + LaunchCommand(["GenFw", "--rebase", str(BaseAddress), "-r", ModuleOutputImage], ModuleInfo.OutputDir) + LaunchCommand(["GenFw", "--rebase", str(BaseAddress), "-r", ModuleDebugImage], ModuleInfo.DebugDir) else: # # Set new address to the section header only for SMM driver. # - LaunchCommand(["GenFw", "--address", str(BaseAddress), "-r", ModuleInfo.Image.FileName], ModuleInfo.OutpuDir) + LaunchCommand(["GenFw", "--address", str(BaseAddress), "-r", ModuleOutputImage], ModuleInfo.OutputDir) + LaunchCommand(["GenFw", "--address", str(BaseAddress), "-r", ModuleDebugImage], ModuleInfo.DebugDir) # # Collect funtion address from Map file # - ImageMapTable = ModuleInfo.Image.FileName.replace('.efi', '.map') + ImageMapTable = ModuleOutputImage.replace('.efi', '.map') FunctionList = [] if os.path.exists(ImageMapTable): OrigImageBaseAddress = 0 @@ -1069,9 +1076,13 @@ class Build(): elif SectionHeader[0] in ['.data', '.sdata']: DataSectionAddress = SectionHeader[1] if AddrIsOffset: - MapBuffer.write('(GUID=%s, .textbaseaddress=-0x%010X, .databaseaddress=-0x%010X)\n\n' % (ModuleInfo.Guid, 0 - (BaseAddress + TextSectionAddress), 0 - (BaseAddress + DataSectionAddress))) + MapBuffer.write('(GUID=%s, .textbaseaddress=-0x%010X, .databaseaddress=-0x%010X)\n' % (ModuleInfo.Guid, 0 - (BaseAddress + TextSectionAddress), 0 - (BaseAddress + DataSectionAddress))) else: - MapBuffer.write('(GUID=%s, .textbaseaddress=0x%010X, .databaseaddress=0x%010X)\n\n' % (ModuleInfo.Guid, BaseAddress + TextSectionAddress, BaseAddress + DataSectionAddress)) + MapBuffer.write('(GUID=%s, .textbaseaddress=0x%010X, .databaseaddress=0x%010X)\n' % (ModuleInfo.Guid, BaseAddress + TextSectionAddress, BaseAddress + DataSectionAddress)) + # + # Add debug image full path. + # + MapBuffer.write('(IMAGE=%s)\n\n' % (ModuleDebugImage)) # # Add funtion address # @@ -1094,6 +1105,7 @@ class Build(): if self.Fdf != '': # First get the XIP base address for FV map file. GuidPattern = re.compile("[-a-fA-F0-9]+") + GuidName = re.compile("\(GUID=[-a-fA-F0-9]+") for FvName in Wa.FdfProfile.FvDict.keys(): FvMapBuffer = os.path.join(Wa.FvDir, FvName + '.Fv.map') if not os.path.exists(FvMapBuffer): @@ -1114,6 +1126,15 @@ class Build(): if GuidString.upper() in ModuleList: Line = Line.replace(GuidString, ModuleList[GuidString.upper()].Name) MapBuffer.write('%s' % (Line)) + # + # Add the debug image full path. + # + MatchGuid = GuidName.match(Line) + if MatchGuid != None: + GuidString = MatchGuid.group().split("=")[1] + if GuidString.upper() in ModuleList: + MapBuffer.write('(IMAGE=%s)\n' % (os.path.join(ModuleList[GuidString.upper()].DebugDir, ModuleList[GuidString.upper()].Name + '.efi'))) + FvMap.close() ## Collect MAP information of all modules @@ -1148,7 +1169,7 @@ class Build(): ImageClass = PeImageClass (OutputImageFile) if not ImageClass.IsValid: EdkLogger.error("build", FILE_PARSE_FAILURE, ExtraData=ImageClass.ErrorInfo) - ImageInfo = PeImageInfo(Module.Name, Module.Guid, Module.Arch, Module.OutputDir, ImageClass) + ImageInfo = PeImageInfo(Module.Name, Module.Guid, Module.Arch, Module.OutputDir, Module.DebugDir, ImageClass) if Module.ModuleType in ['PEI_CORE', 'PEIM', 'COMBINED_PEIM_DRIVER','PIC_PEIM', 'RELOCATABLE_PEIM', 'DXE_CORE']: PeiModuleList[Module.MetaFile] = ImageInfo PeiSize += ImageInfo.Image.Size @@ -1268,7 +1289,9 @@ class Build(): # # Save address map into MAP file. # - SaveFileOnChange(MapFilePath, MapBuffer.getvalue(), False) + MapFile = open(MapFilePath, "wb") + MapFile.write(MapBuffer.getvalue()) + MapFile.close() MapBuffer.close() if self.LoadFixAddress != 0: sys.stdout.write ("\nLoad Module At Fix Address Map file saved to %s\n" %(MapFilePath)) @@ -1291,7 +1314,8 @@ class Build(): self.Fdf, self.FdList, self.FvList, - self.SkuId + self.SkuId, + self.UniFlag ) self.BuildReport.AddPlatformReport(Wa) self.Progress.Stop("done!") @@ -1322,12 +1346,13 @@ class Build(): # Rebase module to the preferred memory address before GenFds # self._CollectModuleMapBuffer(MapBuffer, ModuleList) + if self.Fdf != '': + # + # create FDS again for the updated EFI image + # + self._Build("fds", Wa) if self.Fdf != '': # - # create FDS again for the updated EFI image - # - self._Build("fds", Wa) - # # Create MAP file for all platform FVs after GenFds. # self._CollectFvMapBuffer(MapBuffer, Wa, ModuleList) @@ -1357,7 +1382,8 @@ class Build(): self.Fdf, self.FdList, self.FvList, - self.SkuId + self.SkuId, + self.UniFlag ) Wa.CreateMakeFile(False) self.Progress.Stop("done!") @@ -1434,7 +1460,8 @@ class Build(): self.Fdf, self.FdList, self.FvList, - self.SkuId + self.SkuId, + self.UniFlag ) self.BuildReport.AddPlatformReport(Wa) Wa.CreateMakeFile(False) @@ -1521,14 +1548,12 @@ class Build(): if self.LoadFixAddress != 0: self._CollectModuleMapBuffer(MapBuffer, ModuleList) - # Generate FD image if there's a FDF file found - if self.Fdf != '' and self.Target in ["", "all", "fds"]: - LaunchCommand(Wa.BuildCommand + ["fds"], Wa.MakeFileDir) - - # Create MAP file for all platform FV after GenFds - if self.Target in ["", "all", "fds"]: if self.Fdf != '': # + # Generate FD image if there's a FDF file found + # + LaunchCommand(Wa.BuildCommand + ["fds"], Wa.MakeFileDir) + # # Create MAP file for all platform FVs after GenFds. # self._CollectFvMapBuffer(MapBuffer, Wa, ModuleList) @@ -1711,6 +1736,10 @@ def MyOptionParser(): Parser.add_option("-Y", "--report-type", action="append", type="choice", choices=['PCD','LIBRARY','FLASH','DEPEX','BUILD_FLAGS','FIXED_ADDRESS', 'EXECUTION_ORDER'], dest="ReportType", default=[], help="Flags that control the type of build report to generate. Must be one of: [PCD, LIBRARY, FLASH, DEPEX, BUILD_FLAGS, FIXED_ADDRESS, EXECUTION_ORDER]. "\ "To specify more than one flag, repeat this option on the command line and the default flag set is [PCD, LIBRARY, FLASH, DEPEX, BUILD_FLAGS, FIXED_ADDRESS]") + Parser.add_option("-F", "--flag", action="store", type="string", dest="Flag", + help="Specify the specific option to parse EDK UNI file. Must be one of: [-c, -s]. -c is for EDK framework UNI file, and -s is for EDK UEFI UNI file. "\ + "This option can also be specified by setting *_*_*_BUILD_FLAGS in [BuildOptions] section of platform DSC. If they are both specified, this value "\ + "will override the setting in [BuildOptions] section of platform DSC.") (Opt, Args)=Parser.parse_args() return (Opt, Args) @@ -1822,12 +1851,15 @@ def Main(): if ErrorCode != 0: EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) + if Option.Flag != None and Option.Flag not in ['-c', '-s']: + EdkLogger.error("build", OPTION_VALUE_INVALID, "UNI flag must be one of -c or -s") + MyBuild = Build(Target, Workspace, Option.PlatformFile, Option.ModuleFile, Option.TargetArch, Option.ToolChain, Option.BuildTarget, Option.FdfFile, Option.RomImage, Option.FvImage, None, Option.SilentMode, Option.ThreadNumber, Option.SkipAutoGen, Option.Reparse, Option.SkuId, - Option.ReportFile, Option.ReportType) + Option.ReportFile, Option.ReportType, Option.Flag) MyBuild.Launch() #MyBuild.DumpBuildData() except FatalError, X: -- cgit v1.1