summaryrefslogblamecommitdiff
path: root/var/spack/repos/builtin/packages/fftx/package.py
blob: b2099f6e70c2473d49b47394a73404c0ac64248b (plain) (tree)
1
2
3
4
5
6
                                                                         



                                                                         
                           







                                                                             

                                                                                  
 
                               
 


                                                                                               
 





                                                                    
 


                                     

                                       
                                                                                        
 
                        


                                                        





                                                     

                                                                           


                                                                              


                         

                                                                                     
                                      
                                    



                            
                                 








                                                 
                                                                   



                                                 




                                                               

                                                                     
                                         

                                                                   
                                         

                                         
                                         
# 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)

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)