AOCL spack recipes for 4.1 release w. new AOCL-Utils library (#39489)

* AOCC and AOCL spack recipes for 4.1 release
* Fix broken checksum
* remove blank line
* Add missing `@when` for 4.1 only function

---------

Co-authored-by: vijay kallesh <Vijay-teekinavar.Kallesh@amd.com>
This commit is contained in:
AMD Toolchain Support 2023-08-25 06:35:39 +05:30 committed by GitHub
parent 76fbb8cd8f
commit 91d674f5d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 259 additions and 66 deletions

View file

@ -17,13 +17,14 @@ class AmdAocl(BundlePackage):
you agree to the terms and conditions of the AMD AOCL license agreement. you agree to the terms and conditions of the AMD AOCL license agreement.
You may obtain a copy of this license agreement from You may obtain a copy of this license agreement from
https://www.amd.com/en/developer/aocl/aocl-eula.html https://www.amd.com/en/developer/aocl/aocl-eula.html
https://www.amd.com/en/developer/aocl/aocl-4-0-eula.html https://www.amd.com/en/developer/aocl/eula/aocl-4-1-eula.html
""" """
homepage = "https://developer.amd.com/amd-aocl/" homepage = "https://developer.amd.com/amd-aocl/"
maintainers("amd-toolchain-support") maintainers("amd-toolchain-support")
version("4.1")
version("4.0") version("4.0")
version("3.2") version("3.2")
version("3.1") version("3.1")
@ -31,8 +32,7 @@ class AmdAocl(BundlePackage):
version("2.2") version("2.2")
variant("openmp", default=False, description="Enable OpenMP support.") variant("openmp", default=False, description="Enable OpenMP support.")
for vers in ["2.2", "3.0", "3.1", "3.2", "4.0", "4.1"]:
for vers in ["2.2", "3.0", "3.1", "3.2", "4.0"]:
depends_on("amdblis@{0} threads=openmp".format(vers), when="@{0} +openmp".format(vers)) depends_on("amdblis@{0} threads=openmp".format(vers), when="@{0} +openmp".format(vers))
depends_on("amdblis@{0} threads=none".format(vers), when="@{0} ~openmp".format(vers)) depends_on("amdblis@{0} threads=none".format(vers), when="@{0} ~openmp".format(vers))
depends_on("amdfftw@{0} +openmp".format(vers), when="@{0} +openmp".format(vers)) depends_on("amdfftw@{0} +openmp".format(vers), when="@{0} +openmp".format(vers))
@ -40,11 +40,13 @@ class AmdAocl(BundlePackage):
depends_on("amdlibflame@{0}".format(vers), when="@{0}".format(vers)) depends_on("amdlibflame@{0}".format(vers), when="@{0}".format(vers))
depends_on("amdlibm@{0}".format(vers), when="@{0}".format(vers)) depends_on("amdlibm@{0}".format(vers), when="@{0}".format(vers))
depends_on( depends_on(
"amdscalapack@{0} ^amdblis@{0} threads=none".format(vers), "amdscalapack@{0} ^amdblis@{0} ^amdlibflame@{0} threads=none".format(vers),
when="@{0} ~openmp".format(vers), when="@{0} ~openmp".format(vers),
) )
depends_on( depends_on(
"amdscalapack@{0} ^amdblis@{0} threads=openmp".format(vers), "amdscalapack@{0} ^amdblis@{0} ^amdlibflame@{0} threads=openmp".format(vers),
when="@{0} +openmp".format(vers), when="@{0} +openmp".format(vers),
) )
depends_on("aocl-sparse@{0}".format(vers), when="@{0}".format(vers)) depends_on(
"aocl-sparse@{0} ^amdblis@{0} ^amdlibflame@{0}".format(vers), when="@{0}".format(vers)
)

View file

@ -5,6 +5,8 @@
import os import os
from llnl.util import tty
from spack.package import * from spack.package import *
from spack.pkg.builtin.blis import BlisBase from spack.pkg.builtin.blis import BlisBase
@ -21,17 +23,18 @@ class Amdblis(BlisBase):
LICENSING INFORMATION: By downloading, installing and using this software, LICENSING INFORMATION: By downloading, installing and using this software,
you agree to the terms and conditions of the AMD AOCL-BLIS license you agree to the terms and conditions of the AMD AOCL-BLIS license
agreement. You may obtain a copy of this license agreement from agreement. You may obtain a copy of this license agreement from
https://www.amd.com/en/developer/aocl/blis/blis-4-0-eula.html https://www.amd.com/en/developer/aocl/dense/eula/blas-4-1-eula.html
https://www.amd.com/en/developer/aocl/blis/blis-eula.html https://www.amd.com/en/developer/aocl/dense/eula/blas-eula.html
""" """
_name = "amdblis" _name = "amdblis"
homepage = "https://www.amd.com/en/developer/aocl/blis.html" homepage = "https://www.amd.com/en/developer/aocl/blis.html"
url = "https://github.com/amd/blis/archive/3.0.tar.gz" url = "https://github.com/amd/blis/archive/3.0.tar.gz"
git = "https://github.com/amd/blis.git" git = "https://github.com/amd/blis"
maintainers("amd-toolchain-support") maintainers("amd-toolchain-support")
version("4.1", sha256="a05c6c7d359232580d1d599696053ad0beeedf50f3b88d5d22ee7d34375ab577")
version("4.0", sha256="cddd31176834a932753ac0fc4c76332868feab3e9ac607fa197d8b44c1e74a41") version("4.0", sha256="cddd31176834a932753ac0fc4c76332868feab3e9ac607fa197d8b44c1e74a41")
version("3.2", sha256="5a400ee4fc324e224e12f73cc37b915a00f92b400443b15ce3350278ad46fff6") version("3.2", sha256="5a400ee4fc324e224e12f73cc37b915a00f92b400443b15ce3350278ad46fff6")
version("3.1", sha256="2891948925b9db99eec02a1917d9887a7bee9ad2afc5421c9ba58602a620f2bf") version("3.1", sha256="2891948925b9db99eec02a1917d9887a7bee9ad2afc5421c9ba58602a620f2bf")
@ -40,15 +43,33 @@ class Amdblis(BlisBase):
version("2.2", sha256="e1feb60ac919cf6d233c43c424f6a8a11eab2c62c2c6e3f2652c15ee9063c0c9") version("2.2", sha256="e1feb60ac919cf6d233c43c424f6a8a11eab2c62c2c6e3f2652c15ee9063c0c9")
variant("ilp64", default=False, when="@3.0.1:", description="ILP64 support") variant("ilp64", default=False, when="@3.0.1:", description="ILP64 support")
variant("aocl_gemm", default=False, when="@4.1:", description="aocl_gemm support")
variant("suphandling", default=True, description="Small Unpacked Kernel handling") variant("suphandling", default=True, description="Small Unpacked Kernel handling")
def configure_args(self): def configure_args(self):
spec = self.spec spec = self.spec
args = super().configure_args() args = super().configure_args()
if not (
spec.satisfies(r"%aocc@3.2:4.1")
or spec.satisfies(r"%gcc@12.2:13.1")
or spec.satisfies(r"%clang@15:16")
):
tty.warn(
"AOCL has been tested to work with the following compilers\
versions - gcc@12.2:13.1, aocc@3.2:4.1, and clang@15:16\
see the following aocl userguide for details: \
https://www.amd.com/content/dam/amd/en/documents/developer/version-4-1-documents/aocl/aocl-4-1-user-guide.pdf"
)
if spec.satisfies("+ilp64"): if spec.satisfies("+ilp64"):
args.append("--blas-int-size=64") args.append("--blas-int-size=64")
if spec.satisfies("+aocl_gemm"):
args.append("-a aocl_gemm")
args.append("CC={0}".format(os.path.basename(spack_cc)))
args.append("CXX={0}".format(os.path.basename(spack_cxx)))
if spec.satisfies("+suphandling"): if spec.satisfies("+suphandling"):
args.append("--enable-sup-handling") args.append("--enable-sup-handling")
else: else:
@ -56,29 +77,17 @@ def configure_args(self):
# To enable Fortran to C calling convention for # To enable Fortran to C calling convention for
# complex types when compiling with aocc flang # complex types when compiling with aocc flang
if self.spec.satisfies("@3.0 %aocc"): if spec.satisfies("@3.0 %aocc"):
args.append("CFLAGS={0}".format("-DAOCL_F2C")) args.append("CFLAGS={0}".format("-DAOCL_F2C"))
args.append("CXXFLAGS={0}".format("-DAOCL_F2C")) args.append("CXXFLAGS={0}".format("-DAOCL_F2C"))
elif self.spec.satisfies("@3.0.1: %aocc"): elif spec.satisfies("@3.0.1: %aocc"):
args.append("--complex-return=intel") args.append("--complex-return=intel")
if self.spec.satisfies("@3.1:"): if spec.satisfies("@3.1:"):
args.append("--disable-aocl-dynamic") args.append("--disable-aocl-dynamic")
return args return args
def config_args(self):
config_args = super().config_args()
# "amdzen" - A fat binary or multiarchitecture binary
# support for 3.1 release onwards
if self.spec.satisfies("@3.1:"):
config_args.append("amdzen")
else:
config_args.append("auto")
return config_args
@run_after("install") @run_after("install")
def create_symlink(self): def create_symlink(self):
with working_dir(self.prefix.lib): with working_dir(self.prefix.lib):

View file

@ -5,6 +5,8 @@
import os import os
from llnl.util import tty
from spack.package import * from spack.package import *
from spack.pkg.builtin.fftw import FftwBase from spack.pkg.builtin.fftw import FftwBase
@ -26,8 +28,8 @@ class Amdfftw(FftwBase):
LICENSING INFORMATION: By downloading, installing and using this software, LICENSING INFORMATION: By downloading, installing and using this software,
you agree to the terms and conditions of the AMD AOCL-FFTW license you agree to the terms and conditions of the AMD AOCL-FFTW license
agreement. You may obtain a copy of this license agreement from agreement. You may obtain a copy of this license agreement from
https://www.amd.com/en/developer/aocl/fftw/fftw-libraries-4-0-eula.html https://www.amd.com/en/developer/aocl/fftw/eula/fftw-libraries-4-1-eula.html
https://www.amd.com/en/developer/aocl/fftw/fftw-libraries-eula.html https://www.amd.com/en/developer/aocl/fftw/eula/fftw-libraries-eula.html
""" """
_name = "amdfftw" _name = "amdfftw"
@ -37,6 +39,7 @@ class Amdfftw(FftwBase):
maintainers("amd-toolchain-support") maintainers("amd-toolchain-support")
version("4.1", sha256="f1cfecfcc0729f96a5bd61c6b26f3fa43bb0662d3fff370d4f73490c60cf4e59")
version("4.0", sha256="5f02cb05f224bd86bd88ec6272b294c26dba3b1d22c7fb298745fd7b9d2271c0") version("4.0", sha256="5f02cb05f224bd86bd88ec6272b294c26dba3b1d22c7fb298745fd7b9d2271c0")
version("3.2", sha256="31cab17a93e03b5b606e88dd6116a1055b8f49542d7d0890dbfcca057087b8d0") version("3.2", sha256="31cab17a93e03b5b606e88dd6116a1055b8f49542d7d0890dbfcca057087b8d0")
version("3.1", sha256="3e777f3acef13fa1910db097e818b1d0d03a6a36ef41186247c6ab1ab0afc132") version("3.1", sha256="3e777f3acef13fa1910db097e818b1d0d03a6a36ef41186247c6ab1ab0afc132")
@ -83,8 +86,15 @@ class Amdfftw(FftwBase):
) )
variant( variant(
"amd-dynamic-dispatcher", "amd-dynamic-dispatcher",
default=False, default=True,
when="@3.2:", when="@4.1: %aocc@4.1.0:",
description="Single portable optimized library"
" to execute on different x86 CPU architectures",
)
variant(
"amd-dynamic-dispatcher",
default=True,
when="@3.2: %gcc",
description="Single portable optimized library" description="Single portable optimized library"
" to execute on different x86 CPU architectures", " to execute on different x86 CPU architectures",
) )
@ -135,12 +145,6 @@ class Amdfftw(FftwBase):
) )
conflicts("precision=quad", msg="Quad precision is not supported with amd-app-opt") conflicts("precision=quad", msg="Quad precision is not supported with amd-app-opt")
conflicts(
"+amd-dynamic-dispatcher",
when="%aocc",
msg="dynamic-dispatcher is not supported by AOCC clang compiler",
)
def configure(self, spec, prefix): def configure(self, spec, prefix):
"""Configure function""" """Configure function"""
# Base options # Base options
@ -149,7 +153,7 @@ def configure(self, spec, prefix):
# Dynamic dispatcher builds a single portable optimized library # Dynamic dispatcher builds a single portable optimized library
# that can execute on different x86 CPU architectures. # that can execute on different x86 CPU architectures.
# It is supported for GCC compiler and Linux based systems only. # It is supported for GCC compiler and Linux based systems only.
if "+amd-dynamic-dispatcher" in self.spec: if "+amd-dynamic-dispatcher" in spec:
options.append("--enable-dynamic-dispatcher") options.append("--enable-dynamic-dispatcher")
# Check if compiler is AOCC # Check if compiler is AOCC
@ -158,6 +162,18 @@ def configure(self, spec, prefix):
options.append("FC={0}".format(os.path.basename(spack_fc))) options.append("FC={0}".format(os.path.basename(spack_fc)))
options.append("F77={0}".format(os.path.basename(spack_fc))) options.append("F77={0}".format(os.path.basename(spack_fc)))
if not (
spec.satisfies(r"%aocc@3.2:4.1")
or spec.satisfies(r"%gcc@12.2:13.1")
or spec.satisfies(r"%clang@15:16")
):
tty.warn(
"AOCL has been tested to work with the following compilers\
versions - gcc@12.2:13.1, aocc@3.2:4.1, and clang@15:16\
see the following aocl userguide for details: \
https://www.amd.com/content/dam/amd/en/documents/developer/version-4-1-documents/aocl/aocl-4-1-user-guide.pdf"
)
if "+debug" in spec: if "+debug" in spec:
options.append("--enable-debug") options.append("--enable-debug")
@ -194,6 +210,10 @@ def configure(self, spec, prefix):
# float and double precisions are supported # float and double precisions are supported
simd_features = ["sse2", "avx", "avx2", "avx512"] simd_features = ["sse2", "avx", "avx2", "avx512"]
# "avx512" is supported from amdfftw 4.0 version onwards
if "@2.2:3.2" in self.spec:
simd_features.remove("avx512")
simd_options = [] simd_options = []
for feature in simd_features: for feature in simd_features:
msg = "--enable-{0}" if feature in spec.target else "--disable-{0}" msg = "--enable-{0}" if feature in spec.target else "--disable-{0}"

