Add build-many-glibcs.py support for Hurd.

This patch adds build-many-glibcs.py support for GNU Hurd.  Builds of
the i686-gnu configuration will fail until sufficient support is
merged to master, so completing build-many-glibcs.py coverage of all
glibc ABIs and making results accurately reflect the broken state of
builds for Hurd.

	* scripts/build-many-glibcs.py (Context.add_all_configs): Add
	i686-gnu configurations.
	(Context.run_builds): Include mig, gnumach and hurd in components
	considered.
	(Context.checkout): Add mig, gnumach and hurd to components.
	(Context.checkout_tar): Add URL mappings for mig, gnumach and
	hurd.
	(Context.bot_cycle): Check for changes to mig, gnumach and hurd.
	(Config.build): Install gnumach headers, build mig and install
	hurd headers for 'gnu' OS.
	(Config.install_gnumach_headers): New function.
	(Config.install_hurd_headers): Likewise.
	(Glibc.build_glibc): Do not use /usr for 'gnu' OS.  Specifiy MIG
	when building for 'gnu' OS.
This commit is contained in:
Joseph Myers 2018-01-24 01:18:54 +00:00
parent d4ae782776
commit 394b5bac88
2 changed files with 82 additions and 10 deletions

View File

@ -1,3 +1,20 @@
2018-01-24 Joseph Myers <joseph@codesourcery.com>
* scripts/build-many-glibcs.py (Context.add_all_configs): Add
i686-gnu configurations.
(Context.run_builds): Include mig, gnumach and hurd in components
considered.
(Context.checkout): Add mig, gnumach and hurd to components.
(Context.checkout_tar): Add URL mappings for mig, gnumach and
hurd.
(Context.bot_cycle): Check for changes to mig, gnumach and hurd.
(Config.build): Install gnumach headers, build mig and install
hurd headers for 'gnu' OS.
(Config.install_gnumach_headers): New function.
(Config.install_hurd_headers): Likewise.
(Glibc.build_glibc): Do not use /usr for 'gnu' OS. Specifiy MIG
when building for 'gnu' OS.
2018-01-23 Tobias Klauser <tklauser@distanz.ch>
* manual/tunables.texi (Hardware Capability Tunables): Fix

View File

