acfl: provides blas, lapack, and fftw-api@3 (#34154)

This commit is contained in:
Annop Wongwathanarat 2022-11-28 13:25:32 +00:00 committed by GitHub
parent 4c017403db
commit 1374577659
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -91,6 +91,25 @@ def get_os():
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):
acfl_prefix = spec.prefix
return join_path(
@ -122,9 +141,23 @@ class Acfl(Package):
conflicts("target=x86_64:", msg="Only available on Aarch64")
conflicts("target=ppc64:", 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"]
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.
# 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 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):
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_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(armpl_dir, "lib"))
env.prepend_path("PATH", join_path(arm_dir, "bin"))
env.prepend_path("CPATH", join_path(arm_dir, "include"))
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"))