]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/GenFds/AprioriSection.py
Sync EDKII BaseTools to BaseTools project r1971
[mirror_edk2.git] / BaseTools / Source / Python / GenFds / AprioriSection.py
CommitLineData
30fdf114
LG
1## @file\r
2# process APRIORI file data and generate PEI/DXE APRIORI file\r
3#\r
40d841f6 4# Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\r
30fdf114 5#\r
40d841f6 6# This program and the accompanying materials\r
30fdf114
LG
7# are licensed and made available under the terms and conditions of the BSD License\r
8# which accompanies this distribution. The full text of the license may be found at\r
9# http://opensource.org/licenses/bsd-license.php\r
10#\r
11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13#\r
14\r
15##\r
16# Import Modules\r
17#\r
18from struct import *\r
19import os\r
20import StringIO\r
21import FfsFileStatement\r
22from GenFdsGlobalVariable import GenFdsGlobalVariable\r
23from CommonDataClass.FdfClass import AprioriSectionClassObject\r
24from Common.String import *\r
25from Common.Misc import SaveFileOnChange,PathClass\r
26from Common import EdkLogger\r
27from Common.BuildToolError import *\r
28\r
29## process APRIORI file data and generate PEI/DXE APRIORI file\r
30#\r
31#\r
32class AprioriSection (AprioriSectionClassObject):\r
33 ## The constructor\r
34 #\r
35 # @param self The object pointer\r
36 #\r
37 def __init__(self):\r
38 AprioriSectionClassObject.__init__(self)\r
39 self.AprioriType = ""\r
40\r
41 ## GenFfs() method\r
42 #\r
43 # Generate FFS for APRIORI file\r
44 #\r
45 # @param self The object pointer\r
46 # @param FvName for whom apriori file generated\r
47 # @param Dict dictionary contains macro and its value\r
48 # @retval string Generated file name\r
49 #\r
50 def GenFfs (self, FvName, Dict = {}):\r
51 DXE_GUID = "FC510EE7-FFDC-11D4-BD41-0080C73C8881"\r
52 PEI_GUID = "1B45CC0A-156A-428A-AF62-49864DA0E6E6"\r
53 Buffer = StringIO.StringIO('')\r
54 AprioriFileGuid = DXE_GUID\r
55 if self.AprioriType == "PEI":\r
56 AprioriFileGuid = PEI_GUID\r
57 OutputAprFilePath = os.path.join (GenFdsGlobalVariable.WorkSpaceDir, \\r
58 GenFdsGlobalVariable.FfsDir,\\r
59 AprioriFileGuid + FvName)\r
60 if not os.path.exists(OutputAprFilePath) :\r
61 os.makedirs(OutputAprFilePath)\r
62\r
63 OutputAprFileName = os.path.join( OutputAprFilePath, \\r
64 AprioriFileGuid + FvName + '.Apri' )\r
65 AprFfsFileName = os.path.join (OutputAprFilePath,\\r
66 AprioriFileGuid + FvName + '.Ffs')\r
67\r
68 Dict.update(self.DefineVarDict)\r
69 for FfsObj in self.FfsList :\r
70 Guid = ""\r
71 if isinstance(FfsObj, FfsFileStatement.FileStatement):\r
72 Guid = FfsObj.NameGuid\r
73 else:\r
74 InfFileName = NormPath(FfsObj.InfFileName)\r
75 Arch = FfsObj.GetCurrentArch()\r
76\r
77 if Arch != None:\r
78 Dict['$(ARCH)'] = Arch\r
79 InfFileName = GenFdsGlobalVariable.MacroExtend(InfFileName, Dict, Arch)\r
80\r
81 if Arch != None:\r
82 Inf = GenFdsGlobalVariable.WorkSpace.BuildObject[PathClass(InfFileName, GenFdsGlobalVariable.WorkSpaceDir), Arch]\r
83 Guid = Inf.Guid\r
84\r
85 else:\r
86 Inf = GenFdsGlobalVariable.WorkSpace.BuildObject[PathClass(InfFileName, GenFdsGlobalVariable.WorkSpaceDir), 'COMMON']\r
87 Guid = Inf.Guid\r
88\r
89 self.BinFileList = Inf.Module.Binaries\r
90 if self.BinFileList == []:\r
91 EdkLogger.error("GenFds", RESOURCE_NOT_AVAILABLE,\r
92 "INF %s not found in build ARCH %s!" \\r
93 % (InfFileName, GenFdsGlobalVariable.ArchList))\r
94\r
95\r
96 GuidPart = Guid.split('-')\r
97 Buffer.write(pack('I', long(GuidPart[0], 16)))\r
98 Buffer.write(pack('H', int(GuidPart[1], 16)))\r
99 Buffer.write(pack('H', int(GuidPart[2], 16)))\r
100\r
101 for Num in range(2):\r
102 Char = GuidPart[3][Num*2:Num*2+2]\r
103 Buffer.write(pack('B', int(Char, 16)))\r
104\r
105 for Num in range(6):\r
106 Char = GuidPart[4][Num*2:Num*2+2]\r
107 Buffer.write(pack('B', int(Char, 16)))\r
108\r
109 SaveFileOnChange(OutputAprFileName, Buffer.getvalue())\r
110\r
111 RawSectionFileName = os.path.join( OutputAprFilePath, \\r
112 AprioriFileGuid + FvName + '.raw' )\r
113 GenFdsGlobalVariable.GenerateSection(RawSectionFileName, [OutputAprFileName], 'EFI_SECTION_RAW')\r
114 GenFdsGlobalVariable.GenerateFfs(AprFfsFileName, [RawSectionFileName],\r
115 'EFI_FV_FILETYPE_FREEFORM', AprioriFileGuid)\r
116\r
117 return AprFfsFileName\r
118\r