]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/GenFds/OptRomInfStatement.py
BaseTools/Tests: Update GNUmakefile to use python3 variable
[mirror_edk2.git] / BaseTools / Source / Python / GenFds / OptRomInfStatement.py
CommitLineData
30fdf114
LG
1## @file\r
2# process OptionROM generation from INF statement\r
3#\r
f7496d71 4# Copyright (c) 2007 - 2018, 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
bfa65b61
GL
18from . import RuleSimpleFile\r
19from . import RuleComplexFile\r
20from . import Section\r
30fdf114
LG
21import Common.GlobalData as GlobalData\r
22\r
23from Common.DataType import *\r
5a57246e 24from Common.StringUtils import *\r
bfa65b61
GL
25from .FfsInfStatement import FfsInfStatement\r
26from .GenFdsGlobalVariable import GenFdsGlobalVariable\r
30fdf114 27\r
f7496d71 28##\r
30fdf114
LG
29#\r
30#\r
31class OptRomInfStatement (FfsInfStatement):\r
32 ## The constructor\r
33 #\r
34 # @param self The object pointer\r
35 #\r
36 def __init__(self):\r
37 FfsInfStatement.__init__(self)\r
38 self.OverrideAttribs = None\r
39\r
40 ## __GetOptRomParams() method\r
41 #\r
42 # Parse inf file to get option ROM related parameters\r
43 #\r
44 # @param self The object pointer\r
45 #\r
46 def __GetOptRomParams(self):\r
4231a819 47 if self.OverrideAttribs is None:\r
8f3f5794 48 self.OverrideAttribs = OverrideAttribs()\r
fd171542 49\r
4231a819 50 if self.OverrideAttribs.NeedCompress is None:\r
79b74a03 51 self.OverrideAttribs.NeedCompress = self.OptRomDefs.get ('PCI_COMPRESS')\r
fd171542 52 if self.OverrideAttribs.NeedCompress is not None:\r
53 if self.OverrideAttribs.NeedCompress.upper() not in ('TRUE', 'FALSE'):\r
79b74a03 54 GenFdsGlobalVariable.ErrorLogger( "Expected TRUE/FALSE for PCI_COMPRESS: %s" %self.InfFileName)\r
fd171542 55 self.OverrideAttribs.NeedCompress = \\r
56 self.OverrideAttribs.NeedCompress.upper() == 'TRUE'\r
57\r
4231a819 58 if self.OverrideAttribs.PciVendorId is None:\r
30fdf114 59 self.OverrideAttribs.PciVendorId = self.OptRomDefs.get ('PCI_VENDOR_ID')\r
f7496d71 60\r
4231a819 61 if self.OverrideAttribs.PciClassCode is None:\r
30fdf114 62 self.OverrideAttribs.PciClassCode = self.OptRomDefs.get ('PCI_CLASS_CODE')\r
f7496d71 63\r
4231a819 64 if self.OverrideAttribs.PciDeviceId is None:\r
30fdf114 65 self.OverrideAttribs.PciDeviceId = self.OptRomDefs.get ('PCI_DEVICE_ID')\r
f7496d71 66\r
4231a819 67 if self.OverrideAttribs.PciRevision is None:\r
30fdf114 68 self.OverrideAttribs.PciRevision = self.OptRomDefs.get ('PCI_REVISION')\r
f7496d71
LG
69\r
70# InfObj = GenFdsGlobalVariable.WorkSpace.BuildObject[self.PathClassObj, self.CurrentArch]\r
30fdf114
LG
71# RecordList = InfObj._RawData[MODEL_META_DATA_HEADER, InfObj._Arch, InfObj._Platform]\r
72# for Record in RecordList:\r
73# Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False)\r
f7496d71 74# Name = Record[0]\r
30fdf114
LG
75 ## GenFfs() method\r
76 #\r
77 # Generate FFS\r
78 #\r
79 # @param self The object pointer\r
80 # @retval string Generated .efi file name\r
81 #\r
37de70b7 82 def GenFfs(self, IsMakefile=False):\r
30fdf114
LG
83 #\r
84 # Parse Inf file get Module related information\r
85 #\r
86\r
87 self.__InfParse__()\r
88 self.__GetOptRomParams()\r
89 #\r
90 # Get the rule of how to generate Ffs file\r
91 #\r
92 Rule = self.__GetRule__()\r
93 GenFdsGlobalVariable.VerboseLogger( "Packing binaries from inf file : %s" %self.InfFileName)\r
30fdf114
LG
94 #\r
95 # For the rule only has simpleFile\r
96 #\r
97 if isinstance (Rule, RuleSimpleFile.RuleSimpleFile) :\r
37de70b7 98 EfiOutputList = self.__GenSimpleFileSection__(Rule, IsMakefile=IsMakefile)\r
30fdf114
LG
99 return EfiOutputList\r
100 #\r
101 # For Rule has ComplexFile\r
102 #\r
103 elif isinstance(Rule, RuleComplexFile.RuleComplexFile):\r
37de70b7 104 EfiOutputList = self.__GenComplexFileSection__(Rule, IsMakefile=IsMakefile)\r
30fdf114
LG
105 return EfiOutputList\r
106\r
107 ## __GenSimpleFileSection__() method\r
108 #\r
109 # Get .efi files according to simple rule.\r
110 #\r
111 # @param self The object pointer\r
112 # @param Rule The rule object used to generate section\r
113 # @retval string File name of the generated section file\r
114 #\r
37de70b7 115 def __GenSimpleFileSection__(self, Rule, IsMakefile = False):\r
30fdf114
LG
116 #\r
117 # Prepare the parameter of GenSection\r
118 #\r
119\r
120 OutputFileList = []\r
4231a819 121 if Rule.FileName is not None:\r
30fdf114
LG
122 GenSecInputFile = self.__ExtendMacro__(Rule.FileName)\r
123 OutputFileList.append(GenSecInputFile)\r
124 else:\r
125 OutputFileList, IsSect = Section.Section.GetFileList(self, '', Rule.FileExtension)\r
126\r
127 return OutputFileList\r
128\r
129\r
130 ## __GenComplexFileSection__() method\r
131 #\r
132 # Get .efi by sections in complex Rule\r
133 #\r
134 # @param self The object pointer\r
135 # @param Rule The rule object used to generate section\r
136 # @retval string File name of the generated section file\r
137 #\r
37de70b7 138 def __GenComplexFileSection__(self, Rule, IsMakefile=False):\r
30fdf114
LG
139\r
140 OutputFileList = []\r
141 for Sect in Rule.SectionList:\r
91fa33ee 142 if Sect.SectionType == BINARY_FILE_TYPE_PE32:\r
4231a819 143 if Sect.FileName is not None:\r
30fdf114
LG
144 GenSecInputFile = self.__ExtendMacro__(Sect.FileName)\r
145 OutputFileList.append(GenSecInputFile)\r
146 else:\r
147 FileList, IsSect = Section.Section.GetFileList(self, '', Sect.FileExtension)\r
f7496d71
LG
148 OutputFileList.extend(FileList)\r
149\r
30fdf114 150 return OutputFileList\r
8f3f5794
GL
151\r
152class OverrideAttribs:\r
153\r
154 ## The constructor\r
155 #\r
156 # @param self The object pointer\r
157 #\r
158 def __init__(self):\r
159\r
160 self.PciVendorId = None\r
161 self.PciClassCode = None\r
162 self.PciDeviceId = None\r
163 self.PciRevision = None\r
164 self.NeedCompress = None\r