blob: 66774244a320dc8a73f9e410c541e1af1393bc22 [file] [log] [blame]
jljusten267865e2011-02-23 22:21:00 +00001#!/usr/bin/python
2#
3# Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
4#
5# This program and the accompanying materials
6# are licensed and made available under the terms and conditions of the BSD License
7# which accompanies this distribution. The full text of the license may be found at
8# http://opensource.org/licenses/bsd-license.php
9#
10# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12#
13
14release_type = 'alpha'
15
16import os
17import re
18import StringIO
19import subprocess
20import sys
21import zipfile
22
23is_unix = not sys.platform.startswith('win')
24
25if not is_unix:
26 print "This script currently only supports unix-like systems"
27 sys.exit(-1)
28
29if os.path.exists('OvmfPkgX64.dsc'):
30 os.chdir('..')
31
32if not os.path.exists(os.path.join('OvmfPkg', 'OvmfPkgX64.dsc')):
33 print "OvmfPkg/OvmfPkgX64.dsc doesn't exist"
34 sys.exit(-1)
35
36if 'TOOLCHAIN' in os.environ:
37 TOOLCHAIN = os.environ['TOOLCHAIN']
38else:
39 TOOLCHAIN = 'GCC44'
40
41def run_and_capture_output(args, checkExitCode = True):
42 p = subprocess.Popen(args=args, stdout=subprocess.PIPE)
43 stdout = p.stdout.read()
44 ret_code = p.wait()
45 if checkExitCode:
46 assert ret_code == 0
47 return stdout
48
49def git_svn_info():
50 dir = os.getcwd()
51 os.chdir('OvmfPkg')
52 stdout = run_and_capture_output(args=('git', 'svn', 'info'))
53 os.chdir(dir)
54 return stdout
55
56def svn_info():
57 dir = os.getcwd()
58 os.chdir('OvmfPkg')
59 stdout = run_and_capture_output(args=('svn', 'info'))
60 os.chdir(dir)
61 return stdout
62
63def get_svn_info_output():
64 if os.path.exists(os.path.join('OvmfPkg', '.svn')):
65 return svn_info()
66 else:
67 return git_svn_info()
68
69def get_revision():
70 buf = get_svn_info_output()
71 revision_re = re.compile('^Revision\:\s*(\d+)$', re.MULTILINE)
72 mo = revision_re.search(buf)
73 if mo is not None:
74 return int(mo.group(1))
75
76revision = get_revision()
77
78newline_re = re.compile(r'(\n|\r\n|\r(?!\n))', re.MULTILINE)
79def to_dos_text(str):
80 return newline_re.sub('\r\n', str)
81
82def gen_build_info():
83 distro = run_and_capture_output(args=('lsb_release', '-sd')).strip()
84
85 machine = run_and_capture_output(args=('uname', '-m')).strip()
86
87 gcc_version = run_and_capture_output(args=('gcc', '--version'))
88 gcc_version = gcc_version.split('\n')[0].split()[-1]
89
90 ld_version = run_and_capture_output(args=('ld', '--version'))
91 ld_version = ld_version.split('\n')[0].split()[-1]
92
93 iasl_version = run_and_capture_output(args=('iasl'), checkExitCode=False)
94 iasl_version = filter(lambda s: s.find(' version ') >= 0, iasl_version.split('\n'))[0]
95 iasl_version = iasl_version.split(' version ')[1].strip()
96
97 sb = StringIO.StringIO()
98 print >> sb, 'edk2: ', 'r%d' % revision
99 print >> sb, 'compiler: GCC', gcc_version
100 print >> sb, 'binutils:', ld_version
101 print >> sb, 'iasl: ', iasl_version
102 print >> sb, 'system: ', distro, machine.replace('_', '-')
103 return to_dos_text(sb.getvalue())
104
105LICENSE = to_dos_text(
106'''This OVMF binary release is built from source code licensed under
107the BSD open source license. The BSD license is documented at
108http://opensource.org/licenses/bsd-license.php, and a copy is
109shown below.
110
111One sub-component of the OVMF project is a FAT filesystem driver. The FAT
112filesystem driver code is also BSD licensed, but the code license contains
113one additional term. This license can be found at
114http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Edk2-fat-driver,
115and a copy is shown below (following the normal BSD license).
116
117=== BSD license: START ===
118
119Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.
120
121Redistribution and use in source and binary forms, with or without
122modification, are permitted provided that the following conditions
123are met:
124
125* Redistributions of source code must retain the above copyright
126 notice, this list of conditions and the following disclaimer.
127* Redistributions in binary form must reproduce the above copyright
128 notice, this list of conditions and the following disclaimer in
129 the documentation and/or other materials provided with the
130 distribution.
131* Neither the name of the Intel Corporation nor the names of its
132 contributors may be used to endorse or promote products derived
133 from this software without specific prior written permission.
134
135THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
136"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
137LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
138FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
139COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
140INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
141BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
142LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
143CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
144LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
145ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
146POSSIBILITY OF SUCH DAMAGE.
147
148=== BSD license: END ===
149
150=== FAT filesystem driver license: START ===
151
152Copyright (c) 2004, Intel Corporation. All rights reserved.
153
154Redistribution and use in source and binary forms, with or without
155modification, are permitted provided that the following conditions
156are met:
157
158* Redistributions of source code must retain the above copyright
159 notice, this list of conditions and the following disclaimer.
160* Redistributions in binary form must reproduce the above copyright
161 notice, this list of conditions and the following disclaimer in
162 the documentation and/or other materials provided with the
163 distribution.
164* Neither the name of Intel nor the names of its
165 contributors may be used to endorse or promote products derived
166 from this software without specific prior written permission.
167
168THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
169"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
170LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
171FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
172COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
173INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
174BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
175LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
176CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
177LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
178ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
179POSSIBILITY OF SUCH DAMAGE.
180
181Additional terms:
182In addition to the forgoing, redistribution and use of the code is
183conditioned upon the FAT 32 File System Driver and all derivative
184works thereof being used for and designed only to read and/or write
185to a file system that is directly managed by an Extensible Firmware
186Interface (EFI) implementation or by an emulator of an EFI
187implementation.
188
189=== FAT filesystem driver license: END ===
190''')
191
192def build(arch):
193 args = (
194 'OvmfPkg/build.sh',
195 '-t', TOOLCHAIN,
196 '-a', arch,
197 '-b', 'RELEASE'
198 )
199 logname = 'build-%s.log' % arch
200 build_log = open(logname, 'w')
201 print 'Building OVMF for', arch, '(%s)' % logname, '...',
202 sys.stdout.flush()
203 p = subprocess.Popen(args=args, stdout=build_log, stderr=build_log)
204 ret_code = p.wait()
205 if ret_code == 0:
206 print '[done]'
207 else:
208 print '[error 0x%x]' % ret_code
209 return ret_code
210
211def create_zip(arch):
212 global build_info
213 filename = 'OVMF-%s-r%d-%s.zip' % (arch, revision, release_type)
214 print 'Creating', filename, '...',
215 sys.stdout.flush()
216 if os.path.exists(filename):
217 os.remove(filename)
218 zipf = zipfile.ZipFile(filename, 'w', zipfile.ZIP_DEFLATED)
219
220 zipf.writestr('BUILD_INFO', build_info)
221 zipf.writestr('LICENSE', LICENSE)
222 zipf.write(os.path.join('OvmfPkg', 'README'), 'README')
223 FV_DIR = os.path.join(
224 'Build',
225 'Ovmf' + arch.title(),
226 'RELEASE_' + TOOLCHAIN,
227 'FV'
228 )
229 zipf.write(os.path.join(FV_DIR, 'OVMF.fd'), 'OVMF.fd')
230 zipf.write(os.path.join(FV_DIR, 'CirrusLogic5446.rom'), 'CirrusLogic5446.rom')
231 zipf.close()
232 print '[done]'
233
234build_info = gen_build_info()
235build('IA32')
236build('X64')
237create_zip('IA32')
238create_zip('X64')
239
240