acfl: provides blas, lapack, and fftw-api@3 (#34154)
This commit is contained in:
parent
4c017403db
commit
1374577659
@ -91,6 +91,25 @@ def get_os():
|
|||||||
return _os_map.get(spack_os, "RHEL-7")
|
return _os_map.get(spack_os, "RHEL-7")
|
||||||
|
|
||||||
|
|
||||||
|
def get_armpl_version_to_3(spec):
|
||||||
|
"""Return version string with 3 numbers"""
|
||||||
|
version_len = len(spec.version)
|
||||||
|
assert version_len == 2 or version_len == 3
|
||||||
|
if version_len == 2:
|
||||||
|
return spec.version.string + ".0"
|
||||||
|
elif version_len == 3:
|
||||||
|
return spec.version.string
|
||||||
|
|
||||||
|
|
||||||
|
def get_armpl_prefix(spec):
|
||||||
|
return join_path(
|
||||||
|
spec.prefix,
|
||||||
|
"armpl-{}_AArch64_{}_arm-linux-compiler_aarch64-linux".format(
|
||||||
|
get_armpl_version_to_3(spec), get_os()
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_acfl_prefix(spec):
|
def get_acfl_prefix(spec):
|
||||||
acfl_prefix = spec.prefix
|
acfl_prefix = spec.prefix
|
||||||
return join_path(
|
return join_path(
|
||||||
@ -122,9 +141,23 @@ class Acfl(Package):
|
|||||||
conflicts("target=x86_64:", msg="Only available on Aarch64")
|
conflicts("target=x86_64:", msg="Only available on Aarch64")
|
||||||
conflicts("target=ppc64:", msg="Only available on Aarch64")
|
conflicts("target=ppc64:", msg="Only available on Aarch64")
|
||||||
conflicts("target=ppc64le:", msg="Only available on Aarch64")
|
conflicts("target=ppc64le:", msg="Only available on Aarch64")
|
||||||
depends_on("ncurses abi=5")
|
|
||||||
executables = [r"armclang", r"armclang\+\+", r"armflang"]
|
executables = [r"armclang", r"armclang\+\+", r"armflang"]
|
||||||
|
|
||||||
|
variant("ilp64", default=False, description="use ilp64 specific Armpl library")
|
||||||
|
variant("shared", default=True, description="enable shared libs")
|
||||||
|
variant(
|
||||||
|
"threads",
|
||||||
|
default="none",
|
||||||
|
description="Multithreading support",
|
||||||
|
values=("openmp", "none"),
|
||||||
|
multi=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
provides("blas")
|
||||||
|
provides("lapack")
|
||||||
|
provides("fftw-api@3")
|
||||||
|
|
||||||
# Licensing - Not required from 22.0.1 on.
|
# Licensing - Not required from 22.0.1 on.
|
||||||
|
|
||||||
# Run the installer with the desired install directory
|
# Run the installer with the desired install directory
|
||||||
@ -184,14 +217,62 @@ def fortran(self):
|
|||||||
return self.spec.extra_attributes["compilers"].get("fortran", None)
|
return self.spec.extra_attributes["compilers"].get("fortran", None)
|
||||||
return join_path(get_acfl_prefix(self.spec), "bin", "armflang")
|
return join_path(get_acfl_prefix(self.spec), "bin", "armflang")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def lib_suffix(self):
|
||||||
|
suffix = ""
|
||||||
|
suffix += "_ilp64" if self.spec.satisfies("+ilp64") else ""
|
||||||
|
suffix += "_mp" if self.spec.satisfies("threads=openmp") else ""
|
||||||
|
return suffix
|
||||||
|
|
||||||
|
@property
|
||||||
|
def blas_libs(self):
|
||||||
|
armpl_prefix = get_armpl_prefix(self.spec)
|
||||||
|
|
||||||
|
libname = "libarmpl" + self.lib_suffix
|
||||||
|
|
||||||
|
# Get ArmPL Lib
|
||||||
|
armpl_libs = find_libraries(
|
||||||
|
[libname, "libamath", "libastring"],
|
||||||
|
root=armpl_prefix,
|
||||||
|
shared=self.spec.satisfies("+shared"),
|
||||||
|
recursive=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
armpl_libs += find_system_libraries(["libm"])
|
||||||
|
|
||||||
|
return armpl_libs
|
||||||
|
|
||||||
|
@property
|
||||||
|
def lapack_libs(self):
|
||||||
|
return self.blas_libs
|
||||||
|
|
||||||
|
@property
|
||||||
|
def fftw_libs(self):
|
||||||
|
return self.blas_libs
|
||||||
|
|
||||||
|
@property
|
||||||
|
def libs(self):
|
||||||
|
return self.blas_libs
|
||||||
|
|
||||||
|
@property
|
||||||
|
def headers(self):
|
||||||
|
armpl_dir = get_armpl_prefix(self.spec)
|
||||||
|
|
||||||
|
suffix = "include" + self.lib_suffix
|
||||||
|
|
||||||
|
incdir = join_path(armpl_dir, suffix)
|
||||||
|
|
||||||
|
hlist = find_all_headers(incdir)
|
||||||
|
hlist.directories = [incdir]
|
||||||
|
return hlist
|
||||||
|
|
||||||
def setup_run_environment(self, env):
|
def setup_run_environment(self, env):
|
||||||
arm_dir = get_acfl_prefix(self.spec)
|
arm_dir = get_acfl_prefix(self.spec)
|
||||||
|
armpl_dir = get_armpl_prefix(self.spec)
|
||||||
env.set("ARM_LINUX_COMPILER_DIR", arm_dir)
|
env.set("ARM_LINUX_COMPILER_DIR", arm_dir)
|
||||||
env.set("ARM_LINUX_COMPILER_INCLUDES", join_path(arm_dir, "includes"))
|
env.set("ARM_LINUX_COMPILER_INCLUDES", join_path(arm_dir, "includes"))
|
||||||
env.prepend_path("LD_LIBRARY_PATH", join_path(arm_dir, "lib"))
|
env.prepend_path("LD_LIBRARY_PATH", join_path(arm_dir, "lib"))
|
||||||
|
env.prepend_path("LD_LIBRARY_PATH", join_path(armpl_dir, "lib"))
|
||||||
env.prepend_path("PATH", join_path(arm_dir, "bin"))
|
env.prepend_path("PATH", join_path(arm_dir, "bin"))
|
||||||
env.prepend_path("CPATH", join_path(arm_dir, "include"))
|
env.prepend_path("CPATH", join_path(arm_dir, "include"))
|
||||||
env.prepend_path("MANPATH", join_path(arm_dir, "share", "man"))
|
env.prepend_path("MANPATH", join_path(arm_dir, "share", "man"))
|
||||||
env.prepend_path("ARM_LICENSE_DIR", join_path(self.prefix, "licences"))
|
|
||||||
if "ncurses" in self.spec:
|
|
||||||
env.prepend_path("LD_LIBRARY_PATH", join_path(self.spec["ncurses"].prefix, "lib"))
|
|
||||||
|
Loading…
Reference in New Issue
Block a user