]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/GenFds/Capsule.py
Add support for ${s_*} and ${d_*} macros for in FDF file for the INF files, and for...
[mirror_edk2.git] / BaseTools / Source / Python / GenFds / Capsule.py
CommitLineData
30fdf114
LG
1## @file\r
2# generate capsule\r
3#\r
1be2ed90 4# Copyright (c) 2007 - 2014, 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 GenFdsGlobalVariable import GenFdsGlobalVariable\r
19from CommonDataClass.FdfClass import CapsuleClassObject\r
1be2ed90 20import Common.LongFilePathOs as os\r
30fdf114
LG
21import subprocess\r
22import StringIO\r
23from Common.Misc import SaveFileOnChange\r
fd171542 24from GenFds import GenFds\r
30fdf114
LG
25\r
26\r
27T_CHAR_LF = '\n'\r
28\r
29## create inf file describes what goes into capsule and call GenFv to generate capsule\r
30#\r
31#\r
32class Capsule (CapsuleClassObject) :\r
33 ## The constructor\r
34 #\r
35 # @param self The object pointer\r
36 #\r
37 def __init__(self):\r
38 CapsuleClassObject.__init__(self)\r
39 # For GenFv\r
40 self.BlockSize = None\r
41 # For GenFv\r
42 self.BlockNum = None\r
fd171542 43 self.CapsuleName = None\r
30fdf114
LG
44\r
45 ## Generate capsule\r
46 #\r
47 # @param self The object pointer\r
fd171542 48 # @retval string Generated Capsule file path\r
30fdf114
LG
49 #\r
50 def GenCapsule(self):\r
fd171542 51 if self.UiCapsuleName.upper() + 'cap' in GenFds.ImageBinDict.keys():\r
52 return GenFds.ImageBinDict[self.UiCapsuleName.upper() + 'cap']\r
53\r
54 GenFdsGlobalVariable.InfLogger( "\nGenerate %s Capsule" %self.UiCapsuleName)\r
30fdf114
LG
55 CapInfFile = self.GenCapInf()\r
56 CapInfFile.writelines("[files]" + T_CHAR_LF)\r
fd171542 57 CapFileList = []\r
30fdf114 58 for CapsuleDataObj in self.CapsuleDataList :\r
fd171542 59 CapsuleDataObj.CapsuleName = self.CapsuleName\r
30fdf114 60 FileName = CapsuleDataObj.GenCapsuleSubItem()\r
fd171542 61 CapsuleDataObj.CapsuleName = None\r
62 CapFileList.append(FileName)\r
30fdf114
LG
63 CapInfFile.writelines("EFI_FILE_NAME = " + \\r
64 FileName + \\r
65 T_CHAR_LF)\r
66 SaveFileOnChange(self.CapInfFileName, CapInfFile.getvalue(), False)\r
67 CapInfFile.close()\r
68 #\r
69 # Call GenFv tool to generate capsule\r
70 #\r
71 CapOutputFile = os.path.join(GenFdsGlobalVariable.FvDir, self.UiCapsuleName)\r
72 CapOutputFile = CapOutputFile + '.Cap'\r
73 GenFdsGlobalVariable.GenerateFirmwareVolume(\r
74 CapOutputFile,\r
75 [self.CapInfFileName],\r
fd171542 76 Capsule=True,\r
77 FfsList=CapFileList\r
30fdf114 78 )\r
fd171542 79\r
80 GenFdsGlobalVariable.VerboseLogger( "\nGenerate %s Capsule Successfully" %self.UiCapsuleName)\r
30fdf114 81 GenFdsGlobalVariable.SharpCounter = 0\r
fd171542 82 GenFds.ImageBinDict[self.UiCapsuleName.upper() + 'cap'] = CapOutputFile\r
83 return CapOutputFile\r
30fdf114
LG
84\r
85 ## Generate inf file for capsule\r
86 #\r
87 # @param self The object pointer\r
88 # @retval file inf file object\r
89 #\r
90 def GenCapInf(self):\r
91 self.CapInfFileName = os.path.join(GenFdsGlobalVariable.FvDir,\r
92 self.UiCapsuleName + "_Cap" + '.inf')\r
93 CapInfFile = StringIO.StringIO() #open (self.CapInfFileName , 'w+')\r
94\r
95 CapInfFile.writelines("[options]" + T_CHAR_LF)\r
96\r
97 for Item in self.TokensDict.keys():\r
98 CapInfFile.writelines("EFI_" + \\r
99 Item + \\r
100 ' = ' + \\r
101 self.TokensDict.get(Item) + \\r
102 T_CHAR_LF)\r
103\r
104 return CapInfFile\r