# 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 Costa(CMakePackage): """ Distributed Communication-Optimal Matrix Transpose and Reshuffle Library Based on the paper: https://arxiv.org/abs/2106.06601 """ maintainers = ['haampie', 'kabicm'] homepage = 'https://github.com/eth-cscs/COSTA' url = 'https://github.com/eth-cscs/COSTA/releases/download/v2.0/COSTA-v2.0.tar.gz' git = 'https://github.com/eth-cscs/COSTA.git' # note: The default archives produced with github do not have the archives # of the submodules. version('master', branch='master', submodules=True) version('2.0', sha256='de250197f31f7d23226c6956a687c3ff46fb0ff6c621a932428236c3f7925fe4') variant('scalapack', default=False, description='Build with ScaLAPACK API') variant('shared', default=False, description="Build shared libraries") depends_on('cmake@3.12:', type='build') depends_on('mpi@3:') depends_on('scalapack', when='+scalapack') def url_for_version(self, version): return 'https://github.com/eth-cscs/COSTA/releases/download/v{0}/COSTA-v{1}.tar.gz'.format(version, version) def setup_build_environment(self, env): return def costa_scalapack_cmake_arg(self): spec = self.spec if '~scalapack' in spec: return 'OFF' elif '^intel-mkl' in spec or '^intel-oneapi-mkl' in spec: return 'MKL' elif '^cray-libsci' in spec: return 'CRAY_LIBSCI' return 'CUSTOM' def cmake_args(self): return [ self.define('COSTA_WITH_BENCHMARKS', 'OFF'), self.define('COSTA_WITH_APPS', 'OFF'), self.define('COSTA_WITH_TESTS', 'OFF'), self.define('COSTA_WITH_PROFILING', 'OFF'), self.define('COSTA_SCALAPACK', self.costa_scalapack_cmake_arg()), self.define('BUILD_SHARED_LIBS', '+shared' in self.spec) ]