]>
git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/create-release.py
3 # Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>
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
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.
21 is_unix
= not sys
.platform
.startswith('win')
24 print "This script currently only supports unix-like systems"
27 if os
.path
.exists('OvmfPkgX64.dsc'):
30 if not os
.path
.exists(os
.path
.join('OvmfPkg', 'OvmfPkgX64.dsc')):
31 print "OvmfPkg/OvmfPkgX64.dsc doesn't exist"
34 def run_and_capture_output(args
, checkExitCode
= True):
35 p
= subprocess
.Popen(args
=args
, stdout
=subprocess
.PIPE
)
36 stdout
= p
.stdout
.read()
42 gcc_version
= run_and_capture_output(args
=('gcc', '--version'))
43 gcc_re
= re
.compile(r
'\s*\S+\s+\([^\)]+?\)\s+(\d+(?:\.\d+)*)(?:\s+.*)?')
44 mo
= gcc_re
.match(gcc_version
)
46 print "Unable to find GCC version"
48 gcc_version
= map(lambda n
: int(n
), mo
.group(1).split('.'))
50 if 'TOOLCHAIN' in os
.environ
:
51 TOOLCHAIN
= os
.environ
['TOOLCHAIN']
53 assert(gcc_version
[0] == 4)
54 minor
= max(4, min(7, gcc_version
[1]))
55 TOOLCHAIN
= 'GCC4' + str(minor
)
57 def git_based_version():
59 if not os
.path
.exists('.git'):
61 stdout
= run_and_capture_output(args
=('git', 'log',
64 regex
= re
.compile(r
'^\s*git-svn-id:\s+\S+@(\d+)\s+[0-9a-f\-]+$',
66 mo
= regex
.search(stdout
)
68 version
= 'r' + mo
.group(1)
70 version
= stdout
.split(None, 3)[1]
77 stdout
= run_and_capture_output(args
=('svn', 'info'))
81 def svn_based_version():
83 revision_re
= re
.compile('^Revision\:\s*([\da-f]+)$', re
.MULTILINE
)
84 mo
= revision_re
.search(buf
)
85 assert(mo
is not None)
86 return 'r' + mo
.group(1)
89 if os
.path
.exists(os
.path
.join('OvmfPkg', '.svn')):
90 return svn_based_version()
92 return git_based_version()
94 revision
= get_revision()
96 newline_re
= re
.compile(r
'(\n|\r\n|\r(?!\n))', re
.MULTILINE
)
98 return newline_re
.sub('\r\n', str)
100 def gen_build_info():
101 distro
= run_and_capture_output(args
=('lsb_release', '-sd')).strip()
103 machine
= run_and_capture_output(args
=('uname', '-m')).strip()
105 gcc_version_str
= '.'.join(map(lambda v
: str(v
), gcc_version
))
107 ld_version
= run_and_capture_output(args
=('ld', '--version'))
108 ld_version
= ld_version
.split('\n')[0].split()[-1]
110 iasl_version
= run_and_capture_output(args
=('iasl'), checkExitCode
=False)
111 iasl_version
= filter(lambda s
: s
.find(' version ') >= 0, iasl_version
.split('\n'))[0]
112 iasl_version
= iasl_version
.split(' version ')[1].strip()
114 sb
= StringIO
.StringIO()
115 print >> sb
, 'edk2: ', revision
116 print >> sb
, 'compiler: GCC', gcc_version_str
, '(' + TOOLCHAIN
+ ')'
117 print >> sb
, 'binutils:', ld_version
118 print >> sb
, 'iasl: ', iasl_version
119 print >> sb
, 'system: ', distro
, machine
.replace('_', '-')
120 return to_dos_text(sb
.getvalue())
122 def read_file(filename
):
128 LICENSE
= to_dos_text(
129 '''This OVMF binary release is built from source code licensed under
130 the BSD open source license. The BSD license is documented at
131 http://opensource.org/licenses/bsd-license.php, and a copy is
134 One sub-component of the OVMF project is a FAT filesystem driver. The FAT
135 filesystem driver code is also BSD licensed, but the code license contains
136 one additional term. This license can be found at
137 https://github.com/tianocore/tianocore.github.io/wiki/Edk2-fat-driver
138 and a copy is shown below (following the normal BSD license).
140 === BSD license: START ===
144 LICENSE
+= read_file(os
.path
.join('MdePkg', 'License.txt'))
146 LICENSE
+= to_dos_text(
148 === BSD license: END ===
150 === FAT filesystem driver license: START ===
154 LICENSE
+= read_file(os
.path
.join('FatBinPkg', 'License.txt'))
156 LICENSE
+= to_dos_text(
158 === FAT filesystem driver license: END ===
168 logname
= 'build-%s.log' % arch
169 build_log
= open(logname
, 'w')
170 print 'Building OVMF for', arch
, '(%s)' % logname
, '...',
172 p
= subprocess
.Popen(args
=args
, stdout
=build_log
, stderr
=build_log
)
177 print '[error 0x%x]' % ret_code
180 def create_zip(arch
):
182 filename
= 'OVMF-%s-%s.zip' % (arch
, revision
)
183 print 'Creating', filename
, '...',
185 if os
.path
.exists(filename
):
187 zipf
= zipfile
.ZipFile(filename
, 'w', zipfile
.ZIP_DEFLATED
)
189 zipf
.writestr('BUILD_INFO', build_info
)
190 zipf
.writestr('LICENSE', LICENSE
)
191 zipf
.write(os
.path
.join('OvmfPkg', 'README'), 'README')
192 FV_DIR
= os
.path
.join(
194 'Ovmf' + arch
.title(),
195 'RELEASE_' + TOOLCHAIN
,
198 zipf
.write(os
.path
.join(FV_DIR
, 'OVMF.fd'), 'OVMF.fd')
202 build_info
= gen_build_info()