From 267865e8410032dc8e567dc9f613e256d2ac0948 Mon Sep 17 00:00:00 2001 From: jljusten Date: Wed, 23 Feb 2011 22:21:00 +0000 Subject: OvmfPkg: Add create-release.py script This script builds OVMF IA32 and X64, and packages both versions for release. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11337 6f19259b-4bc3-4df7-8a09-765794883524 --- OvmfPkg/create-release.py | 240 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100755 OvmfPkg/create-release.py (limited to 'OvmfPkg/create-release.py') diff --git a/OvmfPkg/create-release.py b/OvmfPkg/create-release.py new file mode 100755 index 0000000000..66774244a3 --- /dev/null +++ b/OvmfPkg/create-release.py @@ -0,0 +1,240 @@ +#!/usr/bin/python +# +# Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.
+# +# This program and the accompanying materials +# are licensed and made available 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 IMPLIED. +# + +release_type = 'alpha' + +import os +import re +import StringIO +import subprocess +import sys +import zipfile + +is_unix = not sys.platform.startswith('win') + +if not is_unix: + print "This script currently only supports unix-like systems" + sys.exit(-1) + +if os.path.exists('OvmfPkgX64.dsc'): + os.chdir('..') + +if not os.path.exists(os.path.join('OvmfPkg', 'OvmfPkgX64.dsc')): + print "OvmfPkg/OvmfPkgX64.dsc doesn't exist" + sys.exit(-1) + +if 'TOOLCHAIN' in os.environ: + TOOLCHAIN = os.environ['TOOLCHAIN'] +else: + TOOLCHAIN = 'GCC44' + +def run_and_capture_output(args, checkExitCode = True): + p = subprocess.Popen(args=args, stdout=subprocess.PIPE) + stdout = p.stdout.read() + ret_code = p.wait() + if checkExitCode: + assert ret_code == 0 + return stdout + +def git_svn_info(): + dir = os.getcwd() + os.chdir('OvmfPkg') + stdout = run_and_capture_output(args=('git', 'svn', 'info')) + os.chdir(dir) + return stdout + +def svn_info(): + dir = os.getcwd() + os.chdir('OvmfPkg') + stdout = run_and_capture_output(args=('svn', 'info')) + os.chdir(dir) + return stdout + +def get_svn_info_output(): + if os.path.exists(os.path.join('OvmfPkg', '.svn')): + return svn_info() + else: + return git_svn_info() + +def get_revision(): + buf = get_svn_info_output() + revision_re = re.compile('^Revision\:\s*(\d+)$', re.MULTILINE) + mo = revision_re.search(buf) + if mo is not None: + return int(mo.group(1)) + +revision = get_revision() + +newline_re = re.compile(r'(\n|\r\n|\r(?!\n))', re.MULTILINE) +def to_dos_text(str): + return newline_re.sub('\r\n', str) + +def gen_build_info(): + distro = run_and_capture_output(args=('lsb_release', '-sd')).strip() + + machine = run_and_capture_output(args=('uname', '-m')).strip() + + gcc_version = run_and_capture_output(args=('gcc', '--version')) + gcc_version = gcc_version.split('\n')[0].split()[-1] + + ld_version = run_and_capture_output(args=('ld', '--version')) + ld_version = ld_version.split('\n')[0].split()[-1] + + iasl_version = run_and_capture_output(args=('iasl'), checkExitCode=False) + iasl_version = filter(lambda s: s.find(' version ') >= 0, iasl_version.split('\n'))[0] + iasl_version = iasl_version.split(' version ')[1].strip() + + sb = StringIO.StringIO() + print >> sb, 'edk2: ', 'r%d' % revision + print >> sb, 'compiler: GCC', gcc_version + print >> sb, 'binutils:', ld_version + print >> sb, 'iasl: ', iasl_version + print >> sb, 'system: ', distro, machine.replace('_', '-') + return to_dos_text(sb.getvalue()) + +LICENSE = to_dos_text( +'''This OVMF binary release is built from source code licensed under +the BSD open source license. The BSD license is documented at +http://opensource.org/licenses/bsd-license.php, and a copy is +shown below. + +One sub-component of the OVMF project is a FAT filesystem driver. The FAT +filesystem driver code is also BSD licensed, but the code license contains +one additional term. This license can be found at +http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Edk2-fat-driver, +and a copy is shown below (following the normal BSD license). + +=== BSD license: START === + +Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +* Neither the name of the Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +=== BSD license: END === + +=== FAT filesystem driver license: START === + +Copyright (c) 2004, Intel Corporation. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +* Neither the name of Intel nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +Additional terms: +In addition to the forgoing, redistribution and use of the code is +conditioned upon the FAT 32 File System Driver and all derivative +works thereof being used for and designed only to read and/or write +to a file system that is directly managed by an Extensible Firmware +Interface (EFI) implementation or by an emulator of an EFI +implementation. + +=== FAT filesystem driver license: END === +''') + +def build(arch): + args = ( + 'OvmfPkg/build.sh', + '-t', TOOLCHAIN, + '-a', arch, + '-b', 'RELEASE' + ) + logname = 'build-%s.log' % arch + build_log = open(logname, 'w') + print 'Building OVMF for', arch, '(%s)' % logname, '...', + sys.stdout.flush() + p = subprocess.Popen(args=args, stdout=build_log, stderr=build_log) + ret_code = p.wait() + if ret_code == 0: + print '[done]' + else: + print '[error 0x%x]' % ret_code + return ret_code + +def create_zip(arch): + global build_info + filename = 'OVMF-%s-r%d-%s.zip' % (arch, revision, release_type) + print 'Creating', filename, '...', + sys.stdout.flush() + if os.path.exists(filename): + os.remove(filename) + zipf = zipfile.ZipFile(filename, 'w', zipfile.ZIP_DEFLATED) + + zipf.writestr('BUILD_INFO', build_info) + zipf.writestr('LICENSE', LICENSE) + zipf.write(os.path.join('OvmfPkg', 'README'), 'README') + FV_DIR = os.path.join( + 'Build', + 'Ovmf' + arch.title(), + 'RELEASE_' + TOOLCHAIN, + 'FV' + ) + zipf.write(os.path.join(FV_DIR, 'OVMF.fd'), 'OVMF.fd') + zipf.write(os.path.join(FV_DIR, 'CirrusLogic5446.rom'), 'CirrusLogic5446.rom') + zipf.close() + print '[done]' + +build_info = gen_build_info() +build('IA32') +build('X64') +create_zip('IA32') +create_zip('X64') + + -- cgit v1.2.3