diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/binutils/package.py')
-rw-r--r-- | var/spack/repos/builtin/packages/binutils/package.py | 86 |
1 files changed, 56 insertions, 30 deletions
diff --git a/var/spack/repos/builtin/packages/binutils/package.py b/var/spack/repos/builtin/packages/binutils/package.py index f79015cf6b..bd3b64394c 100644 --- a/var/spack/repos/builtin/packages/binutils/package.py +++ b/var/spack/repos/builtin/packages/binutils/package.py @@ -1,10 +1,8 @@ -# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other +# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -import sys - class Binutils(AutotoolsPackage, GNUMirrorPackage): """GNU binutils, which contain the linker, assembler, objdump and others""" @@ -12,6 +10,8 @@ class Binutils(AutotoolsPackage, GNUMirrorPackage): homepage = "http://www.gnu.org/software/binutils/" gnu_mirror_path = "binutils/binutils-2.28.tar.bz2" + version('2.36.1', sha256='5b4bd2e79e30ce8db0abd76dd2c2eae14a94ce212cfc59d3c37d23e24bc6d7a3') + version('2.35.2', sha256='cfa7644dbecf4591e136eb407c1c1da16578bd2b03f0c2e8acdceba194bb9d61') version('2.35.1', sha256='320e7a1d0f46fcd9f413f1046e216cbe23bb2bce6deb6c6a63304425e48b1942') version('2.35', sha256='7d24660f87093670738e58bcc7b7b06f121c0fcb0ca8fc44368d675a5ef9cff7') version('2.34', sha256='89f010078b6cf69c23c27897d686055ab89b198dddf819efb0a4f2c38a0b36e6') @@ -28,16 +28,19 @@ class Binutils(AutotoolsPackage, GNUMirrorPackage): version('2.23.2', sha256='fe914e56fed7a9ec2eb45274b1f2e14b0d8b4f41906a5194eac6883cfe5c1097') version('2.20.1', sha256='71d37c96451333c5c0b84b170169fdcb138bbb27397dc06281905d9717c8ed64') - variant('plugins', default=False, + variant('plugins', default=True, description="enable plugins, needed for gold linker") - variant('gold', default=(sys.platform != 'darwin'), + variant('gold', default=False, description="build the gold linker") variant('libiberty', default=False, description='Also install libiberty.') variant('nls', default=True, description='Enable Native Language Support') variant('headers', default=False, description='Install extra headers (e.g. ELF)') variant('lto', default=False, description='Enable lto.') variant('ld', default=False, description='Enable ld.') + variant('gas', default=False, description='Enable as assembler.') variant('interwork', default=False, description='Enable interwork.') + variant('libs', default='shared,static', values=('shared', 'static'), + multi=True, description='Build shared libs, static libs or both') patch('cr16.patch', when='@:2.29.1') patch('update_symbol-2.26.patch', when='@2.26') @@ -58,51 +61,71 @@ class Binutils(AutotoolsPackage, GNUMirrorPackage): conflicts('+gold', when='platform=darwin', msg="Binutils cannot build linkers on macOS") + # When you build binutils with ~ld and +gas and load it in your PATH, you + # may end up with incompatibilities between a potentially older system ld + # and a recent assembler. For instance the linker on ubuntu 16.04 from + # binutils 2.26 and the assembler from binutils 2.36.1 will result in: + # "unable to initialize decompress status for section .debug_info" + # when compiling with debug symbols on gcc. + conflicts('+gas', '~ld', msg="Assembler not always compatible with system ld") + + # When you build ld.gold you automatically get ld, even when you add the + # --disable-ld flag + conflicts('~ld', '+gold') + + def setup_build_environment(self, env): + + if self.spec.satisfies('%cce'): + env.append_flags('LDFLAGS', '-Wl,-z,muldefs') + + if '+nls' in self.spec: + env.append_flags('LDFLAGS', '-lintl') + def configure_args(self): spec = self.spec - configure_args = [ + args = [ '--disable-dependency-tracking', '--disable-werror', '--enable-multilib', - '--enable-shared', '--enable-64-bit-bfd', '--enable-targets=all', '--with-system-zlib', '--with-sysroot=/', ] - if '+lto' in spec: - configure_args.append('--enable-lto') - - if '+ld' in spec: - configure_args.append('--enable-ld') - - if '+interwork' in spec: - configure_args.append('--enable-interwork') - - if '+gold' in spec: - configure_args.append('--enable-gold') - - if '+plugins' in spec: - configure_args.append('--enable-plugins') + args += self.enable_or_disable('libs') + args += self.enable_or_disable('lto') + args += self.enable_or_disable('ld') + args += self.enable_or_disable('gas') + args += self.enable_or_disable('interwork') + args += self.enable_or_disable('gold') + args += self.enable_or_disable('plugins') if '+libiberty' in spec: - configure_args.append('--enable-install-libiberty') + args.append('--enable-install-libiberty') + else: + args.append('--disable-install-libiberty') if '+nls' in spec: - configure_args.append('--enable-nls') - configure_args.append('LDFLAGS=-lintl') + args.append('--enable-nls') else: - configure_args.append('--disable-nls') + args.append('--disable-nls') # To avoid namespace collisions with Darwin/BSD system tools, # prefix executables with "g", e.g., gar, gnm; see Homebrew # https://github.com/Homebrew/homebrew-core/blob/master/Formula/binutils.rb if spec.satisfies('platform=darwin'): - configure_args.append('--program-prefix=g') + args.append('--program-prefix=g') + + return args - return configure_args + # 2.36 is missing some dependencies and requires serial make install. + # https://sourceware.org/bugzilla/show_bug.cgi?id=27482 + @when('@2.36:') + def install(self, spec, prefix): + with working_dir(self.build_directory): + make('-j', '1', *self.install_targets) @run_after('install') def install_headers(self): @@ -118,17 +141,20 @@ class Binutils(AutotoolsPackage, GNUMirrorPackage): extradir) def flag_handler(self, name, flags): + # Use a separate variable for injecting flags. This way, installing + # `binutils cflags='-O2'` will still work as expected. + iflags = [] # To ignore the errors of narrowing conversions for # the Fujitsu compiler if name == 'cxxflags' and ( self.spec.satisfies('@:2.31.1') and self.compiler.name in ('fj', 'clang', 'apple-clang') ): - flags.append('-Wno-narrowing') + iflags.append('-Wno-narrowing') elif name == 'cflags': if self.spec.satisfies('@:2.34 %gcc@10:'): - flags.append('-fcommon') - return (flags, None, None) + iflags.append('-fcommon') + return (iflags, None, flags) def test(self): spec_vers = str(self.spec.version) |