summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorGlenn Johnson <glenn-johnson@uiowa.edu>2022-04-27 03:30:39 -0500
committerGitHub <noreply@github.com>2022-04-27 10:30:39 +0200
commitb8015a71e90320062247fea07f6a13ddd553b044 (patch)
treeef833fd533374fb8b9aedd179780d3377e34119c /var
parent739f040fa8ce8c934c8d65b053b4a37d3796f8f9 (diff)
downloadspack-b8015a71e90320062247fea07f6a13ddd553b044.tar.gz
spack-b8015a71e90320062247fea07f6a13ddd553b044.tar.bz2
spack-b8015a71e90320062247fea07f6a13ddd553b044.tar.xz
spack-b8015a71e90320062247fea07f6a13ddd553b044.zip
relion: add altcpu variant and fix fftw (#30097)
This package was not setting FFTW when +mklfft was used with +cuda. Since both were set to 'True', the default build was not linked to any FFTW, leading to a run time error. It seems MKL support was conflated with alternative CPU acceleration support. This PR does the following: - adds the altcpu variant to specify non-GPU/CPU acceleration - sets a conflict between +altcpu and +cuda - sets an FFTW implementation - sets fltk+xft when +gui to get a decent looking GUI interface - sets tbb dependency only when +altcpu - adds dependency on ctffind - adds variant and dependency on motioncor2 - sets defaults for - qsub template location - ctffind location - motioncor2 location Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/relion/package.py69
1 files changed, 53 insertions, 16 deletions
diff --git a/var/spack/repos/builtin/packages/relion/package.py b/var/spack/repos/builtin/packages/relion/package.py
index 7bb6e92d6a..7f912fbe7e 100644
--- a/var/spack/repos/builtin/packages/relion/package.py
+++ b/var/spack/repos/builtin/packages/relion/package.py
@@ -36,35 +36,52 @@ class Relion(CMakePackage, CudaPackage):
variant('cuda', default=True, description="enable compute on gpu")
variant('double', default=True, description="double precision (cpu) code")
variant('double-gpu', default=False, description="double precision gpu")
+
# if built with purpose=cluster then relion will link to gpfs libraries
# if that's not desirable then use purpose=desktop
variant('purpose', default='cluster', values=('cluster', 'desktop'),
description="build relion for use in cluster or desktop")
+
variant('build_type', default='RelWithDebInfo',
description='The build type to build',
values=('Debug', 'Release', 'RelWithDebInfo',
'Profiling', 'Benchmarking'))
+
+ # these new values were added in relion 3
+ # do not seem to cause problems with < 3
variant('mklfft', default=True, description='Use MKL rather than FFTW for FFT')
variant('allow_ctf_in_sagd', default=True, description='Allow CTF-modulation in SAGD, as specified in Claim 1 of patent US10,282,513B2')
+ variant('altcpu', default=False, description='Use CPU acceleration', when='~cuda')
+
+ variant('external_motioncor2',
+ default=False,
+ description='Have external motioncor2 available in addition to '
+ 'Relion builtin')
depends_on('mpi')
depends_on('cmake@3:', type='build')
depends_on('fftw precision=float,double', when='~mklfft')
- depends_on('fltk', when='+gui')
+
+ # use the +xft variant so the interface is not so horrible looking
+ depends_on('fltk+xft', when='+gui')
+
depends_on('libtiff')
depends_on('libpng', when='@4:')
depends_on('cuda', when='+cuda')
depends_on('cuda@9:', when='@3: +cuda')
- depends_on('tbb', when='~cuda')
- depends_on('mkl', when='~cuda +mklfft')
-
+ depends_on('tbb', when='+altcpu')
+ depends_on('mkl', when='+mklfft')
+ depends_on('ctffind', type='run')
+ depends_on('motioncor2', type='run', when='+external_motioncor2')
+
+ # TODO: more externals to add
+ # Spack packages needed
+ # - Gctf
+ # - ResMap
patch('0002-Simple-patch-to-fix-intel-mkl-linking.patch', when='@:3.1.1 os=ubuntu18.04')
def cmake_args(self):
-
- carch = self.spec.variants['cuda_arch'].value[0]
-
args = [
'-DCMAKE_C_FLAGS=-g',
'-DCMAKE_CXX_FLAGS=-g',
@@ -72,20 +89,24 @@ class Relion(CMakePackage, CudaPackage):
'-DDoublePrec_CPU=%s' % ('+double' in self.spec),
'-DDoublePrec_GPU=%s' % ('+double-gpu' in self.spec),
'-DALLOW_CTF_IN_SAGD=%s' % ('+allow_ctf_in_sagd' in self.spec),
+ '-DMKLFFT=%s' % ('+mklfft' in self.spec),
+ '-DALTCPU=%s' % ('+altcpu' in self.spec),
]
if '+cuda' in self.spec:
+ carch = self.spec.variants['cuda_arch'].value[0]
+
# relion+cuda requires selecting cuda_arch
- if not carch:
- raise ValueError("select cuda_arch when building with +cuda")
+ if carch == 'none':
+ raise ValueError(
+ 'Must select a value for cuda_arch'
+ )
else:
- args += ['-DCUDA=ON', '-DCudaTexture=ON',
- '-DCUDA_ARCH=%s' % (carch)]
-
- # these new values were added in relion 3
- # do not seem to cause problems with < 3
- else:
- args += ['-DMKLFFT=%s' % ('+mklfft' in self.spec), '-DALTCPU=ON']
+ args += [
+ '-DCUDA=ON',
+ '-DCudaTexture=ON',
+ '-DCUDA_ARCH=%s' % (carch),
+ ]
return args
@@ -93,3 +114,19 @@ class Relion(CMakePackage, CudaPackage):
# Remove flags not recognized by the NVIDIA compilers
if self.spec.satisfies('%nvhpc'):
filter_file('-std=c99', '-c99', 'src/apps/CMakeLists.txt')
+
+ # set up some defaults
+ filter_file(r'(#define DEFAULTQSUBLOCATION).*',
+ r'\1 "{0}"'.format(join_path(self.spec.prefix.bin,
+ 'relion_qsub.csh')),
+ join_path('src', 'pipeline_jobs.h'))
+ filter_file(r'(#define DEFAULTCTFFINDLOCATION).*',
+ r'\1 "{0}"'.format(join_path(
+ self.spec['ctffind'].prefix.bin, 'ctffind')),
+ join_path('src', 'pipeline_jobs.h'))
+
+ if '+external_motioncor2' in self.spec:
+ filter_file(r'(#define DEFAULTMOTIONCOR2LOCATION).*',
+ r'\1 "{0}"'.format(join_path(
+ self.spec['motioncor2'].prefix.bin, 'MotionCor2')),
+ join_path('src', 'pipeline_jobs.h'))