@ -193,6 +193,8 @@ class Context(object):
'--with-fpu=vfpv3'])
self.add_config(arch='hppa',
os_name='linux-gnu')
self.add_config(arch='i686',
os_name='gnu')
self.add_config(arch='ia64',
os_name='linux-gnu',
first_gcc_cfg=['--with-system-libunwind'])
@ -461,13 +463,15 @@ class Context(object):
old_versions = {}
self.build_host_libraries()
elif action == 'compilers':
build_components = ('binutils', 'gcc', 'glibc', 'linux')
build_components = ('binutils', 'gcc', 'glibc', 'linux', 'mig',
'gnumach', 'hurd')
old_components = ('gmp', 'mpfr', 'mpc')
old_versions = self.build_state['host-libraries']['build-versions']
self.build_compilers(configs)
else:
build_components = ('glibc',)
old_components = ('gmp', 'mpfr', 'mpc', 'binutils', 'gcc', 'linux')
old_components = ('gmp', 'mpfr', 'mpc', 'binutils', 'gcc', 'linux',
'mig', 'gnumach', 'hurd')
old_versions = self.build_state['compilers']['build-versions']
self.build_glibcs(configs)
self.write_files()
@ -694,7 +698,10 @@ class Context(object):
'gmp': '6.1.2',
'linux': '4.14',
'mpc': '1.1.0',
'mpfr': '4.0.0'}
'mpfr': '4.0.0',
'mig': '1.8',
'gnumach': '1.8',
'hurd': '0.9'}
use_versions = {}
explicit_versions = {}
for v in versions:
@ -829,7 +836,10 @@ class Context(object):
'gmp': 'https://ftp.gnu.org/gnu/gmp/gmp-%(version)s.tar.xz',
'linux': 'https://www.kernel.org/pub/linux/kernel/v4.x/linux-%(version)s.tar.xz',
'mpc': 'https://ftp.gnu.org/gnu/mpc/mpc-%(version)s.tar.gz',
'mpfr': 'https://ftp.gnu.org/gnu/mpfr/mpfr-%(version)s.tar.xz'}
'mpfr': 'https://ftp.gnu.org/gnu/mpfr/mpfr-%(version)s.tar.xz',
'mig': 'https://ftp.gnu.org/gnu/mig/mig-%(version)s.tar.bz2',
'gnumach': 'https://ftp.gnu.org/gnu/gnumach/gnumach-%(version)s.tar.bz2',
'hurd': 'https://ftp.gnu.org/gnu/hurd/hurd-%(version)s.tar.bz2'}
if component not in url_map:
print('error: component %s coming from tarball' % component)
exit(1)
@ -949,7 +959,8 @@ class Context(object):
self.clear_last_build_state(a)
self.exec_self()
check_components = {'host-libraries': ('gmp', 'mpfr', 'mpc'),
'compilers': ('binutils', 'gcc', 'glibc', 'linux'),
'compilers': ('binutils', 'gcc', 'glibc', 'linux',
'mig', 'gnumach', 'hurd'),
'glibcs': ('glibc',)}
must_build = {}
for a in actions:
@ -1148,6 +1159,10 @@ class Config(object):
if self.os.startswith('linux'):
self.install_linux_headers(cmdlist)
self.build_gcc(cmdlist, True)
if self.os == 'gnu':
self.install_gnumach_headers(cmdlist)
self.build_cross_tool(cmdlist, 'mig', 'mig')
self.install_hurd_headers(cmdlist)
for g in self.compiler_glibcs:
cmdlist.push_subdesc('glibc')
cmdlist.push_subdesc(g.name)
@ -1230,6 +1245,41 @@ class Config(object):
cmdlist.cleanup_dir()
cmdlist.pop_subdesc()
def install_gnumach_headers(self, cmdlist):
"""Install GNU Mach headers."""
srcdir = self.ctx.component_srcdir('gnumach')
builddir = self.component_builddir('gnumach')
cmdlist.push_subdesc('gnumach')
cmdlist.create_use_dir(builddir)
cmdlist.add_command('configure',
[os.path.join(srcdir, 'configure'),
'--build=%s' % self.ctx.build_triplet,
'--host=%s' % self.triplet,
'--prefix=',
'CC=%s-gcc -nostdlib' % self.triplet])
cmdlist.add_command('install', ['make', 'DESTDIR=%s' % self.sysroot,
'install-data'])
cmdlist.cleanup_dir()
cmdlist.pop_subdesc()
def install_hurd_headers(self, cmdlist):
"""Install Hurd headers."""
srcdir = self.ctx.component_srcdir('hurd')
builddir = self.component_builddir('hurd')
cmdlist.push_subdesc('hurd')
cmdlist.create_use_dir(builddir)
cmdlist.add_command('configure',
[os.path.join(srcdir, 'configure'),
'--build=%s' % self.ctx.build_triplet,
'--host=%s' % self.triplet,
'--prefix=',
'--disable-profile', '--without-parted',
'CC=%s-gcc -nostdlib' % self.triplet])
cmdlist.add_command('install', ['make', 'prefix=%s' % self.sysroot,
'no_deps=t', 'install-headers'])
cmdlist.cleanup_dir()
cmdlist.pop_subdesc()
def build_gcc(self, cmdlist, bootstrap):
"""Build GCC."""
# libsanitizer commonly breaks because of glibc header
@ -1346,8 +1396,10 @@ class Glibc(object):
# writing into the working directory. To avoid possible
# concurrency issues, copy the source directory.
cmdlist.create_copy_dir(srcdir, srcdir_copy)
use_usr = self.os != 'gnu'
prefix = '/usr' if use_usr else ''
cfg_cmd = [os.path.join(srcdir_copy, 'configure'),
'--prefix=/usr',
'--prefix=%s' % prefix,
'--enable-profile',
'--build=%s' % self.ctx.build_triplet,
'--host=%s' % self.triplet,
@ -1362,6 +1414,8 @@ class Glibc(object):
'RANLIB=%s' % self.tool_name('ranlib'),
'READELF=%s' % self.tool_name('readelf'),
'STRIP=%s' % self.tool_name('strip')]
if self.os == 'gnu':
cfg_cmd += ['MIG=%s' % self.tool_name('mig')]
cfg_cmd += self.cfg
cmdlist.add_command('configure', cfg_cmd)
cmdlist.add_command('build', ['make'])
@ -1369,10 +1423,11 @@ class Glibc(object):
'install_root=%s' % installdir])
# GCC uses paths such as lib/../lib64, so make sure lib
# directories always exist.
cmdlist.add_command('mkdir-lib', ['mkdir', '-p',
os.path.join(installdir, 'lib'),
os.path.join(installdir,
'usr', 'lib')])
mkdir_cmd = ['mkdir', '-p',
os.path.join(installdir, 'lib')]
if use_usr:
mkdir_cmd += [os.path.join(installdir, 'usr', 'lib')]
cmdlist.add_command('mkdir-lib', mkdir_cmd)
if not for_compiler:
if self.ctx.strip:
cmdlist.add_command('strip',