Sherpa: add several new variants used by CMS (#29338)

This commit is contained in:
iarspider 2022-03-25 02:30:33 +01:00 committed by GitHub
parent 0168047429
commit 4702b49094
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 85 additions and 22 deletions

View File

@ -0,0 +1,31 @@
# Copyright 2013-2022 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)
from spack import *
class Blackhat(AutotoolsPackage):
"""Blackhat MC generator"""
homepage = "https://blackhat.hepforge.org"
git = "https://github.com/cms-externals/blackhat.git"
version('0.9.9', branch='cms/v0.9.9')
depends_on('qd')
depends_on('python')
extends('python')
def patch(self):
filter_file('else return Cached_OLHA_user_normal',
'else return new Cached_OLHA_user_normal',
'src/cached_OLHA.cpp')
def configure_args(self):
return ['--with-QDpath=' + self.spec['qd'].prefix,
'--enable-pythoninterface=no']
def setup_build_environment(self, env):
env.append_flags('CXXFLAGS', '-Wno-deprecated')

View File

@ -59,6 +59,13 @@ class Sherpa(AutotoolsPackage):
variant('lhapdf', default=True, description='Enable LHAPDF support')
variant('gzip', default=False, description='Enable gzip support')
variant('pythia', default=True, description='Enable fragmentation/decay interface to Pythia')
variant('blackhat', default=False, description='Enable BLACKHAT support')
variant('ufo', default=False, description='Enable UFO support')
# cernlib not yet in spack
variant('hztool', default=False, description='Enable HZTOOL support')
# variant('cernlib', default=False, description='Enable CERNLIB support')
variant('cms', default=False, description="Append CXXFLAGS used by CMS experiment")
# Note that the delphes integration seems utterly broken: https://sherpa.hepforge.org/trac/ticket/305
@ -83,6 +90,9 @@ class Sherpa(AutotoolsPackage):
depends_on('lhapdf', when='+lhapdf')
depends_on('gzip', when='+gzip')
depends_on('pythia6', when='+pythia')
depends_on('blackhat', when='+blackhat')
depends_on('hztool', when='+hztool')
# depends_on('cernlib', when='+cernlib')
for std in _cxxstd_values:
depends_on('root cxxstd=' + std, when='+root cxxstd=' + std)
@ -100,30 +110,52 @@ def configure_args(self):
args.append('--enable-hepevtsize=200000')
args.append('--with-sqlite3=' + self.spec['sqlite'].prefix)
args.extend(self.enable_or_disable('mpi'))
if self.spec.satisfies('+python'):
args.append('--enable-pyext')
args.extend(self.enable_or_disable('pyext', variant='python'))
args.extend(self.enable_or_disable('analysis'))
args.extend(self.enable_or_disable('lhole'))
args.extend(self.enable_or_disable('gzip'))
args.extend(self.enable_or_disable('pythia'))
if self.spec.satisfies('+hepmc2'):
args.append('--enable-hepmc2=' + self.spec['hepmc'].prefix)
if self.spec.satisfies('+hepmc3'):
args.append('--enable-hepmc3=' + self.spec['hepmc3'].prefix)
if self.spec.satisfies('+rivet'):
args.append('--enable-rivet=' + self.spec['rivet'].prefix)
if self.spec.satisfies('+fastjet'):
args.append('--enable-fastjet=' + self.spec['fastjet'].prefix)
if self.spec.satisfies('+openloops'):
args.append('--enable-openloops=' + self.spec['openloops'].prefix)
if self.spec.satisfies('+recola'):
args.append('--enable-recola=' + self.spec['recola'].prefix)
if self.spec.satisfies('+root'):
args.append('--enable-root=' + self.spec['root'].prefix)
if self.spec.satisfies('+lhapdf'):
args.append('--enable-lhapdf=' + self.spec['lhapdf'].prefix)
if self.spec.satisfies('+hztool'):
args.append('--enable-hztool=' + self.spec['hztool'].prefix)
if self.spec.satisfies('+cernlib'):
args.append('--enable-cernlib=' + self.spec['cernlib'].prefix)
hepmc_root = lambda x: self.spec['hepmc'].prefix
args.extend(self.enable_or_disable('hepmc2', activation_value=hepmc_root))
if self.spec.satisfies('@2.2.13:'):
args.extend(self.enable_or_disable('hepmc3', activation_value='prefix'))
args.extend(self.enable_or_disable('rivet', activation_value='prefix'))
args.extend(self.enable_or_disable('lhapdf', activation_value='prefix'))
else:
# See https://gitlab.com/sherpa-team/sherpa/-/issues/348
if self.spec.satisfies('+hepmc3'):
args.append('--enable-hepmc3=' + self.spec['hepmc3'].prefix)
if self.spec.satisfies('+rivet'):
args.append('--enable-rivet=' + self.spec['rivet'].prefix)
if self.spec.satisfies('+lhapdf'):
args.append('--enable-lhapdf=' + self.spec['lhapdf'].prefix)
args.extend(self.enable_or_disable('fastjet', activation_value='prefix'))
args.extend(self.enable_or_disable('openloops', activation_value='prefix'))
args.extend(self.enable_or_disable('recola', activation_value='prefix'))
args.extend(self.enable_or_disable('root', activation_value='prefix'))
args.extend(self.enable_or_disable('hztool', activation_value='prefix'))
# args.extend(self.enable_or_disable('cernlib', activation_value='prefix'))
args.extend(self.enable_or_disable('blackhat', activation_value='prefix'))
args.extend(self.enable_or_disable('ufo'))
if self.spec.satisfies('+mpi'):
args.append('CC=' + self.spec['mpi'].mpicc)
args.append('MPICXX=' + self.spec['mpi'].mpicxx)
args.append('CXX=' + self.spec['mpi'].mpicxx)
args.append('FC=' + self.spec['mpi'].mpifc)
return args
def flag_handler(self, name, flags):
flags = list(flags)
if name == 'cxxflags':
flags.append('-std=c++' + self.spec.variants['cxxstd'].value)
if '+cms' in self.spec:
flags.extend(['-fuse-cxa-atexit', '-O2'])
if self.spec.target.family == 'x86_64':
flags.append('-m64')
return (None, None, flags)