View file

@ -3,6 +3,9 @@
# #
# SPDX-License-Identifier: (Apache-2.0 OR MIT) # SPDX-License-Identifier: (Apache-2.0 OR MIT)
# ----------------------------------------------------------------------------\ # ----------------------------------------------------------------------------\
import os
from llnl.util import tty
from spack.package import * from spack.package import *
from spack.pkg.builtin.libflame import LibflameBase from spack.pkg.builtin.libflame import LibflameBase
@ -33,17 +36,18 @@ class Amdlibflame(LibflameBase):
LICENSING INFORMATION: By downloading, installing and using this software, LICENSING INFORMATION: By downloading, installing and using this software,
you agree to the terms and conditions of the AMD AOCL-libFLAME license you agree to the terms and conditions of the AMD AOCL-libFLAME license
agreement. You may obtain a copy of this license agreement from agreement. You may obtain a copy of this license agreement from
https://www.amd.com/en/developer/aocl/blis/libflame-4-0-eula.html https://www.amd.com/en/developer/aocl/dense/eula-libflame/libflame-4-1-eula.html
https://www.amd.com/en/developer/aocl/blis/libflame-eula.html https://www.amd.com/en/developer/aocl/dense/eula-libflame/libflame-eula.html
""" """
_name = "amdlibflame" _name = "amdlibflame"
homepage = "https://www.amd.com/en/developer/aocl/blis.html#libflame" homepage = "https://www.amd.com/en/developer/aocl/blis.html#libflame"
url = "https://github.com/amd/libflame/archive/3.0.tar.gz" url = "https://github.com/amd/libflame/archive/3.0.tar.gz"
git = "https://github.com/amd/libflame.git" git = "https://github.com/amd/amdlibflame"
maintainers("amd-toolchain-support") maintainers("amd-toolchain-support")
version("4.1", sha256="8aed69c60d11cc17e058cabcb8a931cee4f343064ade3e73d3392b7214624b61")
version("4.0", sha256="bcb05763aa1df1e88f0da5e43ff86d956826cbea1d9c5ff591d78a3e091c66a4") version("4.0", sha256="bcb05763aa1df1e88f0da5e43ff86d956826cbea1d9c5ff591d78a3e091c66a4")
version("3.2", sha256="6b5337fb668b82d0ed0a4ab4b5af4e2f72e4cedbeeb4a8b6eb9a3ef057fb749a") version("3.2", sha256="6b5337fb668b82d0ed0a4ab4b5af4e2f72e4cedbeeb4a8b6eb9a3ef057fb749a")
version("3.1", sha256="4520fb93fcc89161f65a40810cae0fa1f87cecb242da4a69655f502545a53426") version("3.1", sha256="4520fb93fcc89161f65a40810cae0fa1f87cecb242da4a69655f502545a53426")
@ -64,17 +68,39 @@ class Amdlibflame(LibflameBase):
depends_on("python+pythoncmd", type="build") depends_on("python+pythoncmd", type="build")
depends_on("gmake@4:", when="@3.0.1,3.1:", type="build") depends_on("gmake@4:", when="@3.0.1,3.1:", type="build")
depends_on("aocl-utils", type=("build"), when="@4.1: ")
@property @property
def lapack_libs(self): def lapack_libs(self):
"""find lapack_libs function""" """find lapack_libs function"""
shared = True if "+shared" in self.spec else False return find_libraries(
return find_libraries("libflame", root=self.prefix, shared=shared, recursive=True) "libflame", root=self.prefix, shared="+shared" in self.spec, recursive=True
)
def flag_handler(self, name, flags):
if name == "cflags":
if self.spec.satisfies("%clang@16:") or self.spec.satisfies("%aocc@4.1.0:"):
flags.append("-Wno-error=incompatible-function-pointer-types")
flags.append("-Wno-implicit-function-declaration")
flags.append("-Wno-sometimes-uninitialized")
return (flags, None, None)
def configure_args(self): def configure_args(self):
"""configure_args function""" """configure_args function"""
args = super().configure_args() args = super().configure_args()
if not (
self.spec.satisfies(r"%aocc@3.2:4.1")
or self.spec.satisfies(r"%gcc@12.2:13.1")
or self.spec.satisfies(r"%clang@15:16")
):
tty.warn(
"AOCL has been tested to work with the following compilers\
versions - gcc@12.2:13.1, aocc@3.2:4.1, and clang@15:16\
see the following aocl userguide for details: \
https://www.amd.com/content/dam/amd/en/documents/developer/version-4-1-documents/aocl/aocl-4-1-user-guide.pdf"
)
# From 3.2 version, amd optimized flags are encapsulated under: # From 3.2 version, amd optimized flags are encapsulated under:
# enable-amd-flags for gcc compiler # enable-amd-flags for gcc compiler
# enable-amd-aocc-flags for aocc compiler # enable-amd-aocc-flags for aocc compiler
@ -101,8 +127,20 @@ def configure_args(self):
if "@3.0.1: +ilp64" in self.spec: if "@3.0.1: +ilp64" in self.spec:
args.append("--enable-ilp64") args.append("--enable-ilp64")
if "@4.1:" in self.spec:
args.append("CFLAGS=-I{0}".format(self.spec["aocl-utils"].prefix.include))
aocl_utils_lib_path = os.path.join(
self.spec["aocl-utils"].prefix.lib, "libaoclutils.a"
)
args.append("LIBAOCLUTILS_LIBRARY_PATH={0}".format(aocl_utils_lib_path))
return args return args
@when("@4.1:")
def build(self, spec, prefix):
aocl_utils_lib_path = os.path.join(self.spec["aocl-utils"].prefix.lib, "libaoclutils.a")
make("all", "LIBAOCLUTILS_LIBRARY_PATH={0}".format(aocl_utils_lib_path))
@run_after("build") @run_after("build")
@on_package_attributes(run_tests=True) @on_package_attributes(run_tests=True)
def check(self): def check(self):

