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]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to