From f962aba6ce85ba001bbe20f6f849478fdb9370c5 Mon Sep 17 00:00:00 2001 From: becker33 Date: Wed, 19 Jul 2017 20:12:00 -0700 Subject: Allow packages to control handling of compiler flags (#4421) * Initial work on flag trapping using functions called _handler and default_flag_handler * Update packages so they do not obliterate flags * Added append to EnvironmentModifications class * changed EnvironmentModifications to have append_flags method * changed flag_val to be a tuple * Increased test coverage * added documentation of flag handling --- var/spack/repos/builtin/packages/clhep/package.py | 10 ++++++++-- var/spack/repos/builtin/packages/elpa/package.py | 4 ++-- var/spack/repos/builtin/packages/ferret/package.py | 7 ++++++- var/spack/repos/builtin/packages/git/package.py | 2 +- var/spack/repos/builtin/packages/libint/package.py | 1 + var/spack/repos/builtin/packages/libxc/package.py | 11 +++++++++-- var/spack/repos/builtin/packages/libxpm/package.py | 2 +- var/spack/repos/builtin/packages/llvm-lld/package.py | 5 ++++- var/spack/repos/builtin/packages/llvm/package.py | 2 +- var/spack/repos/builtin/packages/zlib/package.py | 2 +- 10 files changed, 34 insertions(+), 12 deletions(-) (limited to 'var') diff --git a/var/spack/repos/builtin/packages/clhep/package.py b/var/spack/repos/builtin/packages/clhep/package.py index e9bf85c97f..7120fffac6 100644 --- a/var/spack/repos/builtin/packages/clhep/package.py +++ b/var/spack/repos/builtin/packages/clhep/package.py @@ -78,12 +78,18 @@ class Clhep(CMakePackage): cmake_args = [] if '+cxx11' in spec: - env['CXXFLAGS'] = self.compiler.cxx11_flag + if 'CXXFLAGS' in env and env['CXXFLAGS']: + env['CXXFLAGS'] += ' ' + self.compiler.cxx11_flag + else: + env['CXXFLAGS'] = self.compiler.cxx11_flag cmake_args.append('-DCLHEP_BUILD_CXXSTD=' + self.compiler.cxx11_flag) if '+cxx14' in spec: - env['CXXFLAGS'] = self.compiler.cxx14_flag + if 'CXXFLAGS' in env and env['CXXFLAGS']: + env['CXXFLAGS'] += ' ' + self.compiler.cxx14_flag + else: + env['CXXFLAGS'] = self.compiler.cxx14_flag cmake_args.append('-DCLHEP_BUILD_CXXSTD=' + self.compiler.cxx14_flag) diff --git a/var/spack/repos/builtin/packages/elpa/package.py b/var/spack/repos/builtin/packages/elpa/package.py index 85d1706b2b..61e957c0c9 100644 --- a/var/spack/repos/builtin/packages/elpa/package.py +++ b/var/spack/repos/builtin/packages/elpa/package.py @@ -71,8 +71,8 @@ class Elpa(AutotoolsPackage): spack_env.set('FC', spec['mpi'].mpifc) spack_env.set('CXX', spec['mpi'].mpicxx) - spack_env.set('LDFLAGS', spec['lapack'].libs.search_flags) - spack_env.set('LIBS', spec['lapack'].libs.link_flags) + spack_env.append_flags('LDFLAGS', spec['lapack'].libs.search_flags) + spack_env.append_flags('LIBS', spec['lapack'].libs.link_flags) spack_env.set('SCALAPACK_LDFLAGS', spec['scalapack'].libs.joined()) def configure_args(self): diff --git a/var/spack/repos/builtin/packages/ferret/package.py b/var/spack/repos/builtin/packages/ferret/package.py index f2a32fdd70..6a4c0902f6 100644 --- a/var/spack/repos/builtin/packages/ferret/package.py +++ b/var/spack/repos/builtin/packages/ferret/package.py @@ -98,7 +98,12 @@ class Ferret(Package): ln('-sf', libz_prefix + '/lib', libz_prefix + '/lib64') - os.environ['LDFLAGS'] = '-lquadmath' + + if 'LDFLAGS' in env and env['LDFLAGS']: + env['LDFLAGS'] += ' ' + '-lquadmath' + else: + env['LDFLAGS'] = '-lquadmath' + with working_dir('FERRET', create=False): os.environ['LD_X11'] = '-L/usr/lib/X11 -lX11' os.environ['HOSTTYPE'] = 'x86_64-linux' diff --git a/var/spack/repos/builtin/packages/git/package.py b/var/spack/repos/builtin/packages/git/package.py index f01cc37d7b..9dc9e460af 100644 --- a/var/spack/repos/builtin/packages/git/package.py +++ b/var/spack/repos/builtin/packages/git/package.py @@ -155,7 +155,7 @@ class Git(AutotoolsPackage): depends_on('m4', type='build') def setup_environment(self, spack_env, run_env): - spack_env.set('LDFLAGS', '-L{0} -lintl'.format( + spack_env.append_flags('LDFLAGS', '-L{0} -lintl'.format( self.spec['gettext'].prefix.lib)) def configure_args(self): diff --git a/var/spack/repos/builtin/packages/libint/package.py b/var/spack/repos/builtin/packages/libint/package.py index d267a8ea88..34600e742a 100644 --- a/var/spack/repos/builtin/packages/libint/package.py +++ b/var/spack/repos/builtin/packages/libint/package.py @@ -85,6 +85,7 @@ class Libint(AutotoolsPackage): def configure_args(self): config_args = ['--enable-shared'] + optflags = self.optflags # Optimization flag names have changed in libint 2 diff --git a/var/spack/repos/builtin/packages/libxc/package.py b/var/spack/repos/builtin/packages/libxc/package.py index f018bacfa3..e2fe25c455 100644 --- a/var/spack/repos/builtin/packages/libxc/package.py +++ b/var/spack/repos/builtin/packages/libxc/package.py @@ -71,8 +71,15 @@ class Libxc(Package): if which('xiar'): env['AR'] = 'xiar' - env['CFLAGS'] = optflags - env['FCFLAGS'] = optflags + if 'CFLAGS' in env and env['CFLAGS']: + env['CFLAGS'] += ' ' + optflags + else: + env['CFLAGS'] = optflags + + if 'FCFLAGS' in env and env['FCFLAGS']: + env['FCFLAGS'] += ' ' + optflags + else: + env['FCFLAGS'] = optflags configure('--prefix={0}'.format(prefix), '--enable-shared') diff --git a/var/spack/repos/builtin/packages/libxpm/package.py b/var/spack/repos/builtin/packages/libxpm/package.py index 09d0b0ec61..40234b1b2d 100644 --- a/var/spack/repos/builtin/packages/libxpm/package.py +++ b/var/spack/repos/builtin/packages/libxpm/package.py @@ -46,5 +46,5 @@ class Libxpm(AutotoolsPackage): depends_on('util-macros', type='build') def setup_environment(self, spack_env, run_env): - spack_env.set('LDFLAGS', '-L{0} -lintl'.format( + spack_env.append_flags('LDFLAGS', '-L{0} -lintl'.format( self.spec['gettext'].prefix.lib)) diff --git a/var/spack/repos/builtin/packages/llvm-lld/package.py b/var/spack/repos/builtin/packages/llvm-lld/package.py index 4624451e69..0ebe2e6b89 100644 --- a/var/spack/repos/builtin/packages/llvm-lld/package.py +++ b/var/spack/repos/builtin/packages/llvm-lld/package.py @@ -38,7 +38,10 @@ class LlvmLld(Package): depends_on('cmake', type='build') def install(self, spec, prefix): - env['CXXFLAGS'] = self.compiler.cxx11_flag + if 'CXXFLAGS' in env and env['CXXFLAGS']: + env['CXXFLAGS'] += ' ' + self.compiler.cxx11_flag + else: + env['CXXFLAGS'] = self.compiler.cxx11_flag with working_dir('spack-build', create=True): cmake('..', diff --git a/var/spack/repos/builtin/packages/llvm/package.py b/var/spack/repos/builtin/packages/llvm/package.py index 1f88d94882..fc8823f1a8 100644 --- a/var/spack/repos/builtin/packages/llvm/package.py +++ b/var/spack/repos/builtin/packages/llvm/package.py @@ -325,7 +325,7 @@ class Llvm(CMakePackage): conflicts('+lldb', when='~clang') def setup_environment(self, spack_env, run_env): - spack_env.set('CXXFLAGS', self.compiler.cxx11_flag) + spack_env.append_flags('CXXFLAGS', self.compiler.cxx11_flag) def build_type(self): if '+debug' in self.spec: diff --git a/var/spack/repos/builtin/packages/zlib/package.py b/var/spack/repos/builtin/packages/zlib/package.py index 0d9822f287..30fcef95e1 100644 --- a/var/spack/repos/builtin/packages/zlib/package.py +++ b/var/spack/repos/builtin/packages/zlib/package.py @@ -57,7 +57,7 @@ class Zlib(Package): def setup_environment(self, spack_env, run_env): if '+pic' in self.spec: - spack_env.set('CFLAGS', self.compiler.pic_flag) + spack_env.append_flags('CFLAGS', self.compiler.pic_flag) def install(self, spec, prefix): config_args = [] -- cgit v1.2.3-70-g09d2