spack/var/spack/repos/builtin/packages/kokkos-legacy/package.py
Tom Scogland 18c2f1a57a
refactor: packages import spack.package explicitly (#30404)
Explicitly import package utilities in all packages, and corresponding fallout.

This includes:

* rename `spack.package` to `spack.package_base`
* rename `spack.pkgkit` to `spack.package`
* update all packages in builtin, builtin_mock and tutorials to include `from spack.package import *`
* update spack style
  * ensure packages include the import
  * automatically add the new import and remove any/all imports of `spack` and `spack.pkgkit`
    from packages when using `--fix`
  * add support for type-checking packages with mypy when SPACK_MYPY_CHECK_PACKAGES
    is set in the environment
* fix all type checking errors in packages in spack upstream
* update spack create to include the new imports
* update spack repo to inject the new import, injection persists to allow for a deprecation period

Original message below:
 
As requested @adamjstewart, update all packages to use pkgkit.  I ended up using isort to do this,
so repro is easy:

```console
$ isort -a 'from spack.pkgkit import *' --rm 'spack' ./var/spack/repos/builtin/packages/*/package.py
$ spack style --fix
```

There were several line spacing fixups caused either by space manipulation in isort or by packages
that haven't been touched since we added requirements, but there are no functional changes in here.

* [x] add config to isort to make sure this is maintained going forward
2022-05-28 12:55:44 -04:00

230 lines
10 KiB
Python

# 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.package import *
class KokkosLegacy(Package):
"""Kokkos implements a programming model in C++ for writing performance
portable applications targeting all major HPC platforms."""
homepage = "https://github.com/kokkos/kokkos"
url = "https://github.com/kokkos/kokkos/archive/2.03.00.tar.gz"
git = "https://github.com/kokkos/kokkos.git"
version('2.9.00', sha256='e0621197791ed3a381b4f02c78fa529f3cff3abb74d52157b4add17e8aa04bc4', deprecated=True)
version('2.8.00', sha256='1c72661f2d770517bff98837001b42b9c677d1df29f7493a1d7c008549aff630', deprecated=True)
version('2.7.24', sha256='a308a80ea1488f4c18884b828ce7ae9f5210b9a6b2f61b208d875084d8da8cb0', deprecated=True)
version('2.7.00', sha256='01595996e612ef7410aa42fa265a23101cfe1b6993fa9810ca844db5c89ad765', deprecated=True)
version('2.6.00', sha256='ab3c6b49cf0cfa2173eaf0c50acd2827fdc0ce260e9b46d5cb8be35261092486', deprecated=True)
version('2.5.00', sha256='ea232594bf746abb99ae2aafaeef5d07adc089968010a62a88aaa892106d9476', deprecated=True)
version('2.04.11', sha256='f2680aee0169f6cbbec38410f9c80bf8a160435f6a07769c1e9112da8b9349a0', deprecated=True)
version('2.04.04', sha256='5bac8ddc2fac9bc6e01dd40f92ca6cbbb346a25deca5be2fec71acf712d0d0c7', deprecated=True)
version('2.04.00', sha256='b04658d368986df207662a7a37c1ad974c321447bc2c2b5b696d7e9ee4481f34', deprecated=True)
version('2.03.13', sha256='002748bdd0319d5ab82606cf92dc210fc1c05d0607a2e1d5538f60512b029056', deprecated=True)
version('2.03.05', sha256='b18ddaa1496130ff3f675ea9ddbc6df9cdf378d53edf96df89e70ff189e10e1d', deprecated=True)
version('2.03.00', sha256='722bea558d8986efee765ac912febb3c1ce289a8e9bdfef77cd0145df0ea8a3d', deprecated=True)
version('2.02.15', sha256='6b4a7f189f0341f378f950f3c798f520d2e473b13435b137ff3b666e799a076d', deprecated=True)
version('2.02.07', sha256='7b4ac81021d6868f4eb8e2a1cb92ba76bad9c3f197403b8b1eac0f11c983247c', deprecated=True)
variant('debug', default=False, description="Build debug version of Kokkos")
variant('serial', default=True, description="enable Serial backend (default)")
variant('pthreads', default=False, description="enable Pthreads backend")
variant('qthreads', default=False, description="enable Qthreads backend")
variant('cuda', default=False, description="enable Cuda backend")
variant('openmp', default=False, description="enable OpenMP backend")
# Compilation options
variant('pic', default=False,
description="enable position independent code (-fPIC flag)")
# Kokkos options
variant('aggressive_vectorization', default=False,
description="set aggressive_vectorization Kokkos option")
variant('disable_profiling', default=False,
description="set disable_profiling Kokkos option")
variant('disable_dualview_modify_check', default=False,
description="set disable_dualview_modify_check Kokkos option")
variant('enable_profile_load_print', default=False,
description="set enable_profile_load_print Kokkos option")
variant('compiler_warnings', default=False,
description="set compiler_warnings Kokkos option")
variant('disable_deprecated_code', default=False,
description="set disable_deprecated_code Kokkos option")
variant('enable_eti', default=False,
description="set enable_eti Kokkos option")
# CUDA options
variant('force_uvm', default=False,
description="set force_uvm Kokkos CUDA option")
variant('use_ldg', default=False,
description="set use_ldg Kokkos CUDA option")
variant('rdc', default=False,
description="set rdc Kokkos CUDA option")
variant('enable_lambda', default=False,
description="set enable_lambda Kokkos CUDA option")
host_values = ('AMDAVX', 'ARMv80', 'ARMv81', 'ARMv8-ThunderX',
'Power7', 'Power8', 'Power9',
'WSM', 'SNB', 'HSW', 'BDW', 'SKX',
'KNC', 'KNL')
gpu_values = ('Kepler30', 'Kepler32', 'Kepler35', 'Kepler37',
'Maxwell50', 'Maxwell52', 'Maxwell53',
'Pascal60', 'Pascal61',
'Volta70', 'Volta72')
# C++ standard variant
cxx_stds = ('none', 'c++11', 'c++14', 'c++17', 'c++1y', 'c++1z', 'c++2a')
variant('cxxstd', default='none', values=cxx_stds, multi=False,
description='set cxxstandard Kokkos option')
# Host architecture variant
variant(
'host_arch',
default='none',
values=host_values + ('none',),
description='Set the host architecture to use'
)
# GPU architecture variant
variant(
'gpu_arch',
default='none',
values=gpu_values + ('none',),
description='Set the GPU architecture to use'
)
# Checks on Kokkos version and Kokkos options
conflicts('+aggressive_vectorization', when='@:2.0',)
conflicts('+disable_profiling', when='@:2.0',)
conflicts('+disable_dualview_modify_check', when='@:2.03.04',)
conflicts('+enable_profile_load_print', when='@:2.03.04',)
conflicts('+compiler_warnings', when='@:2.03.14',)
conflicts('+disable_deprecated_code', when='@:2.5',)
conflicts('+enable_eti', when='@:2.6',)
# Check that we haven't specified a gpu architecture
# without specifying CUDA
for p in gpu_values:
conflicts('gpu_arch={0}'.format(p), when='~cuda',
msg='Must specify CUDA backend to use a GPU architecture.')
# Check that we haven't specified a Kokkos CUDA option
# without specifying CUDA
conflicts('+force_uvm', when='~cuda',
msg='Must enable CUDA to use force_uvm.')
conflicts('+use_ldg', when='~cuda',
msg='Must enable CUDA to use use_ldg.')
conflicts('+rdc', when='~cuda',
msg='Must enable CUDA to use rdc.')
conflicts('+enable_lambda', when='~cuda',
msg='Must enable CUDA to use enable_lambda.')
# Check that we haven't asked for a GPU architecture that
# the revision of kokkos does not support
conflicts('gpu_arch=Volta70', when='@:2.5')
conflicts('gpu_arch=Volta72', when='@:2.5')
# conflicts on kokkos version and cuda enabled
# see kokkos issue #1296
# https://github.com/kokkos/kokkos/issues/1296
conflicts('+cuda', when='@2.5.00:2.7.00',
msg='Kokkos build system has issue (#1296) when CUDA enabled'
' in version 2.5.00 through 2.7.00.')
# Specify that v1.x is required as v2.x has API changes
depends_on('hwloc@:1')
depends_on('qthreads', when='+qthreads')
depends_on('cuda', when='+cuda')
# generate_makefile.bash calls cmake
depends_on('cmake@3.10:', type='build')
def install(self, spec, prefix):
generate = which(join_path(self.stage.source_path,
'generate_makefile.bash'))
with working_dir('build', create=True):
g_args = [
'--prefix=%s' % prefix,
'--with-hwloc=%s' % spec['hwloc'].prefix,
]
arch_args = []
kokkos_options_args = []
cuda_options_args = []
# PIC
if '+pic' in spec:
g_args.append('--cxxflags=-fPIC')
# C++ standard
cxxstandard = spec.variants['cxxstd'].value
if cxxstandard != 'none':
g_args.append('--cxxstandard=%s' % cxxstandard)
# Build Debug
if '+debug' in spec:
g_args.append('--debug')
# Backends
if '+serial' in spec:
g_args.append('--with-serial')
if '+openmp' in spec:
g_args.append('--with-openmp')
if '+pthreads' in spec:
g_args.append('--with-pthread')
if '+qthreads' in spec:
g_args.append('--with-qthreads=%s' % spec['qthreads'].prefix)
if '+cuda' in spec:
g_args.append('--with-cuda=%s' % spec['cuda'].prefix)
# Host architectures
host_arch = spec.variants['host_arch'].value
# GPU architectures
gpu_arch = spec.variants['gpu_arch'].value
if host_arch != 'none':
arch_args.append(host_arch)
if gpu_arch != 'none':
arch_args.append(gpu_arch)
# Combined architecture flags
if arch_args:
g_args.append('--arch={0}'.format(','.join(arch_args)))
# CUDA options
if '+force_uvm' in spec:
cuda_options_args.append('force_uvm')
if '+use_ldg' in spec:
cuda_options_args.append('use_ldg')
if '+rdc' in spec:
cuda_options_args.append('rdc')
if '+enable_lambda' in spec:
cuda_options_args.append('enable_lambda')
if cuda_options_args:
g_args.append('--with-cuda-options={0}'
.format(','.join(cuda_options_args)))
# Kokkos options
if '+aggressive_vectorization' in spec:
kokkos_options_args.append('aggressive_vectorization')
if '+disable_profiling' in spec:
kokkos_options_args.append('disable_profiling')
if '+disable_dualview_modify_check' in spec:
kokkos_options_args.append('disable_dualview_modify_check')
if '+enable_profile_load_print' in spec:
kokkos_options_args.append('enable_profile_load_print')
if '+compiler_warnings' in spec:
kokkos_options_args.append('compiler_warnings')
if '+disable_deprecated_code' in spec:
kokkos_options_args.append('disable_deprecated_code')
if '+enable_eti' in spec:
kokkos_options_args.append('enable_eti')
if kokkos_options_args:
g_args.append('--with-options={0}'
.format(','.join(kokkos_options_args)))
generate(*g_args)
make()
make('install')