mirror of https://github.com/acidanthera/audk.git
240 lines
8.5 KiB
Python
Executable File
240 lines
8.5 KiB
Python
Executable File
#!/usr/bin/python
|
|
#
|
|
# Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
|
|
#
|
|
# 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.close()
|
|
print '[done]'
|
|
|
|
build_info = gen_build_info()
|
|
build('IA32')
|
|
build('X64')
|
|
create_zip('IA32')
|
|
create_zip('X64')
|
|
|
|
|