]>
git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/Python/BPDG/BPDG.py
2 # Intel Binary Product Data Generation Tool (Intel BPDG).
3 # This tool provide a simple process for the creation of a binary file containing read-only
4 # configuration data for EDK II platforms that contain Dynamic and DynamicEx PCDs described
5 # in VPD sections. It also provide an option for specifying an alternate name for a mapping
6 # file of PCD layout for use during the build when the platform integrator selects to use
7 # automatic offset calculation.
9 # Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
11 # This program and the accompanying materials
12 # are licensed and made available under the terms and conditions of the BSD License
13 # which accompanies this distribution. The full text of the license may be found at
14 # http://opensource.org/licenses/bsd-license.php
16 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
17 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
23 import Common
.LongFilePathOs
as os
25 import encodings
.ascii
27 from optparse
import OptionParser
28 from Common
import EdkLogger
29 from Common
.BuildToolError
import *
30 from Common
.BuildVersion
import gBUILD_VERSION
32 import StringTable
as st
35 PROJECT_NAME
= st
.LBL_BPDG_LONG_UNI
36 VERSION
= (st
.LBL_BPDG_VERSION
+ " Build " + gBUILD_VERSION
)
38 ## Tool entrance method
40 # This method mainly dispatch specific methods per the command line options.
41 # If no error found, return zero value so the caller of this tool can know
42 # if it's executed successfully or not.
44 # @retval 0 Tool was successful
45 # @retval 1 Tool failed
50 # Initialize log system
51 EdkLogger
.Initialize()
52 Options
, Args
= MyOptionParser()
56 if Options
.opt_verbose
:
57 EdkLogger
.SetLevel(EdkLogger
.VERBOSE
)
58 elif Options
.opt_quiet
:
59 EdkLogger
.SetLevel(EdkLogger
.QUIET
)
60 elif Options
.debug_level
is not None:
61 EdkLogger
.SetLevel(Options
.debug_level
+ 1)
63 EdkLogger
.SetLevel(EdkLogger
.INFO
)
65 if Options
.bin_filename
is None:
66 EdkLogger
.error("BPDG", ATTRIBUTE_NOT_AVAILABLE
, "Please use the -o option to specify the file name for the VPD binary file")
67 if Options
.filename
is None:
68 EdkLogger
.error("BPDG", ATTRIBUTE_NOT_AVAILABLE
, "Please use the -m option to specify the file name for the mapping file")
71 if Options
.opt_force
is not None:
74 if (Args
[0] is not None) :
75 StartBpdg(Args
[0], Options
.filename
, Options
.bin_filename
, Force
)
77 EdkLogger
.error("BPDG", ATTRIBUTE_NOT_AVAILABLE
, "Please specify the file which contain the VPD pcd info.",
83 ## Parse command line options
85 # Using standard Python module optparse to parse command line option of this tool.
87 # @retval options A optparse.Values object containing the parsed options
88 # @retval args Target of BPDG command
92 # Process command line firstly.
94 parser
= OptionParser(version
="%s - Version %s" % (PROJECT_NAME
, VERSION
),
97 usage
=st
.LBL_BPDG_USAGE
99 parser
.add_option('-d', '--debug', action
='store', type="int", dest
='debug_level',
100 help=st
.MSG_OPTION_DEBUG_LEVEL
)
101 parser
.add_option('-v', '--verbose', action
='store_true', dest
='opt_verbose',
102 help=st
.MSG_OPTION_VERBOSE
)
103 parser
.add_option('-q', '--quiet', action
='store_true', dest
='opt_quiet', default
=False,
104 help=st
.MSG_OPTION_QUIET
)
105 parser
.add_option('-o', '--vpd-filename', action
='store', dest
='bin_filename',
106 help=st
.MSG_OPTION_VPD_FILENAME
)
107 parser
.add_option('-m', '--map-filename', action
='store', dest
='filename',
108 help=st
.MSG_OPTION_MAP_FILENAME
)
109 parser
.add_option('-f', '--force', action
='store_true', dest
='opt_force',
110 help=st
.MSG_OPTION_FORCE
)
112 (options
, args
) = parser
.parse_args()
114 EdkLogger
.info("Please specify the filename.txt file which contain the VPD pcd info!")
115 EdkLogger
.info(parser
.usage
)
120 ## Start BPDG and call the main functions
122 # This method mainly focus on call GenVPD class member functions to complete
123 # BPDG's target. It will process VpdFile override, and provide the interface file
126 # @Param InputFileName The filename include the vpd type pcd information
127 # @param MapFileName The filename of map file that stores vpd type pcd information.
128 # This file will be generated by the BPDG tool after fix the offset
129 # and adjust the offset to make the pcd data aligned.
130 # @param VpdFileName The filename of Vpd file that hold vpd pcd information.
131 # @param Force Override the exist Vpdfile or not.
133 def StartBpdg(InputFileName
, MapFileName
, VpdFileName
, Force
):
134 if os
.path
.exists(VpdFileName
) and not Force
:
135 print "\nFile %s already exist, Overwrite(Yes/No)?[Y]: " % VpdFileName
136 choice
= sys
.stdin
.readline()
137 if choice
.strip().lower() not in ['y', 'yes', '']:
140 GenVPD
= GenVpd
.GenVPD (InputFileName
, MapFileName
, VpdFileName
)
142 EdkLogger
.info('%-24s = %s' % ("VPD input data file: ", InputFileName
))
143 EdkLogger
.info('%-24s = %s' % ("VPD output map file: ", MapFileName
))
144 EdkLogger
.info('%-24s = %s' % ("VPD output binary file: ", VpdFileName
))
146 GenVPD
.ParserInputFile()
147 GenVPD
.FormatFileLine()
148 GenVPD
.FixVpdOffset()
149 GenVPD
.GenerateVpdFile(MapFileName
, VpdFileName
)
151 EdkLogger
.info("- Vpd pcd fixed done! -")
153 if __name__
== '__main__':
155 ## 0-127 is a safe return range, and 1 is a standard default error
156 if r
< 0 or r
> 127: r
= 1