93 lines
3.2 KiB
Python
93 lines
3.2 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 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://spiral.net"
|
|
url = "https://github.com/spiral-software/fftx/archive/refs/tags/1.0.3.tar.gz"
|
|
git = "https://github.com/spiral-software/fftx.git"
|
|
|
|
maintainers = ["spiralgen"]
|
|
|
|
version("develop", branch="develop")
|
|
version("main", branch="main")
|
|
version("1.0.3", sha256="b5ff275facce4a2fbabd0aecc65dd55b744794f2e07cd8cfa91363001c664896")
|
|
|
|
variant(
|
|
"build_type",
|
|
default="Release",
|
|
values=("Debug", "Release", "RelWithDebInfo", "MinSizeRel"),
|
|
description="The build type to build",
|
|
)
|
|
|
|
depends_on("spiral-software")
|
|
depends_on("spiral-package-fftx")
|
|
depends_on("spiral-package-simt")
|
|
# depends_on('spiral-package-mpi')
|
|
|
|
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 directory examples/library run the build-lib-code.sh script
|
|
with working_dir(join_path(self.stage.source_path, "src", "library")):
|
|
bash = which("bash")
|
|
bash("./build-lib-code.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.stage.source_path))
|
|
args.append(self.build_config)
|
|
print("Args = " + str(args))
|
|
return args
|
|
|
|
@property
|
|
def build_targets(self):
|
|
return ["-j1", "install"]
|
|
|
|
def install(self, spec, prefix):
|
|
mkdirp(prefix.bin)
|
|
mkdirp(prefix.CMakeIncludes)
|
|
mkdirp(prefix.examples)
|
|
mkdirp(prefix.include)
|
|
mkdirp(prefix.lib)
|
|
|
|
with working_dir(self.stage.source_path):
|
|
files = ("License.txt", "README.md", "ReleaseNotes.md")
|
|
for fil in files:
|
|
install(fil, prefix)
|
|
|
|
with working_dir(self.stage.source_path):
|
|
install_tree("bin", prefix.bin)
|
|
install_tree("CMakeIncludes", prefix.CMakeIncludes)
|
|
install_tree("examples", prefix.examples)
|
|
install_tree("include", prefix.include)
|
|
install_tree("lib", prefix.lib)
|
|
|
|
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)
|