1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# Copyright 2013-2023 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)
import os.path
from spack.package import *
class Fftx(CMakePackage, CudaPackage, ROCmPackage):
"""FFTX is the exascale follow-on to the FFTW open source discrete FFT
package for executing the Fast Fourier Transform as well as higher-level
operations composed of linear operations combined with DFT transforms."""
homepage = "https://spiralgen.com"
url = "https://github.com/spiral-software/fftx/archive/refs/tags/1.1.2.tar.gz"
git = "https://github.com/spiral-software/fftx.git"
maintainers("spiralgen")
version("develop", branch="develop")
version("main", branch="main")
version("1.1.2", sha256="b2c4a7791305481af9e1bd358c1215efa4506c91c943cddca3780a1ccbc27810")
version("1.1.1", sha256="5cbca66ef09eca02ee8f336f58eb45cfac69cfb29cd6eb945852ad74085d8a60")
version("1.1.0", sha256="a6f95605abc11460bbf51839727a456a31488e27e12a970fc29a1b8c42f4e3b5")
version("1.0.3", sha256="b5ff275facce4a2fbabd0aecc65dd55b744794f2e07cd8cfa91363001c664896")
depends_on("spiral-software+fftx+simt+jit+mpi")
# depend only on spiral-software, but spiral-software must be installed with variants:
# +fftx +simt +mpi +jit
conflicts("+rocm", when="+cuda", msg="FFTX only supports one GPU backend at a time")
@run_before("cmake")
def create_lib_source_code(self):
# What config should be built -- driven by spec
spec = self.spec
backend = "CPU"
if "+cuda" in spec:
backend = "CUDA"
if "+rocm" in spec:
backend = "HIP"
self.build_config = "-D_codegen=%s" % backend
# From the root directory run the config-fftx-libs.sh script
with working_dir(self.stage.source_path):
bash = which("bash")
bash("./config-fftx-libs.sh", backend)
def cmake_args(self):
spec = self.spec
args = ["-DSPIRAL_HOME:STRING={0}".format(spec["spiral-software"].prefix)]
args.append("-DCMAKE_INSTALL_PREFIX:PATH={0}".format(self.prefix))
if "+rocm" in spec:
args.append("-DCMAKE_CXX_COMPILER={0}".format(self.spec["hip"].hipcc))
args.append(self.build_config)
print("Args = " + str(args))
return args
@property
def build_targets(self):
return ["install"]
def install(self, spec, prefix):
with working_dir(self.stage.source_path):
files = ("License.txt", "README.md", "ReleaseNotes.md", "supercomputer-README.md")
for fil in files:
install(fil, prefix)
mkdirp(prefix.cache_jit_files)
with working_dir(self.stage.source_path):
dir = join_path(self.stage.source_path, "cache_jit_files")
if os.path.isdir(dir):
install_tree("cache_jit_files", prefix.cache_jit_files)
def setup_dependent_build_environment(self, env, dependent_spec):
env.set("FFTX_HOME", self.prefix)
def setup_dependent_run_environment(self, env, dependent_spec):
env.set("FFTX_HOME", self.prefix)
def setup_run_environment(self, env):
env.set("FFTX_HOME", self.prefix)
|