Mercurial > gub
view gub/specs/gcc.py @ 6304:888a46c1471d
Update to gcc-4.9.2
author | Masamichi Hosoda <trueroad@users.noreply.github.com> |
---|---|
date | Sun, 04 Jan 2015 21:37:23 +0900 |
parents | b8d258e3350a |
children |
line wrap: on
line source
import os # from gub import context from gub import misc from gub import loggedos from gub import system from gub import tools class Gcc__system (system.Configure): def description (self): return 'GNU C compiler; 4.x is strongly recommended' class Gcc__tools (tools.AutoBuild): dependencies = [ 'binutils', ] configure_flags = (tools.AutoBuild.configure_flags + '%(enable_languages)s' + ' --disable-multilib' + ' --enable-static' + ' --enable-shared' + ' --with-as=%(tools_prefix)s/bin/as' + ' --with-ld=%(tools_prefix)s/bin/ld' + ' --with-nm=%(tools_prefix)s/bin/nm' ) def patch (self): tools.AutoBuild.patch (self) do_not_look_in_slash_usr (self) def languages (self): return ['c', 'c++'] @context.subst_method def enable_languages (self): flags = ' --enable-languages=' + ','.join (self.languages ()) if 'c++' in self.languages (): flags += ' --enable-libstdcxx-debug' return flags make_flags = misc.join_lines (''' tooldir='%(cross_prefix)s/%(target_architecture)s' gcc_tooldir='%(prefix_dir)s/%(target_architecture)s' ''') def install (self): tools.AutoBuild.install (self) move_target_libs (self, '%(install_prefix)s/%(target_architecture)s') # move_target_libs ('%(install_prefix)s%/lib') self.disable_libtool_la_files ('stdc[+][+]') def do_not_look_in_slash_usr (self): # GUB [cross] compilers must NOT look in /usr. # Fixes LIBRESTRICT=stat:open and resulting ugliness. for i in ['%(srcdir)s/configure', '%(srcdir)s/gcc/configure']: self.file_sub ([ # gcc-4.1.1 gcc/configure ('( *gcc_cv_tool_dirs=.*PATH_SEPARATOR/usr)', r'#\1'), # gcc-4.3.2 ./configure ('( *gcc_cv_tool_dirs=.*gcc_cv_tool_dirs/usr)', r'#\1')], i) # This seems to have been fixed in gcc-4.3.2, but only if # *not* cross-compiling---a hardcoded lookup in /usr, without # asking configure, still makes no sense to me. Redirecting # lookups survives gcc-4.1.1--4.3.2, which is more robust than # patching them out. self.file_sub ([ ('( standard_exec_prefix_.*= ")/usr', r'\1%(system_prefix)s')], '%(srcdir)s/gcc/gcc.c') def move_target_libs (self, libdir): self.system ('mkdir -p %(install_prefix)s/lib || true') def move_target_lib (logger, file_name): base = os.path.split (self.expand (file_name))[1] loggedos.rename (logger, file_name, os.path.join (self.expand ('%(install_prefix)s/lib'), base)) # for suf in ['.la', '.so*', '.dylib']: # .so* because version numbers trail .so extension. for suf in ['.a', '.la', '.so*', '.dylib']: self.map_find_files (move_target_lib, libdir, 'lib.*%(suf)s' % locals ()) def install_missing_archprefix_binaries (self): def copy (logger, plain_name): base_name = os.path.basename (plain_name) full_name = self.expand ('%(install_prefix)s%(cross_dir)s/bin/%(toolchain_prefix)s%(base_name)s', env=locals ()) if not os.path.exists (full_name): loggedos.system (logger, 'cp %(plain_name)s %(full_name)s' % locals ()) self.map_find_files (copy, '%(install_prefix)s%(cross_dir)s/%(target_architecture)s/bin', self.expand ('.*'))