summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/binutils/package.py
diff options
context:
space:
mode:
Diffstat (limited to 'var/spack/repos/builtin/packages/binutils/package.py')
-rw-r--r--var/spack/repos/builtin/packages/binutils/package.py86
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)