View file

@ -5,6 +5,8 @@
import os import os
from llnl.util import tty
from spack.package import * from spack.package import *
@ -19,7 +21,7 @@ class Amdlibm(SConsPackage):
LICENSING INFORMATION: By downloading, installing and using this software, LICENSING INFORMATION: By downloading, installing and using this software,
you agree to the terms and conditions of the AMD AOCL-FFTW license you agree to the terms and conditions of the AMD AOCL-FFTW license
agreement. You may obtain a copy of this license agreement from agreement. You may obtain a copy of this license agreement from
https://www.amd.com/en/developer/aocl/libm/libm-4-0-eula.html https://www.amd.com/en/developer/aocl/libm/eula/libm-4-1-eula.html
https://www.amd.com/en/developer/aocl/libm/libm-eula.html https://www.amd.com/en/developer/aocl/libm/libm-eula.html
""" """
@ -29,6 +31,7 @@ class Amdlibm(SConsPackage):
url = "https://github.com/amd/aocl-libm-ose/archive/refs/tags/3.0.tar.gz" url = "https://github.com/amd/aocl-libm-ose/archive/refs/tags/3.0.tar.gz"
maintainers("amd-toolchain-support") maintainers("amd-toolchain-support")
version("4.1", sha256="5bbbbc6bc721d9a775822eab60fbc11eb245e77d9f105b4fcb26a54d01456122")
version("4.0", sha256="038c1eab544be77598eccda791b26553d3b9e2ee4ab3f5ad85fdd2a77d015a7d") version("4.0", sha256="038c1eab544be77598eccda791b26553d3b9e2ee4ab3f5ad85fdd2a77d015a7d")
version("3.2", sha256="c75b287c38a3ce997066af1f5c8d2b19fc460d5e56678ea81f3ac33eb79ec890") version("3.2", sha256="c75b287c38a3ce997066af1f5c8d2b19fc460d5e56678ea81f3ac33eb79ec890")
version("3.1", sha256="dee487cc2d89c2dc93508be2c67592670ffc1d02776c017e8907317003f48845") version("3.1", sha256="dee487cc2d89c2dc93508be2c67592670ffc1d02776c017e8907317003f48845")
@ -40,20 +43,36 @@ class Amdlibm(SConsPackage):
# Mandatory dependencies # Mandatory dependencies
depends_on("python@3.6.1:", type=("build", "run")) depends_on("python@3.6.1:", type=("build", "run"))
depends_on("scons@3.1.2:", type=("build")) depends_on("scons@3.1.2:", type=("build"))
depends_on("aocl-utils", type=("build"), when="@4.1: ")
depends_on("mpfr", type=("link")) depends_on("mpfr", type=("link"))
patch("0001-libm-ose-Scripts-cleanup-pyc-files.patch", when="@2.2") patch("0001-libm-ose-Scripts-cleanup-pyc-files.patch", when="@2.2")
patch("0002-libm-ose-prevent-log-v3.c-from-building.patch", when="@2.2") patch("0002-libm-ose-prevent-log-v3.c-from-building.patch", when="@2.2")
conflicts("%gcc@:9.1.0", msg="Minimum supported GCC version is 9.2.0") conflicts("%gcc@:9.1.0", msg="Minimum supported GCC version is 9.2.0")
conflicts("%gcc@12.2.0:", msg="Maximum supported GCC version is 12.1.0") conflicts("%gcc@13.2.0:", msg="Maximum supported GCC version is 13.1.0")
conflicts("%clang@9:", msg="Minimum supported Clang version is 9.0.0") conflicts("%clang@9.0:16.0", msg="supported Clang version is from 9 to 16")
conflicts("%aocc@3.2.0", msg="dependency on python@3.6.2") conflicts("%aocc@3.2.0", msg="dependency on python@3.6.2")
def build_args(self, spec, prefix): def build_args(self, spec, prefix):
"""Setting build arguments for amdlibm""" """Setting build arguments for amdlibm"""
args = ["--prefix={0}".format(prefix)] args = ["--prefix={0}".format(prefix)]
if self.spec.satisfies("@4.1: "):
args.append("--aocl_utils_install_path={0}".format(self.spec["aocl-utils"].prefix))
if not (
self.spec.satisfies(r"%aocc@3.2:4.1")
or self.spec.satisfies(r"%gcc@12.2:13.1")
or self.spec.satisfies(r"%clang@15:16")
):
tty.warn(
"AOCL has been tested to work with the following compilers\
versions - gcc@12.2:13.1, aocc@3.2:4.1, and clang@15:16\
see the following aocl userguide for details: \
https://www.amd.com/content/dam/amd/en/documents/developer/version-4-1-documents/aocl/aocl-4-1-user-guide.pdf"
)
# we are circumventing the use of # we are circumventing the use of
# Spacks compiler wrappers because # Spacks compiler wrappers because
# SCons wipes out all environment variables. # SCons wipes out all environment variables.

