From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.93; helo=mga11.intel.com; envelope-from=bob.c.feng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 0DAE8208F6158 for ; Tue, 19 Feb 2019 05:58:57 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Feb 2019 05:58:54 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,388,1544515200"; d="scan'208";a="125568756" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga008.fm.intel.com with ESMTP; 19 Feb 2019 05:58:55 -0800 Received: from fmsmsx102.amr.corp.intel.com (10.18.124.200) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 19 Feb 2019 05:58:55 -0800 Received: from shsmsx105.ccr.corp.intel.com (10.239.4.158) by FMSMSX102.amr.corp.intel.com (10.18.124.200) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 19 Feb 2019 05:58:54 -0800 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.110]) by SHSMSX105.ccr.corp.intel.com ([169.254.11.253]) with mapi id 14.03.0415.000; Tue, 19 Feb 2019 21:58:52 +0800 From: "Feng, Bob C" To: "Gao, Liming" , "edk2-devel@lists.01.org" Thread-Topic: [edk2] [Patch] BaseTools: Remove unused txt files Thread-Index: AQHUxTtbVt3JzU2FzEKqDJH7fJzs86XnK8/w Date: Tue, 19 Feb 2019 13:58:52 +0000 Message-ID: <08650203BA1BD64D8AD9B6D5D74A85D160089A4A@SHSMSX101.ccr.corp.intel.com> References: <20190215143218.18100-1-liming.gao@intel.com> In-Reply-To: <20190215143218.18100-1-liming.gao@intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYzc1MGQ1MDktZTBmNC00NmVlLWFkYmYtZmNiZjM5MTIzMDFhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiYzZZcGFrd1Z6ZmwrXC9EUGsrblZOd2xXNXhvWTlSRTZBTE9Kdk1lSU1GaDBGUHpvc0xHZGVLZ1YyWHJFUjlqbG4ifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch] BaseTools: Remove unused txt files X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Feb 2019 13:58:58 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Bob Feng -----Original Message----- From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Limi= ng Gao Sent: Friday, February 15, 2019 10:32 PM To: edk2-devel@lists.01.org Subject: [edk2] [Patch] BaseTools: Remove unused txt files externals.txt is to refer to the binary Win32. It is not used any longer. BuildNotes.txt is to freeze BaseTools python. It is not used any longer. BinaryFiles.txt is to list the file in Bin directory. But, Bin dir is empty= . building-gcc.txt and gcc is for mingw-gcc. It is not used any longer. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Liming Gao --- BaseTools/Bin/externals.txt | 1 - BaseTools/BuildNotes.txt | 83 ------ BaseTools/Source/BinaryFiles.txt | 79 ------ BaseTools/building-gcc.txt | 15 -- BaseTools/gcc/README.txt | 71 ----- BaseTools/gcc/mingw-gcc-build.py | 565 -----------------------------------= ---- 6 files changed, 814 deletions(-) delete mode 100644 BaseTools/Bin/externals.txt delete mode 100644 BaseToo= ls/BuildNotes.txt delete mode 100644 BaseTools/Source/BinaryFiles.txt del= ete mode 100644 BaseTools/building-gcc.txt delete mode 100644 BaseTools/gc= c/README.txt delete mode 100755 BaseTools/gcc/mingw-gcc-build.py diff --git a/BaseTools/Bin/externals.txt b/BaseTools/Bin/externals.txt dele= ted file mode 100644 index c2c4ab7297..0000000000 --- a/BaseTools/Bin/externals.txt +++ /dev/null @@ -1 +0,0 @@ -Win32 https://svn.code.sf.net/p/edk2-toolbinaries/code/trunk/Win32 diff --git a/BaseTools/BuildNotes.txt b/BaseTools/BuildNotes.txt deleted fi= le mode 100644 index e2b10fddc3..0000000000 --- a/BaseTools/BuildNotes.txt +++ /dev/null @@ -1,83 +0,0 @@ -Intel(R) Platform Innovation Framework for EFI -BuildTools Project, BaseTo= ols Sub-Project -Root Package 1.00 -2007-08-31 - -Intel is a trademark or registered trademark of Intel Corporation or its -= subsidiaries in the United States and other countries. -* Other names and brands may be claimed as the property of others. -Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved. - ---------------------------------------------------------------------------= ----- -Quick Start ------------ - -Windows: - a) Go to the /BaseTools and run "toolsetup" script - -Unix-like: - a) make -C /BaseTools - b) Look over https://github.com/tianocore/tianocore.github.io/wiki/Getti= ng%20Started%20with%20EDK%20II - for a helpful step-by-step guide for building 'Hello World' on - various operating systems with edk2. - -Supported build targets (toolsetup) ------------------------------------ - -build(or none) - Incremental Build of all C based tools. This is the defa= ult target -rebuild - Clean all generated files and directories during build, = and rebuild all tools - ---------------------------------------------------------------------------= ----- -Tools in Python ---------------- -* Convert Python source to exe file - - The tools written in Python can be converted into executable program whi= ch can - be executed without installing a Python interpreter. (Generally it is ea= sier - to run the scripts from their source on operating systems other than Win= dows.) - - For Windows and Linux, the conversion tool package is called cx_Freeze, = its - home page is: - - http://sourceforge.net/projects/cx-freeze/ - - If you have installed cx_Freeze at c:\cx_Freeze-3.0.3. Use following com= mand - lines to convert MyBuild.py to MyBuild.exe (note this is an example, the= re is - no MyBuild Python project in the BaseTools\Python tree. - - set PYTHONPATH=3D\Source\Python - c:\cx_Freeze-3.0.3\FreezePython.exe --include-modules=3Dencodings.cp43= 7,encodings.gbk,encodings.utf_16,encodings.utf_16_le,encodings.utf_8 --inst= all-dir=3D.\mybuild MyBuild.py - - The generated .exe (and .dll) files are put in "mybuild" subdirectory. - - The following is a real example with the BuildTools/trunk/BaseTools proj= ect - installed in: C:\Work\BaseTools - - - C:\Work\BaseTools\Source\Python> set PYTHONPATH=3DC:\Work\BaseTools\Sour= ce\Python - C:\Work\BaseTools\Source\Python> c:\cx_Freeze-3.0.3\FreezePython.exe --i= nclude-modules=3Dencodings.cp437,encodings.gbk,encodings.utf_16,encodings.u= tf_16_le,encodings.utf_8 --install-dir=3DC:\Work\BaseTools\Bin\Win32 build\= build.py - ---------------- -* Execute tools written in Python without conversion - -Unix-like systems: - -The edk2/edksetup.sh script will setup everything which is needed to -run = the scripts from their source. - -Windows: - - The tools written in Python can be executed directly from its source dir= ectory -as long as the Python interpreter (Python 2.5) has been installed. = Before the execution, -please make sure the environment variable PYTHONPATH= is set to - - /BaseTools/Source/Python - - There're five tools written in Python. The entrance file of each tool is= listed -below. - - build /BaseTools/Source/Python/bui= ld/build.py - GenFds /BaseTools/Source/Python/Gen= Fds/GenFds.py - Trim /BaseTools/Source/Python/Tri= m/Trim.py - MigrationMsa2Inf /BaseTools/Source/Python/Mig= rationMsa2Inf/MigrationMsa2Inf.py - UPT /BaseTools/Source/Python/UPT= /UPT.py diff --git a/BaseTools/Source/BinaryFiles.txt b/BaseTools/Source/BinaryFile= s.txt deleted file mode 100644 index 818226a2c4..0000000000 --- a/BaseTools/Source/BinaryFiles.txt +++ /dev/null @@ -1,79 +0,0 @@ -## @file -# This file lists all of the tool files that must be present in the Bin tr= ees. -# -# This file is used by the EDK II Build Server that automatically builds t= he -# BaseTools Win32 binaries. -# When new tools are create, the tool executable must be listed in the [Bi= n.Win32] -# section. -# If a tool requires additional files, the developer must list those files= in the -# [ExtraFiles.Win32] section. -# The [CxFreeze.Win32] section is maintained by the owner of the Build Ser= ver who -# must ensure that files that are required by the cx_freeze frozen= binaries are -# present in the Bin\Win32 directory. -# -# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.
-= # -# This program and the accompanying materials are licensed and made avai= lable under -# the terms and conditions of the BSD License which accompanie= s this distribution. -# The full text of the license may be found at: -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -#= WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLI= ED. -# -## - -[Bin.Win32] -build.exe -BPDG.exe -Common.PyUtility.pyd -Ecc.exe -EfiCompressor.pyd -EfiRom.exe -Eot.EfiCompressor.pyd -Eot.LzmaCompressor.pyd -GenCrc32.exe -GenDepex.exe -GenFds.exe -GenFfs.exe -GenFv.exe -GenFw.exe -GenPatchPcdTable.exe -GenSec.exe -ImportTool.bat -LzmaCompress.exe -LzmaF86Compress.bat -PatchPcdValue.exe -Rsa2048Sha256GenerateKeys.exe -Rsa2048Sha256Sign.exe -Split.exe -TargetTool.exe -TianoCompress.exe -Trim.exe -UPT.exe -VfrCompile.exe -VolInfo.exe -Pkcs7Sign.exe -DevicePath.exe - -[ExtraFiles.Win32] -TestSigningPrivateKey.pem -config.ini -exception.xml -TestCert.pem -TestCert.pub.pem -TestRoot.pem -TestRoot.pub.pem -TestSub.pem -TestSub.pub.pem - -[CxFreeze.Win32] -_ctypes.pyd -_hashlib.pyd -_socket.pyd -_sqlite3.pyd -_ssl.pyd -pyexpat.pyd -python27.dll -select.pyd -sqlite3.dll diff --git a/BaseTools/building-gcc.txt b/BaseTools/building-gcc.txt delete= d file mode 100644 index 13b5395f99..0000000000 --- a/BaseTools/building-gcc.txt +++ /dev/null @@ -1,15 +0,0 @@ -To use GCC with the BaseTools project for edk2 based development purposes,= -you will need to build a GCC based cross-compiler (in addition to binutil= s). - -Instructions for building GCC for this purpose can be found under the -Bas= eTools source tree. (In addition to the instructions, you will also -find = scripts to help automate the build process.) - -If you do not have a tianocore.org account, you can make use of the 'guest= ' -account with an empty password. - -In a web browser, you can 'browse' the relevant source at this location: - http://sourceforge.net/p/edk2-buildtools/code/HEAD/tree/trunk/BaseTools/g= cc - -Or, with subversion, you can download the relevant source with this comman= d: - svn co https://svn.code.sf.net/p/edk2-buildtools/code/trunk/BaseTools/gcc diff --git a/BaseTools/gcc/README.txt b/BaseTools/gcc/README.txt deleted fi= le mode 100644 index ea7dd64576..0000000000 --- a/BaseTools/gcc/README.txt +++ /dev/null @@ -1,71 +0,0 @@ -You may run these scripts to build a UEFI/PI gcc cross compiler. - -Cross compilers built with these scripts are tested on -Linux, OS X and Cy= gwin. - -Please note that you may need to modify your edk2 tree's Conf/tools_def.tx= t -file to point to the location where you installed the cross compiler. - -=3D=3D=3D tianoCross-gcc-4.1 =3D=3D=3D - -This script will build an x86 (ia32) cross compiler. - -The results of this script are very similar to the 'mingw' cross compiler = -which is commonly available on linux and OS X. But, since the cross -comp= iler produced by this script is tested, it is the only 'supported' way -to = build UEFI/PI images. - -To use this script, you will need: - - * A recent version (3.0 or later should be fine) of gcc that is able to p= roduce - executables for the machine that you want to run this compiler on (the = host - machine). - * wget or curl - * tar - * bzip - * gzip - * bash - * As well as (possibly) others tools and development packages - -=3D=3D=3D x86_64-mingw-gcc-build.py =3D=3D - -This script will build an x86_64 (x64/Intel 64/amd64) cross compiler. - -To use this script, you will need: - - * A recent version (3.0 or later should be fine) of gcc that is able to - produce executables for the machine that you want to run this compiler - on (the host machine). - * Python 2.5 - * texinfo - * bison - * flex - * libmpfr - * libgmp - * As well as (possibly) others tools and development packages - -=3D=3D=3D Ubuntu Notes =3D=3D=3D - -On Ubuntu, the following command should install all the necessary build -p= ackages to utilize the x86_64-mingw-gcc-build.py script: - - sudo apt-get install build-essential texinfo bison flex libgmp3-dev libm= pfr-dev - -=3D=3D=3D CYGWIN Notes =3D=3D=3D - -You should setup cygwin to use binmode on all mounts. When you initially -= install cygwin it gives you the choice of Unix file mode (recommended) or D= OS -file mode. Unix mode will cause all the cygwin directories to be mounte= d in -binmode, while DOS will mount the dirs in textmode. Here is an exampl= e of a -cygwin install where the dirs are (properly) mounted in binmode. - -C:\cygwin\bin on /usr/bin type user (binmode) -C:\cygwin\lib on /usr/lib t= ype user (binmode) -c:\workspace on /workspace type system (binmode) -C:\cy= gwin on / type user (binmode) - -If you use textmode, it is likely that the build will fail in a way that i= s -hard to debug. - -Cygwin is pretty slow, so it is not recommended for large builds. - diff --git a/BaseTools/gcc/mingw-gcc-build.py b/BaseTools/gcc/mingw-gcc-bui= ld.py deleted file mode 100755 index 92778d1fcb..0000000000 --- a/BaseTools/gcc/mingw-gcc-build.py +++ /dev/null @@ -1,565 +0,0 @@ -#!/usr/bin/env python - -## @file -# -# Automation of instructions from: -# http://mingw-w64.svn.sourceforge.net/viewvc/mingw-w64/trunk/mingw-w64-= doc/ -# howto-build/mingw-w64-howto-build.txt?revision=3D216&view=3Dmarkup -# -# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.
-= # This program and the accompanying materials -# are licensed and made avai= lable under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may= be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -#= WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLI= ED. -# - - -from __future__ import print_function -from optparse import OptionParser -import os -import shutil -import subprocess -import sys -import tarfile -import urllib -import urlparse -try: - from hashlib import md5 -except Exception: - from md5 import md5 - -if sys.version_info < (2, 5): - # - # This script (and edk2 BaseTools) require Python 2.5 or newer - # - print('Python version 2.5 or later is required.') - sys.exit(-1) - -# -# Version and Copyright -# -VersionNumber =3D "0.01" -__version__ =3D "%prog Version " + VersionNumber -__copyright__ =3D "Copyr= ight (c) 2008 - 2018, Intel Corporation. All rights reserved." - -class Config: - """class Config - - Stores the configuration options for the rest of the script. - - Handles the command line options, and allows the code within - the script to easily interact with the 'config' requested by - the user. - """ - - def __init__(self): - self.base_dir =3D os.getcwd() - (self.options, self.args) =3D self.CheckOptions() - self.__init_dirs__() - - def CheckOptions(self): - Parser =3D \ - OptionParser( - description=3D__copyright__, - version=3D__version__, - prog=3D"mingw-gcc-build", - usage=3D"%prog [options] [target]" - ) - Parser.add_option( - "--arch", - action =3D "store", type =3D "string", - default =3D '', - dest =3D "arch", - help =3D "Processor architecture to build gcc for." - ) - Parser.add_option( - "--src-dir", - action =3D "store", type =3D "string", dest =3D "src_dir", - default =3D os.path.join(self.base_dir, 'src'), - help =3D "Directory to download/extract binutils/gcc sources" - ) - Parser.add_option( - "--build-dir", - action =3D "store", type =3D "string", dest =3D "build_dir", - default =3D os.path.join(self.base_dir, 'build'), - help =3D "Directory to download/extract binutils/gcc sources" - ) - Parser.add_option( - "--prefix", - action =3D "store", type =3D "string", dest =3D "prefix", - default =3D os.path.join(self.base_dir, 'install'), - help =3D "Prefix to install binutils/gcc into" - ) - Parser.add_option( - "--skip-binutils", - action =3D "store_true", dest =3D "skip_binutils", - default =3D False, - help =3D "Will skip building binutils" - ) - Parser.add_option( - "--skip-gcc", - action =3D "store_true", dest =3D "skip_gcc", - default =3D False, - help =3D "Will skip building GCC" - ) - Parser.add_option( - "--symlinks", - action =3D "store", type =3D "string", dest =3D "symlinks", - default =3D os.path.join(self.base_dir, 'symlinks'), - help =3D "Directory to create binutils/gcc symbolic links into= ." - ) - Parser.add_option( - "-v", "--verbose", - action=3D"store_true", - type=3DNone, help=3D"Print verbose messages" - ) - - (Opt, Args) =3D Parser.parse_args() - - self.arch =3D Opt.arch.lower() - allowedArchs =3D ('ia32', 'x64', 'ipf') - if self.arch not in allowedArchs: - Parser.error( - 'Please use --arch to specify one of: %s' % - ', '.join(allowedArchs) - ) - self.target_arch =3D {'ia32': 'i686', 'x64': 'x86_64', 'ipf': 'ia6= 4'}[self.arch] - self.target_sys =3D {'ia32': 'pc', 'x64': 'pc', 'ipf': 'pc'}[self.= arch] - self.target_bin =3D {'ia32': 'mingw32', 'x64': 'mingw32', 'ipf': '= elf'}[self.arch] - self.target_combo =3D '-'.join((self.target_arch, self.target_sys,= self.target_bin)) - - return (Opt, Args) - - def __init_dirs__(self): - self.src_dir =3D os.path.realpath(os.path.expanduser(self.options.= src_dir)) - self.build_dir =3D os.path.realpath(os.path.expanduser(self.option= s.build_dir)) - self.prefix =3D os.path.realpath(os.path.expanduser(self.options.p= refix)) - self.symlinks =3D os.path.realpath(os.path.expanduser(self.options= .symlinks)) - - def IsConfigOk(self): - - building =3D [] - if not self.options.skip_binutils: - building.append('binutils') - if not self.options.skip_gcc: - building.append('gcc') - if len(building) =3D=3D 0: - print("Nothing will be built!") - print() - print("Please try using --help and then change the configurati= on.") - return False - - print("Current directory:") - print(" ", self.base_dir) - print("Sources download/extraction:", self.Relative(self.src_dir)) - print("Build directory :", self.Relative(self.build_dir= )) - print("Prefix (install) directory :", self.Relative(self.prefix)) - print("Create symlinks directory :", self.Relative(self.symlinks)= ) - print("Building :", ', '.join(building)) - print() - answer =3D raw_input("Is this configuration ok? (default =3D no): = ") - if (answer.lower() not in ('y', 'yes')): - print() - print("Please try using --help and then change the configurati= on.") - return False - - if self.arch.lower() =3D=3D 'ipf': - print() - print('Please note that the IPF compiler built by this script = has') - print('not yet been validated!') - print() - answer =3D raw_input("Are you sure you want to build it? (defa= ult =3D no): ") - if (answer.lower() not in ('y', 'yes')): - print() - print("Please try using --help and then change the configu= ration.") - return False - - print() - return True - - def Relative(self, path): - if path.startswith(self.base_dir): - return '.' + path[len(self.base_dir):] - return path - - def MakeDirs(self): - for path in (self.src_dir, self.build_dir, self.prefix, self.symli= nks): - if not os.path.exists(path): - os.makedirs(path) - -class SourceFiles: - """class SourceFiles - - Handles the downloading of source files used by the script. - """ - - def __init__(self, config): - self.config =3D config - self.source_files =3D self.source_files[config.arch] - - if config.options.skip_binutils: - del self.source_files['binutils'] - - if config.options.skip_gcc: - del self.source_files['gcc'] - del self.source_files['mingw_hdr'] - - source_files_common =3D { - 'binutils': { - 'url': 'http://www.kernel.org/pub/linux/devel/binutils/' + \ - 'binutils-$version.tar.bz2', - 'version': '2.20.51.0.5', - 'md5': '6d2de7cdf7a8389e70b124e3d73b4d37', - }, - } - - source_files_x64 =3D { - 'gcc': { - 'url': 'http://ftpmirror.gnu.org/gcc/' + \ - 'gcc-$version/gcc-$version.tar.bz2', - 'version': '4.3.0', - 'md5': '197ed8468b38db1d3481c3111691d85b', - }, - } - - source_files_ia32 =3D { - 'gcc': source_files_x64['gcc'], - } - - source_files_ipf =3D source_files_x64.copy() - source_files_ipf['gcc']['configure-params'] =3D ( - '--with-gnu-as', '--with-gnu-ld', '--with-newlib', - '--verbose', '--disable-libssp', '--disable-nls', - '--enable-languages=3Dc,c++' - ) - - source_files =3D { - 'ia32': [source_files_common, source_files_ia32], - 'x64': [source_files_common, source_files_x64], - 'ipf': [source_files_common, source_files_ipf], - } - - for arch in source_files: - mergedSourceFiles =3D {} - for source_files_dict in source_files[arch]: - mergedSourceFiles.update(source_files_dict) - for downloadItem in mergedSourceFiles: - fdata =3D mergedSourceFiles[downloadItem] - fdata['filename'] =3D fdata['url'].split('/')[-1] - if 'extract-dir' not in fdata: - for ext in ('.tar.gz', '.tar.bz2', '.zip'): - if fdata['filename'].endswith(ext): - fdata['extract-dir'] =3D fdata['filename'][:-len(e= xt)] - break - replaceables =3D ('extract-dir', 'filename', 'url') - for replaceItem in fdata: - if replaceItem in replaceables: continue - if not isinstance(fdata[replaceItem], str): continue - for replaceable in replaceables: - if not isinstance(fdata[replaceable], str): continue - if replaceable in fdata: - fdata[replaceable] =3D \ - fdata[replaceable].replace( - '$' + replaceItem, - fdata[replaceItem] - ) - source_files[arch] =3D mergedSourceFiles - #print 'source_files:', source_files - - def GetAll(self): - - def progress(received, blockSize, fileSize): - if fileSize < 0: return - wDots =3D (100 * received * blockSize) / fileSize / 10 - if wDots > self.dots: - for i in range(wDots - self.dots): - print('.', end=3D' ') - sys.stdout.flush() - self.dots +=3D 1 - - maxRetries =3D 1 - for (fname, fdata) in self.source_files.items(): - for retries in range(maxRetries): - try: - self.dots =3D 0 - local_file =3D os.path.join(self.config.src_dir, fdata= ['filename']) - url =3D fdata['url'] - print('Downloading %s:' % fname, url) - if retries > 0: - print('(retry)', end=3D' ') - sys.stdout.flush() - - completed =3D False - if os.path.exists(local_file): - md5_pass =3D self.checkHash(fdata) - if md5_pass: - print('[md5 match]', end=3D' ') - else: - print('[md5 mismatch]', end=3D' ') - sys.stdout.flush() - completed =3D md5_pass - - if not completed: - urllib.urlretrieve(url, local_file, progress) - - # - # BUGBUG: Suggest proxy to user if download fails. - # - # export http_proxy=3Dhttp://proxyservername.mycompany= .com:911 - # export ftp_proxy=3Dhttp://proxyservername.mycompany.= com:911 - - if not completed and os.path.exists(local_file): - md5_pass =3D self.checkHash(fdata) - if md5_pass: - print('[md5 match]', end=3D' ') - else: - print('[md5 mismatch]', end=3D' ') - sys.stdout.flush() - completed =3D md5_pass - - if completed: - print('[done]') - break - else: - print('[failed]') - print(' Tried to retrieve', url) - print(' to', local_file) - print('Possible fixes:') - print('* If you are behind a web-proxy, try settin= g the', end=3D' ') - print('http_proxy environment variable') - print('* You can try to download this file separat= ely', end=3D' ') - print('and rerun this script') - raise Exception() - - except KeyboardInterrupt: - print('[KeyboardInterrupt]') - return False - - except Exception as e: - print(e) - - if not completed: return False - - return True - - def checkHash(self, fdata): - local_file =3D os.path.join(self.config.src_dir, fdata['filename']= ) - expect_md5 =3D fdata['md5'] - data =3D open(local_file).read() - md5sum =3D md5() - md5sum.update(data) - return md5sum.hexdigest().lower() =3D=3D expect_md5.lower() - - def GetModules(self): - return self.source_files.keys() - - def GetFilenameOf(self, module): - return self.source_files[module]['filename'] - - def GetMd5Of(self, module): - return self.source_files[module]['md5'] - - def GetExtractDirOf(self, module): - return self.source_files[module]['extract-dir'] - - def GetAdditionalParameters(self, module, step): - key =3D step + '-params' - if key in self.source_files[module]: - return self.source_files[module][key] - else: - return tuple() - -class Extracter: - """class Extracter - - Handles the extraction of the source files from their downloaded - archive files. - """ - - def __init__(self, source_files, config): - self.source_files =3D source_files - self.config =3D config - - def Extract(self, module): - src =3D self.config.src_dir - extractDst =3D os.path.join(src, self.config.arch) - local_file =3D os.path.join(src, self.source_files.GetFilenameOf(m= odule)) - moduleMd5 =3D self.source_files.GetMd5Of(module) - extracted =3D os.path.join(extractDst, os.path.split(local_file)[1= ] + '.extracted') - if not os.path.exists(extractDst): - os.mkdir(extractDst) - - extractedMd5 =3D None - if os.path.exists(extracted): - extractedMd5 =3D open(extracted).read() - - if extractedMd5 !=3D moduleMd5: - print('Extracting %s:' % self.config.Relative(local_file)) - tar =3D tarfile.open(local_file) - tar.extractall(extractDst) - open(extracted, 'w').write(moduleMd5) - else: - pass - #print 'Previously extracted', self.config.Relative(local_file= ) - - def ExtractAll(self): - for module in self.source_files.GetModules(): - self.Extract(module) - -class Builder: - """class Builder - - Builds and installs the GCC tool suite. - """ - - def __init__(self, source_files, config): - self.source_files =3D source_files - self.config =3D config - - def Build(self): - if not self.config.options.skip_binutils: - self.BuildModule('binutils') - if not self.config.options.skip_gcc: - self.BuildModule('gcc') - self.MakeSymLinks() - - def IsBuildStepComplete(self, step): - return \ - os.path.exists( - os.path.join( - self.config.build_dir, self.config.arch, step + '.comp= leted' - ) - ) - - def MarkBuildStepComplete(self, step): - open( - os.path.join( - self.config.build_dir, self.config.arch, step + '.complete= d' - ), - "w" - ).close() - - - def BuildModule(self, module): - base_dir =3D os.getcwd() - build_dir =3D os.path.join(self.config.build_dir, self.config.arch= , module) - module_dir =3D self.source_files.GetExtractDirOf(module) - module_dir =3D os.path.realpath(os.path.join('src', self.config.ar= ch, module_dir)) - configure =3D os.path.join(module_dir, 'configure') - prefix =3D self.config.prefix - if not os.path.exists(build_dir): - os.makedirs(build_dir) - os.chdir(build_dir) - - cmd =3D ( - configure, - '--target=3D%s' % self.config.target_combo, - '--prefix=3D' + prefix, - '--with-sysroot=3D' + prefix, - '--disable-werror', - ) - if os.path.exists('/opt/local/include/gmp.h'): - cmd +=3D ('--with-gmp=3D/opt/local',) - if module =3D=3D 'gcc': cmd +=3D ('--oldincludedir=3D/opt/local/in= clude',) - cmd +=3D self.source_files.GetAdditionalParameters(module, 'config= ure') - self.RunCommand(cmd, module, 'config', skipable=3DTrue) - - cmd =3D ('make',) - if module =3D=3D 'gcc': - cmd +=3D ('all-gcc',) - self.RunCommand(cmd, module, 'build') - - cmd =3D ('make',) - if module =3D=3D 'gcc': - cmd +=3D ('install-gcc',) - else: - cmd +=3D ('install',) - self.RunCommand(cmd, module, 'install') - - os.chdir(base_dir) - - print('%s module is now built and installed' % module) - - def RunCommand(self, cmd, module, stage, skipable=3DFalse): - if skipable: - if self.IsBuildStepComplete('%s.%s' % (module, stage)): - return - - popen =3D lambda cmd: \ - subprocess.Popen( - cmd, - stdin=3Dsubprocess.PIPE, - stdout=3Dsubprocess.PIPE, - stderr=3Dsubprocess.STDOUT - ) - - print('%s [%s] ...' % (module, stage), end=3D' ') - sys.stdout.flush() - p =3D popen(cmd) - output =3D p.stdout.read() - p.wait() - if p.returncode !=3D 0: - print('[failed!]') - logFile =3D os.path.join(self.config.build_dir, 'log.txt') - f =3D open(logFile, "w") - f.write(output) - f.close() - raise Exception('Failed to %s %s\n' % (stage, module) + \ - 'See output log at %s' % self.config.Relative(logFile)) - else: - print('[done]') - - if skipable: - self.MarkBuildStepComplete('%s.%s' % (module, stage)) - - def MakeSymLinks(self): - links_dir =3D os.path.join(self.config.symlinks, self.config.arch) - if not os.path.exists(links_dir): - os.makedirs(links_dir) - startPrinted =3D False - for link in ('ar', 'ld', 'gcc'): - src =3D os.path.join( - self.config.prefix, 'bin', self.config.target_combo + '-' = + link - ) - linkdst =3D os.path.join(links_dir, link) - if not os.path.lexists(linkdst): - if not startPrinted: - print('Making symlinks in %s:' % self.config.Relative(= links_dir), end=3D' ') - startPrinted =3D True - print(link, end=3D' ') - os.symlink(src, linkdst) - - if startPrinted: - print('[done]') - -class App: - """class App - - The main body of the application. - """ - - def __init__(self): - config =3D Config() - - if not config.IsConfigOk(): - return - - config.MakeDirs() - - sources =3D SourceFiles(config) - result =3D sources.GetAll() - if result: - print('All files have been downloaded & verified') - else: - print('An error occurred while downloading a file') - return - - Extracter(sources, config).ExtractAll() - - Builder(sources, config).Build() - -App() - -- 2.13.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel