Mike: I agree this suggestion. How about introduce -ot option for text file to include this string?
Thanks Liming > -----Original Message----- > From: Kinney, Michael D > Sent: Tuesday, June 18, 2019 1:18 AM > To: Fan, ZhijuX <zhijux....@intel.com>; devel@edk2.groups.io; Kinney, Michael > D <michael.d.kin...@intel.com> > Cc: Gao, Liming <liming....@intel.com>; Feng, Bob C <bob.c.f...@intel.com>; > Zhang, Shenglei <shenglei.zh...@intel.com> > Subject: RE: [PATCH V2] BaseTools/GenBiosId: Add a new tool GenBiosId > > We would like to move to Python based tools for > everything with no requirements to use batch files > or shell scripts. > > Do we really need the -ob --batch flag? I looks > like the feature it provides is a text string of the > BIOSID. Can't we send that to stdout or just put > that text string in an output file without using > any batch file or shell script specific syntax? > > Thanks, > > Mike > > > > > -----Original Message----- > > From: Fan, ZhijuX > > Sent: Monday, June 17, 2019 3:54 AM > > To: devel@edk2.groups.io > > Cc: Gao, Liming <liming....@intel.com>; Feng, Bob C > > <bob.c.f...@intel.com>; Zhang, Shenglei > > <shenglei.zh...@intel.com>; Kinney, Michael D > > <michael.d.kin...@intel.com> > > Subject: [PATCH V2] BaseTools/GenBiosId: Add a new tool > > GenBiosId > > > > 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 > > +++ > > BaseTools/BinWrappers/WindowsLike/GenBiosId.bat | 3 + > > BaseTools/Source/Python/GenBiosId/BiosId.env | 27 > > ++++++ > > BaseTools/Source/Python/GenBiosId/GenBiosId.py | 118 > > ++++++++++++++++++++++++ > > 4 files changed, 162 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 0000000000..1dd28e9662 > > --- /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 0000000000..e1f61382c8 > > --- /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 0000000000..e1e913da76 > > --- /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 0000000000..8259b17afd > > --- /dev/null > > +++ b/BaseTools/Source/Python/GenBiosId/GenBiosId.py > > @@ -0,0 +1,118 @@ > > +## @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 > > +import argparse > > +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' > > + > > +__prog__ = 'GenBiosld' > > +__description__ = 'Trim files preprocessed by compiler' > > +__copyright__ = 'Copyright (c) 2019, Intel Corporation. > > All rights reserved.<BR> ' > > +__version__ = '%s Version %s' % (__prog__, '0.1 ') > > + > > +_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(): > > + parser = argparse.ArgumentParser(prog=__prog__, > > + > > description=__description__ + __copyright__ + _Usage, > > + > > conflict_handler='resolve') > > + parser.add_argument('-v', '--version', > > action='version', version=__version__, > > + help="show program's version > > number and exit") > > + parser.add_argument('-i', '--int', > > metavar='FILENAME', dest='InputFile', help="Input Config > > file") > > + parser.add_argument('-o', '--out', > > metavar='FILENAME', dest='OutputFile', help="Output > > file") > > + parser.add_argument('-ob', '--batch', > > metavar='FILENAME', dest='OutputBatchFile', > > help="OutputBatch file") > > + Options = parser.parse_args() > > + try: > > + EdkLogger.Initialize() > > + if len(sys.argv) !=5 and not (len(sys.argv) == 7 > > and Options.OutputBatchFile): > > + EdkLogger.error("GenBiosId", OPTION_MISSING, > > ExtraData=_Usage) > > + elif not Options.InputFile or not > > Options.OutputFile: > > + EdkLogger.error("GenBiosId", OPTION_MISSING, > > ExtraData=_Usage) > > + except FatalError as X: > > + return 1 > > + InputFile = Options.InputFile > > + OutputFile = Options.OutputFile > > + OutputBatchFile = Options.OutputBatchFile > > + 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.14.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#42542): https://edk2.groups.io/g/devel/message/42542 Mute This Topic: https://groups.io/mt/32093449/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-