View file

@ -3,6 +3,8 @@
# #
# SPDX-License-Identifier: (Apache-2.0 OR MIT) # SPDX-License-Identifier: (Apache-2.0 OR MIT)
from llnl.util import tty
from spack.package import * from spack.package import *
from spack.pkg.builtin.netlib_scalapack import ScalapackBase from spack.pkg.builtin.netlib_scalapack import ScalapackBase
@ -20,16 +22,17 @@ class Amdscalapack(ScalapackBase):
LICENSING INFORMATION: By downloading, installing and using this software, LICENSING INFORMATION: By downloading, installing and using this software,
you agree to the terms and conditions of the AMD AOCL-ScaLAPACK license you agree to the terms and conditions of the AMD AOCL-ScaLAPACK license
agreement. You may obtain a copy of this license agreement from agreement. You may obtain a copy of this license agreement from
https://www.amd.com/en/developer/aocl/scalapack/scalapack-libraries-4-0-eula.html https://www.amd.com/en/developer/aocl/scalapack/eula/scalapack-libraries-4-1-eula.html
https://www.amd.com/en/developer/aocl/scalapack/scalapack-libraries-eula.html https://www.amd.com/en/developer/aocl/scalapack/eula/scalapack-libraries-eula.html
""" """
_name = "amdscalapack" _name = "amdscalapack"
homepage = "https://www.amd.com/en/developer/aocl/scalapack.html" homepage = "https://www.amd.com/en/developer/aocl/scalapack.html"
git = "https://github.com/amd/scalapack.git" git = "https://github.com/amd/aocl-scalapack"
maintainers("amd-toolchain-support") maintainers("amd-toolchain-support")
version("4.1", sha256="b2e51c3604e5869d1faaef2e52c92071fcb3de1345aebb2ea172206622067ad9")
version("4.0", sha256="f02913b5984597b22cdb9a36198ed61039a1bf130308e778dc31b2a7eb88b33b") version("4.0", sha256="f02913b5984597b22cdb9a36198ed61039a1bf130308e778dc31b2a7eb88b33b")
version("3.2", sha256="9e00979bb1be39d627bdacb01774bc043029840d542fafc934d16fec3e3b0892") version("3.2", sha256="9e00979bb1be39d627bdacb01774bc043029840d542fafc934d16fec3e3b0892")
version("3.1", sha256="4c2ee2c44644a0feec0c6fc1b1a413fa9028f14d7035d43a398f5afcfdbacb98") version("3.1", sha256="4c2ee2c44644a0feec0c6fc1b1a413fa9028f14d7035d43a398f5afcfdbacb98")
@ -52,9 +55,24 @@ def cmake_args(self):
args = super().cmake_args() args = super().cmake_args()
spec = self.spec spec = self.spec
if not (
spec.satisfies(r"%aocc@3.2:4.1")
or spec.satisfies(r"%gcc@12.2:13.1")
or spec.satisfies(r"%clang@15:16")
):
tty.warn(
"AOCL has been tested to work with the following compilers\
versions - gcc@12.2:13.1, aocc@3.2:4.1, and clang@15:16\
see the following aocl userguide for details: \
https://www.amd.com/content/dam/amd/en/documents/developer/version-4-1-documents/aocl/aocl-4-1-user-guide.pdf"
)
if spec.satisfies("%gcc@10:"): if spec.satisfies("%gcc@10:"):
args.extend(["-DCMAKE_Fortran_FLAGS={0}".format("-fallow-argument-mismatch")]) args.extend(["-DCMAKE_Fortran_FLAGS={0}".format("-fallow-argument-mismatch")])
if spec.satisfies("%clang@16:"):
args.extend(["-DCMAKE_Fortran_FLAGS={0}".format("-cpp -fno-implicit-none")])
if spec.satisfies("@2.2"): if spec.satisfies("@2.2"):
args.extend( args.extend(
[ [
@ -69,6 +87,16 @@ def cmake_args(self):
# -DUSE_F2C:BOOL=ON # -DUSE_F2C:BOOL=ON
args.extend([self.define("USE_F2C", spec.satisfies("@:3.0"))]) args.extend([self.define("USE_F2C", spec.satisfies("@:3.0"))])
if self.spec.satisfies("%clang@16:") or self.spec.satisfies("%aocc@4.1.0:"):
c_flags = []
c_flags.append("-Wno-implicit-function-declaration")
c_flags.append("-Wno-deprecated-non-prototype")
c_flags.append("-Wno-incompatible-pointer-types")
args.append(self.define("CMAKE_C_FLAGS", " ".join(c_flags)))
# link libflame library
args.extend(["-DLAPACK_LIBRARIES={0}".format(self.spec["lapack"].libs)])
args.extend( args.extend(
[ [
"-DLAPACK_FOUND=true", "-DLAPACK_FOUND=true",

View file

@ -5,6 +5,8 @@
import os import os
from llnl.util import tty
from spack.package import * from spack.package import *
@ -17,29 +19,24 @@ class AoclSparse(CMakePackage):
LICENSING INFORMATION: By downloading, installing and using this software, LICENSING INFORMATION: By downloading, installing and using this software,
you agree to the terms and conditions of the AMD AOCL-Sparse license agreement. you agree to the terms and conditions of the AMD AOCL-Sparse license agreement.
You may obtain a copy of this license agreement from You may obtain a copy of this license agreement from
https://www.amd.com/en/developer/aocl/sparse/sparse-libraries-4-0-eula.html https://www.amd.com/en/developer/aocl/sparse/eula/sparse-libraries-4-1-eula.html
https://www.amd.com/en/developer/aocl/sparse/sparse-libraries-eula.html https://www.amd.com/en/developer/aocl/sparse/eula/sparse-libraries-eula.html
""" """
_name = "aocl-sparse" _name = "aocl-sparse"
homepage = "https://www.amd.com/en/developer/aocl/sparse.html" homepage = "https://www.amd.com/en/developer/aocl/sparse.html"
url = "https://github.com/amd/aocl-sparse/archive/3.0.tar.gz" url = "https://github.com/amd/aocl-sparse/archive/3.0.tar.gz"
git = "https://github.com/amd/aocl-sparse.git" git = "https://github.com/amd/aocl-sparse"
maintainers("amd-toolchain-support") maintainers("amd-toolchain-support")
version("4.1", sha256="35ef437210bc25fdd802b462eaca830bfd928f962569b91b592f2866033ef2bb")
version("4.0", sha256="68524e441fdc7bb923333b98151005bed39154d9f4b5e8310b5c37de1d69c2c3") version("4.0", sha256="68524e441fdc7bb923333b98151005bed39154d9f4b5e8310b5c37de1d69c2c3")
version("3.2", sha256="db7d681a8697d6ef49acf3e97e8bec35b048ce0ad74549c3b738bbdff496618f") version("3.2", sha256="db7d681a8697d6ef49acf3e97e8bec35b048ce0ad74549c3b738bbdff496618f")
version("3.1", sha256="8536f06095c95074d4297a3d2910654085dd91bce82e116c10368a9f87e9c7b9") version("3.1", sha256="8536f06095c95074d4297a3d2910654085dd91bce82e116c10368a9f87e9c7b9")
version("3.0", sha256="1d04ba16e04c065051af916b1ed9afce50296edfa9b1513211a7378e1d6b952e") version("3.0", sha256="1d04ba16e04c065051af916b1ed9afce50296edfa9b1513211a7378e1d6b952e")
version("2.2", sha256="33c2ed6622cda61d2613ee63ff12c116a6cd209c62e54307b8fde986cd65f664") version("2.2", sha256="33c2ed6622cda61d2613ee63ff12c116a6cd209c62e54307b8fde986cd65f664")
variant(
"build_type",
default="Release",
description="CMake build type",
values=("Debug", "Release"),
)
variant("shared", default=True, description="Build shared library") variant("shared", default=True, description="Build shared library")
variant("ilp64", default=False, description="Build with ILP64 support") variant("ilp64", default=False, description="Build with ILP64 support")
variant("examples", default=False, description="Build sparse examples") variant("examples", default=False, description="Build sparse examples")
@ -52,9 +49,11 @@ class AoclSparse(CMakePackage):
description="Enable experimental AVX512 support", description="Enable experimental AVX512 support",
) )
depends_on("amdblis", when="@4.1:")
depends_on("amdlibflame", when="@4.1:")
depends_on("boost", when="+benchmarks") depends_on("boost", when="+benchmarks")
depends_on("boost", when="@2.2") depends_on("boost", when="@2.2")
depends_on("cmake@3.5:", type="build") depends_on("cmake@3.11:", type="build")
@property @property
def build_directory(self): def build_directory(self):
@ -76,17 +75,19 @@ def cmake_args(self):
"""Runs ``cmake`` in the build directory""" """Runs ``cmake`` in the build directory"""
spec = self.spec spec = self.spec
args = [ if not (
"../..", spec.satisfies(r"%aocc@3.2:4.1")
"-DCMAKE_INSTALL_PREFIX:PATH={0}".format(spec.prefix), or spec.satisfies(r"%gcc@12.2:13.1")
"-DCMAKE_CXX_COMPILER={0}".format(os.path.basename(spack_cxx)), or spec.satisfies(r"%clang@15:16")
] ):
tty.warn(
if spec.variants["build_type"].value == "Debug": "AOCL has been tested to work with the following compilers\
args.append("-DCMAKE_BUILD_TYPE=Debug") versions - gcc@12.2:13.1, aocc@3.2:4.1, and clang@15:16\
else: see the following aocl userguide for details: \
args.append("-DCMAKE_BUILD_TYPE=Release") https://www.amd.com/content/dam/amd/en/documents/developer/version-4-1-documents/aocl/aocl-4-1-user-guide.pdf"
)
args = []
args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared")) args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared"))
args.append(self.define_from_variant("BUILD_CLIENTS_SAMPLES", "examples")) args.append(self.define_from_variant("BUILD_CLIENTS_SAMPLES", "examples"))
args.append(self.define_from_variant("BUILD_CLIENTS_TESTS", "unit_tests")) args.append(self.define_from_variant("BUILD_CLIENTS_TESTS", "unit_tests"))
@ -96,6 +97,18 @@ def cmake_args(self):
if spec.satisfies("@3.0:"): if spec.satisfies("@3.0:"):
args.append(self.define_from_variant("BUILD_ILP64", "ilp64")) args.append(self.define_from_variant("BUILD_ILP64", "ilp64"))
if self.spec.satisfies("@4.0:"):
args.append("-DAOCL_BLIS_LIB={0}/libblis.so".format(self.spec["amdblis"].prefix.lib))
args.append(
"-DAOCL_BLIS_INCLUDE_DIR={0}/blis".format(self.spec["amdblis"].prefix.include)
)
args.append(
"-DAOCL_LIBFLAME={0}/libflame.so".format(self.spec["amdlibflame"].prefix.lib)
)
args.append(
"-DAOCL_LIBFLAME_INCLUDE_DIR={0}".format(self.spec["amdlibflame"].prefix.include)
)
return args return args
@run_after("build") @run_after("build")

View file

@ -0,0 +1,64 @@
# 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 llnl.util import tty
from spack.package import *
class AoclUtils(CMakePackage):
"""The library AOCL-Utils is intended to provide a uniform interface to all
AOCL libraries to access CPU features, especially for AMD CPUs. The library
provides the following features:
* Core details
* Flags available/usable
* ISA available/usable
* Topology about L1/L2/L3
AOCL-Utils is designed to be integrated into other AMD AOCL libraries. Each
project has their own mechanism to identify CPU and provide necessary
features such as "dynamic dispatch".The main purpose of this library is to
provide a centralized mechanism to update/validate and provide information
to the users of this library.
LICENSING INFORMATION: By downloading, installing and using this software,
you agree to the terms and conditions of the AMD AOCL-Utils license
agreement. You may obtain a copy of this license agreement from
https://www.amd.com/en/developer/aocl/utils/utils-eula/utils-eula-4-1.html
"""
_name = "aocl-utils"
homepage = "https://www.amd.com/en/developer/aocl/utils.html"
url = "https://github.com/amd/aocl-utils/archive/refs/tags/4.1.tar.gz"
git = "https://github.com/amd/aocl-utils"
maintainers("amd-toolchain-support")
version("4.1", sha256="a2f271f5eef07da366dae421af3c89286ebb6239047a31a46451758d4a06bc85")
variant("doc", default=False, description="enable documentation")
variant("tests", default=False, description="enable testing")
variant("examples", default=False, description="enable examples")
depends_on("doxygen", when="+doc")
def cmake_args(self):
if not (
self.spec.satisfies(r"%aocc@3.2:4.1")
or self.spec.satisfies(r"%gcc@12.2:13.1")
or self.spec.satisfies(r"%clang@15:16")
):
tty.warn(
"AOCL has been tested to work with the following compilers\
versions - gcc@12.2:13.1, aocc@3.2:4.1, and clang@15:16\
see the following aocl userguide for details: \
https://www.amd.com/content/dam/amd/en/documents/developer/version-4-1-documents/aocl/aocl-4-1-user-guide.pdf"
)
args = []
args.append(self.define_from_variant("ALCI_DOCS", "doc"))
args.append(self.define_from_variant("ALCI_TESTS", "tests"))
args.append(self.define_from_variant("ALCI_EXAMPLES", "examples"))
return args