Thank you for converting to Python. Please use python argparse module to parse arguments and make sure the tool supports the standard EDK II tool command line arguments. BinToPcd is a good example:
https://github.com/tianocore/edk2/blob/master/BaseTools/Scripts/BinToPcd.py Mike > -----Original Message----- > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] > On Behalf Of Zhang, Shenglei > Sent: Friday, June 14, 2019 12:39 AM > To: devel@edk2.groups.io > Cc: Fan, ZhijuX <zhijux....@intel.com>; Feng, Bob C > <bob.c.f...@intel.com>; Gao, Liming > <liming....@intel.com> > Subject: [edk2-devel] [PATCH] BaseTools/GenBiosId: Add a > new tool GenBiosId > > From: "Fan, Zhiju" <zhijux....@intel.com> > > GenBiosId is a tool to generate the BIOS ID binary file > which uses the data from the configuration file. > https://bugzilla.tianocore.org/show_bug.cgi?id=1846 > > v2:v1 is a tool of C type and v2 is python type. > > Cc: Bob Feng <bob.c.f...@intel.com> > Cc: Liming Gao <liming....@intel.com> > Signed-off-by: Shenglei Zhang <shenglei.zh...@intel.com> > --- > BaseTools/BinWrappers/PosixLike/GenBiosId | 14 +++ > .../BinWrappers/WindowsLike/GenBiosId.bat | 3 + > BaseTools/Source/Python/GenBiosId/BiosId.env | 27 > +++++ > .../Source/Python/GenBiosId/GenBiosId.py | 108 > ++++++++++++++++++ > 4 files changed, 152 insertions(+) > create mode 100644 > BaseTools/BinWrappers/PosixLike/GenBiosId > create mode 100644 > BaseTools/BinWrappers/WindowsLike/GenBiosId.bat > create mode 100644 > BaseTools/Source/Python/GenBiosId/BiosId.env > create mode 100644 > BaseTools/Source/Python/GenBiosId/GenBiosId.py > > diff --git a/BaseTools/BinWrappers/PosixLike/GenBiosId > b/BaseTools/BinWrappers/PosixLike/GenBiosId > new file mode 100644 > index 000000000000..9fb68299e4c6 > --- /dev/null > +++ b/BaseTools/BinWrappers/PosixLike/GenBiosId > @@ -0,0 +1,14 @@ > +#!/usr/bin/env bash > +#python `dirname $0`/RunToolFromSource.py `basename $0` > $* > + > +# If a ${PYTHON_COMMAND} command is available, use it in > preference to > +python if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; > then > + python_exe=${PYTHON_COMMAND} > +fi > + > +full_cmd=${BASH_SOURCE:-$0} # see > +http://mywiki.wooledge.org/BashFAQ/028 for a discussion > of why $0 is > +not a good choice here dir=$(dirname "$full_cmd") > exe=$(basename > +"$full_cmd") > + > +export > PYTHONPATH="$dir/../../Source/Python${PYTHONPATH:+:"$PYTH > ONPATH"}" > +exec "${python_exe:-python}" > "$dir/../../Source/Python/$exe/$exe.py" "$@" > diff --git > a/BaseTools/BinWrappers/WindowsLike/GenBiosId.bat > b/BaseTools/BinWrappers/WindowsLike/GenBiosId.bat > new file mode 100644 > index 000000000000..9616cd893bec > --- /dev/null > +++ b/BaseTools/BinWrappers/WindowsLike/GenBiosId.bat > @@ -0,0 +1,3 @@ > +@setlocal > +@set ToolName=%~n0% > +@%PYTHON_COMMAND% > +%BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py > %* > diff --git a/BaseTools/Source/Python/GenBiosId/BiosId.env > b/BaseTools/Source/Python/GenBiosId/BiosId.env > new file mode 100644 > index 000000000000..92805e3cb78c > --- /dev/null > +++ b/BaseTools/Source/Python/GenBiosId/BiosId.env > @@ -0,0 +1,27 @@ > +## @file > +# This file is used to define the BIOS ID parameters of > the build. > +# This file is processed by GenBiosId. > +# Here, it is just a template and can be customized by > user. > +# > +# BIOS ID string format: > +# > $(BOARD_ID)$(BOARD_REV).$(BOARD_EXT).$(VERSION_MAJOR).$(B > UILD_TYPE)$(VERSION_MINOR).YYMMDDHHMM > +# All fields must have a fixed length. YYMMDDHHMM is > UTC time. > +# Example: "EMLATOR1.000.0001.D01.1906141517" > +# > +# If DATE is specified for YYMMDD and TIME is specified > for HHMM like > +below, # GenBiosId will use the value of DATE and TIME > to fill > +YYMMDDHHMM, # otherwise GenBiosId will fill YYMMDDHHMM > with current UTC time of the build machine. > +# DATE = 190614 > +# TIME = 1517 > +# > +# Copyright (c) 2019, Intel Corporation. All rights > reserved.<BR> # > +SPDX-License-Identifier: BSD-2-Clause-Patent # ## > [config] > +BOARD_ID = EMLATOR > +BOARD_REV = 1 > +BOARD_EXT = 000 > +BUILD_TYPE = D > +VERSION_MAJOR = 0001 > +VERSION_MINOR = 01 > diff --git > a/BaseTools/Source/Python/GenBiosId/GenBiosId.py > b/BaseTools/Source/Python/GenBiosId/GenBiosId.py > new file mode 100644 > index 000000000000..1be99f4a5931 > --- /dev/null > +++ b/BaseTools/Source/Python/GenBiosId/GenBiosId.py > @@ -0,0 +1,108 @@ > +## @file > +# Trim files preprocessed by compiler > +# > +# Copyright (c) 2019, Intel Corporation. All rights > reserved.<BR> # > +SPDX-License-Identifier: BSD-2-Clause-Patent # > + > +## > +# Import Modules > +# > +import Common.LongFilePathOs as os > +import sys > +import struct > +import time > +import datetime > +try: > + from configparser import ConfigParser > +except: > + from ConfigParser import ConfigParser from > Common.BuildToolError > +import * from Common.Misc import * from Common.DataType > import * from > +Common.BuildVersion import gBUILD_VERSION import > Common.EdkLogger as > +EdkLogger from Common.LongFilePathSupport import > OpenLongFilePath as > +open > + > +_BIOS_Signature = "$IBIOSI$" > +_SectionKeyName = '__name__' > +_SectionName = 'config' > + > +_ConfigItem = { > + "BOARD_ID" : {'Value' : '', 'Length' : 7}, > + "BOARD_REV" : {'Value' : '', 'Length' : 1}, > + "BOARD_EXT" : { 'Value' : '', 'Length' : 3}, > + "BUILD_TYPE" : {'Value' : '', 'Length' :1}, > + "VERSION_MAJOR" : {'Value' : '0000', 'Length' : 4}, > + "VERSION_MINOR" : {'Value' : '00', 'Length' : 2}, > + > +} > + > + > +_Usage = "Usage: GenBiosId -i Configfile -o OutputFile > [-ob OutputBatchFile]" > +_ConfigSectionNotDefine = "Not support the config file > format, need config section" > +_ConfigLenInvalid = "Config item %s length is invalid" > +_ConfigItemInvalid = "Item %s is invalid" > + > +def Main(): > + try: > + EdkLogger.Initialize() > + if len(sys.argv) !=5 and len(sys.argv) != 7: > + EdkLogger.error("GenBiosId", OPTION_MISSING, > ExtraData=_Usage) > + except FatalError as X: > + return 1 > + InputFile = '' > + OutputFile = '' > + OutputBatchFile = '' > + for Index, Item in enumerate(sys.argv): > + if '-i' == Item: > + InputFile = sys.argv[Index + 1] > + if '-o' == Item: > + OutputFile = sys.argv[Index + 1] > + if '-ob' == Item: > + OutputBatchFile = sys.argv[Index + 1] > + if not os.path.exists(InputFile): > + EdkLogger.error("GenBiosId", FILE_NOT_FOUND, > ExtraData="Input file not found") > + cf = ConfigParser() > + cf.optionxform = str > + cf.read(InputFile) > + if _SectionName not in cf._sections: > + EdkLogger.error("GenBiosId", > FORMAT_NOT_SUPPORTED, ExtraData=_ConfigSectionNotDefine) > + for Item in cf._sections[_SectionName]: > + if Item == _SectionKeyName: > + continue > + if Item not in _ConfigItem: > + EdkLogger.error("GenBiosId", FORMAT_INVALID, > ExtraData=_ConfigItemInvalid % Item) > + _ConfigItem[Item]['Value'] = > cf._sections[_SectionName][Item] > + if len(_ConfigItem[Item]['Value']) != > _ConfigItem[Item]['Length']: > + EdkLogger.error("GenBiosId", FORMAT_INVALID, > ExtraData=_ConfigLenInvalid % Item) > + for Item in _ConfigItem: > + if not _ConfigItem[Item]['Value']: > + EdkLogger.error("GenBiosId", > FORMAT_UNKNOWN_ERROR, ExtraData="Item %s is missing" % > Item) > + utcnow = datetime.datetime.utcnow() > + TimeStamp = time.strftime("%y%m%d%H%M", > utcnow.timetuple()) > + > + Id_Str = _ConfigItem['BOARD_ID']['Value'] + > _ConfigItem['BOARD_REV']['Value'] + '.' + > _ConfigItem['BOARD_EXT']['Value'] + '.' + > _ConfigItem['VERSION_MAJOR']['Value'] + \ > + '.' + _ConfigItem["BUILD_TYPE"]['Value'] + > _ConfigItem['VERSION_MINOR']['Value'] + '.' + TimeStamp > + with open(OutputFile, 'wb') as FdOut: > + for i in _BIOS_Signature: > + FdOut.write(struct.pack('B', ord(i))) > + > + for i in Id_Str: > + FdOut.write(struct.pack('H', ord(i))) > + > + FdOut.write(struct.pack('H', 0x00)) > + if OutputBatchFile: > + with open(OutputBatchFile, 'w') as FdOut: > + if sys.platform.startswith('win'): > + Id_Str = 'SET BIOS_ID=' + Id_Str > + else: > + Id_Str = 'export BIOS_ID=' + Id_Str > + FdOut.write(Id_Str) > + return 0 > + > +if __name__ == '__main__': > + r = Main() > + ## 0-127 is a safe return range, and 1 is a standard > default error > + if r < 0 or r > 127: r = 1 > + sys.exit(r) > -- > 2.18.0.windows.1 > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#42440): https://edk2.groups.io/g/devel/message/42440 Mute This Topic: https://groups.io/mt/32061587/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-