From 6b7c57ad47385bd6e45a03e2be18a675961596eb Mon Sep 17 00:00:00 2001 From: Brian Van Essen Date: Wed, 12 May 2021 12:18:01 -0700 Subject: High performance linkers for LBANN (#23594) * Added the option to use high performance linkers: gold and lld, for LBANN. Including them as build flags causes unnecessary propagation to all dependent packages, reducing package reuse. --- var/spack/repos/builtin/packages/lbann/package.py | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'var') diff --git a/var/spack/repos/builtin/packages/lbann/package.py b/var/spack/repos/builtin/packages/lbann/package.py index 790cb2a200..bffd23f21b 100644 --- a/var/spack/repos/builtin/packages/lbann/package.py +++ b/var/spack/repos/builtin/packages/lbann/package.py @@ -69,6 +69,14 @@ class Lbann(CMakePackage, CudaPackage, ROCmPackage): variant('pfe', default=True, description='Python Frontend for generating and launching models') variant('boost', default=False, description='Enable callbacks that use Boost libraries') + # LBANN benefits from high performance linkers, but passing these in as command + # line options forces the linker flags to unnecessarily propagate to all + # dependent packages. Don't include gold or lld as dependencies + variant('gold', default=False, description='Use gold high performance linker') + variant("lld", default=False, description="Use lld high performance linker") + # Don't expose this a dependency until Spack can find the external properly + # depends_on('binutils+gold', type='build', when='+gold') + # Variant Conflicts conflicts('@:0.90,0.99:', when='~conduit') conflicts('@0.90:0.101.99', when='+fft') @@ -84,6 +92,14 @@ class Lbann(CMakePackage, CudaPackage, ROCmPackage): conflicts('~python', when='@0.91:0.101') conflicts('~pfe', when='@0.91:0.101') + for comp in spack.compilers.supported_compilers(): + if comp != 'clang': + conflicts('+lld', when='%' + comp) + + conflicts("+lld", when="+gold") + conflicts('+gold', when='platform=darwin', msg="gold does not work on Darwin") + conflicts('+lld', when='platform=darwin', msg="lld does not work on Darwin") + depends_on('cmake@3.17.0:', type='build') # Specify the correct versions of Hydrogen @@ -237,6 +253,18 @@ class Lbann(CMakePackage, CudaPackage, ROCmPackage): '-DCNPY_DIR={0}'.format(spec['cnpy'].prefix), ) + # Use lld high performance linker + if '+lld' in spec: + args.extend([ + '-DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld', + '-DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld']) + + # Use gold high performance linker + if '+gold' in spec: + args.extend([ + '-DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=gold', + '-DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=gold']) + return args def setup_build_environment(self, env): -- cgit v1.2.3-60-g2f50