Mercurial > gub
view gub/specs/cross/gcc.py @ 6357:824bfbe0b6aa
Fix gcc dependency
gcc requires gawk.
author | Masamichi Hosoda <trueroad@users.noreply.github.com> |
---|---|
date | Tue, 24 Feb 2015 23:29:14 +0900 |
parents | d43e47bc70ce |
children | 320da60cd586 |
line wrap: on
line source
import os # from gub import build from gub import context from gub import cross from gub import loggedos from gub import misc from gub.specs import gcc class Gcc (cross.AutoBuild): source = 'http://ftp.gnu.org/pub/gnu/gcc/gcc-4.9.2/gcc-4.9.2.tar.bz2' dependencies = [ 'cross/binutils', 'system::gcc', 'system::g++', 'tools::gmp', 'tools::mpfr', 'tools::mpc', 'tools::gawk', ] patches = ['gcc-4.8.2-libstdc++-debug-path.patch'] configure_command = (''' LDFLAGS='-L%(tools_prefix)s/lib %(rpath)s' ''' + cross.AutoBuild.configure_command) configure_flags = (cross.AutoBuild.configure_flags + '%(enable_languages)s' + ' --enable-static' + ' --enable-shared' + ' --with-as=%(cross_prefix)s/bin/%(target_architecture)s-as' + ' --with-ld=%(cross_prefix)s/bin/%(target_architecture)s-ld' + ' --with-nm=%(cross_prefix)s/bin/%(target_architecture)s-nm' ) make_flags = misc.join_lines (''' tooldir='%(cross_prefix)s/%(target_architecture)s' gcc_tooldir='%(prefix_dir)s/%(target_architecture)s' ''') def patch (self): cross.AutoBuild.patch (self) gcc.do_not_look_in_slash_usr (self) @context.subst_method def NM_FOR_TARGET (self): return '%(toolchain_prefix)snm' # FIXME: why no -devel package? subpackage_names = ['doc', 'c++-runtime', 'runtime', ''] def get_subpackage_definitions (self): d = cross.AutoBuild.get_subpackage_definitions (self) prefix_dir = self.settings.prefix_dir d['c++-runtime'] = [ prefix_dir + '/lib/libstdc++.so*', prefix_dir + '/lib/libgcc_s.so*', ] return d 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 def pre_install (self): cross.AutoBuild.pre_install (self) # Only id <PREFIX>/<TARGET-ARCH>/bin exists, gcc's install installs # the plain gcc drivers without <TOOLCHAIN-PREFIX>gcc # self.system ('mkdir -p %(install_root)s%(cross_prefix)s/%(target_architecture)s/bin') self.system ('mkdir -p %(install_root)s%(prefix_dir)s/%(target_architecture)s/bin') def install (self): cross.AutoBuild.install (self) gcc.move_target_libs (self, '%(install_prefix)s%(cross_dir)s/%(target_architecture)s') gcc.move_target_libs (self, '%(install_prefix)s%(cross_dir)s/lib') self.disable_libtool_la_files ('stdc[+][+]') class Gcc__from__source (Gcc): dependencies = (Gcc.dependencies + ['cross/gcc-core', 'glibc-core']) #FIXME: merge all configure_command settings with Gcc configure_flags = (Gcc.configure_flags + misc.join_lines (''' --with-local-prefix=%(system_prefix)s --disable-multilib --disable-nls --disable-libitm --disable-libsanitizer --disable-libcilkrts --enable-threads=posix --enable-__cxa_atexit --enable-symvers=gnu --enable-c99 --enable-clocale=gnu --enable-long-long ''')) def get_conflict_dict (self): return {'': ['cross/gcc-core'], 'doc': ['cross/gcc-core'], 'runtime': ['cross/gcc-core']} def install (self): Gcc.install (self) self.system(''' mkdir -p %(install_prefix)s%(cross_dir)s/lib/gcc/%(target_architecture)s/%(full_version)s/include/ ln -s ../include-fixed/limits.h %(install_prefix)s%(cross_dir)s/lib/gcc/%(target_architecture)s/%(full_version)s/include/limits.h ''') Gcc__linux = Gcc__from__source class Gcc__linux__ppc (Gcc__linux): configure_flags = (Gcc__linux.configure_flags + misc.join_lines (''' --disable-libatomic --disable-libgomp ''')) class Gcc__mingw (Gcc): dependencies = (Gcc.dependencies + ['mingw-w64-runtime'] + ['tools::libtool']) configure_flags = (Gcc.configure_flags + misc.join_lines (''' --enable-threads=posix ''')) def get_subpackage_definitions (self): d = cross.AutoBuild.get_subpackage_definitions (self) prefix_dir = self.settings.prefix_dir d['c++-runtime'] = [ prefix_dir + '/bin/libstdc++-*.dll', prefix_dir + '/bin/libgcc_s_*.dll', ] return d def install (self): Gcc.install (self) self.system(''' mkdir -p %(install_prefix)s/bin/ cp %(install_prefix)s/lib/libgcc_s_*.dll %(install_prefix)s/bin/ cp %(install_prefix)s%(cross_dir)s/%(target_architecture)s/lib/libstdc++-*.dll %(install_prefix)s/bin/ ''' )