From 42a230eef17049f572c64ac729dd6458f5afcc8f Mon Sep 17 00:00:00 2001 From: Annop Wongwathanarat Date: Thu, 29 Sep 2022 12:49:39 +0100 Subject: Rename arm to acfl, add v22.0.2 (#32518) Co-authored-by: Annop Wongwathanarat --- var/spack/repos/builtin/packages/acfl/package.py | 175 +++++++++++++++++++++++ var/spack/repos/builtin/packages/arm/package.py | 153 -------------------- 2 files changed, 175 insertions(+), 153 deletions(-) create mode 100644 var/spack/repos/builtin/packages/acfl/package.py delete mode 100644 var/spack/repos/builtin/packages/arm/package.py diff --git a/var/spack/repos/builtin/packages/acfl/package.py b/var/spack/repos/builtin/packages/acfl/package.py new file mode 100644 index 0000000000..073be3335b --- /dev/null +++ b/var/spack/repos/builtin/packages/acfl/package.py @@ -0,0 +1,175 @@ +# 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) +import re + +from spack.package import * + +_os_map = { + "ubuntu18.04": "Ubuntu-18.04", + "ubuntu20.04": "Ubuntu-20.04", + "sles15": "SLES-15", + "centos7": "RHEL-7", + "centos8": "RHEL-8", + "amzn2": "RHEL-7", +} + + +_versions = { + "22.0.2": { + "RHEL-7": ( + "e4dec577ed2d33124a556ba05584fad45a9acf6e13dccadb37b521d1bad5a826", + "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-2/arm-compiler-for-linux_22.0.2_RHEL-7_aarch64.tar", + ), + "RHEL-8": ( + "3064bec6e0e3d4da9ea2bcdcb4590a8fc1f7e0e97092e24e2245c7f1745ef4f3", + "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-2/arm-compiler-for-linux_22.0.2_RHEL-8_aarch64.tar", + ), + "SLES-15": ( + "82dea469dc567b848bcaa6cbaed3eb3faaf45ceb9ec7071bdfef8a383e929ef8", + "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-2/arm-compiler-for-linux_22.0.2_SLES-15_aarch64.tar", + ), + "Ubuntu-18.04": ( + "355f548e86b9fa90d72684480d13ec60e6bec6b2bd837df42ac84d5a8fdebc48", + "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-2/arm-compiler-for-linux_22.0.2_Ubuntu-18.04_aarch64.tar", + ), + "Ubuntu-20.04": ( + "a2a752dce089a34b91dc89c0d1dd8b58a4104bf7c9ba3affd71fd1fd593e3732", + "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-2/arm-compiler-for-linux_22.0.2_Ubuntu-20.04_aarch64.tar", + ), + }, + "22.0.1": { + "RHEL-7": ( + "6b0ab76dce3fd44aab1e679baef01367c86f6bbd3544e04f9642b6685482cd76", + "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-1/arm-compiler-for-linux_22.0.1_RHEL-7_aarch64.tar", + ), + "RHEL-8": ( + "41e5bffc52701b1e8a606f8db09c3c02e35ae39eae0ebeed5fbb41a13e61f057", + "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-1/arm-compiler-for-linux_22.0.1_RHEL-8_aarch64.tar", + ), + "SLES-15": ( + "b578ff517dec7fa23c4b7353a1a7c958f28cc9c9447f71f7c4e83de2e2c5538f", + "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-1/arm-compiler-for-linux_22.0.1_SLES-15_aarch64.tar", + ), + "Ubuntu-18.04": ( + "becc6826ce0f6e696092e79a40f758d7cd0302227f6cfc7c2215f6483ade9748", + "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-1/arm-compiler-for-linux_22.0.1_Ubuntu-18.04_aarch64.tar", + ), + "Ubuntu-20.04": ( + "dea136238fc2855c41b8a8154bf279b7df5df8dba48d8f29121fa26f343e7cdb", + "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-1/arm-compiler-for-linux_22.0.1_Ubuntu-20.04_aarch64.tar", + ), + }, +} + + +def get_os(): + spack_os = spack.platforms.host().default_os + return _os_map.get(spack_os, "RHEL-7") + + +def get_acfl_prefix(spec): + acfl_prefix = spec.prefix + return join_path( + acfl_prefix, + "arm-linux-compiler-{0}_Generic-AArch64_{1}_aarch64-linux".format(spec.version, get_os()), + ) + + +class Acfl(Package): + """Arm Compiler combines the optimized tools and libraries from Arm + with a modern LLVM-based compiler framework. + """ + + homepage = "https://developer.arm.com/tools-and-software/server-and-hpc/arm-allinea-studio" + url = "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-2/arm-compiler-for-linux_22.0.2_Ubuntu-20.04_aarch64.tar" + + maintainers = ["OliverPerks", "annop-w"] + + # Build Versions: establish OS for URL + acfl_os = get_os() + + # Build Versions + for ver, packages in _versions.items(): + pkg = packages.get(acfl_os) + if pkg: + version(ver, sha256=pkg[0], url=pkg[1]) + + # Only install for Aarch64 + 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"] + + # Licensing - Not required from 22.0.1 on. + + # Run the installer with the desired install directory + def install(self, spec, prefix): + exe = Executable("./arm-compiler-for-linux_{0}_{1}.sh".format(spec.version, get_os())) + exe("--accept", "--force", "--install-to", prefix) + + @classmethod + def determine_version(cls, exe): + regex_str = r"Arm C\/C\+\+\/Fortran Compiler version ([\d\.]+) " r"\(build number (\d+)\) " + version_regex = re.compile(regex_str) + try: + output = spack.compiler.get_compiler_version_output(exe, "--version") + match = version_regex.search(output) + if match: + if match.group(1).count(".") == 1: + return match.group(1) + ".0." + match.group(2) + return match.group(1) + "." + match.group(2) + except spack.util.executable.ProcessError: + pass + except Exception as e: + tty.debug(e) + + @classmethod + def determine_variants(cls, exes, version_str): + compilers = {} + for exe in exes: + if "armclang" in exe: + compilers["c"] = exe + if "armclang++" in exe: + compilers["cxx"] = exe + if "armflang" in exe: + compilers["fortran"] = exe + return "", {"compilers": compilers} + + @property + def cc(self): + msg = "cannot retrieve C compiler [spec is not concrete]" + assert self.spec.concrete, msg + if self.spec.external: + return self.spec.extra_attributes["compilers"].get("c", None) + return join_path(get_acfl_prefix(self.spec), "bin", "armclang") + + @property + def cxx(self): + msg = "cannot retrieve C++ compiler [spec is not concrete]" + assert self.spec.concrete, msg + if self.spec.external: + return self.spec.extra_attributes["compilers"].get("cxx", None) + return join_path(get_acfl_prefix(self.spec), "bin", "armclang++") + + @property + def fortran(self): + msg = "cannot retrieve Fortran compiler [spec is not concrete]" + assert self.spec.concrete, msg + if self.spec.external: + return self.spec.extra_attributes["compilers"].get("fortran", None) + return join_path(get_acfl_prefix(self.spec), "bin", "armflang") + + def setup_run_environment(self, env): + arm_dir = get_acfl_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("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")) diff --git a/var/spack/repos/builtin/packages/arm/package.py b/var/spack/repos/builtin/packages/arm/package.py deleted file mode 100644 index 2fab5e2d2d..0000000000 --- a/var/spack/repos/builtin/packages/arm/package.py +++ /dev/null @@ -1,153 +0,0 @@ -# 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) -import re - -from spack.package import * - -_os_map = { - "ubuntu18.04": "Ubuntu-18.04", - "ubuntu20.04": "Ubuntu-20.04", - "sles15": "SLES-15", - "centos7": "RHEL-7", - "centos8": "RHEL-8", - "amzn2": "RHEL-7", -} - - -_versions = { - "22.0.1": { - "RHEL-7": ( - "6b0ab76dce3fd44aab1e679baef01367c86f6bbd3544e04f9642b6685482cd76", - "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-1/arm-compiler-for-linux_22.0.1_RHEL-7_aarch64.tar", - ), - "RHEL-8": ( - "41e5bffc52701b1e8a606f8db09c3c02e35ae39eae0ebeed5fbb41a13e61f057", - "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-1/arm-compiler-for-linux_22.0.1_RHEL-8_aarch64.tar", - ), - "SLES-15": ( - "b578ff517dec7fa23c4b7353a1a7c958f28cc9c9447f71f7c4e83de2e2c5538f", - "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-1/arm-compiler-for-linux_22.0.1_SLES-15_aarch64.tar", - ), - "Ubuntu-18.04": ( - "becc6826ce0f6e696092e79a40f758d7cd0302227f6cfc7c2215f6483ade9748", - "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-1/arm-compiler-for-linux_22.0.1_Ubuntu-18.04_aarch64.tar", - ), - "Ubuntu-20.04": ( - "dea136238fc2855c41b8a8154bf279b7df5df8dba48d8f29121fa26f343e7cdb", - "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/22-0-1/arm-compiler-for-linux_22.0.1_Ubuntu-20.04_aarch64.tar", - ), - } -} - - -def get_os(): - spack_os = spack.platforms.host().default_os - return _os_map.get(spack_os, "RHEL-7") - - -def get_acfl_prefix(spec): - acfl_prefix = spec.prefix - return join_path( - acfl_prefix, - "arm-linux-compiler-{0}_Generic-AArch64_{1}_aarch64-linux".format(spec.version, get_os()), - ) - - -class Arm(Package): - """Arm Compiler combines the optimized tools and libraries from Arm - with a modern LLVM-based compiler framework. - """ - - homepage = "https://developer.arm.com/tools-and-software/server-and-hpc/arm-allinea-studio" - url = "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/20-2-1/Ubuntu16.04/arm-compiler-for-linux_20.2.1_Ubuntu-16.04_aarch64.tar" - - maintainers = ["OliverPerks"] - - # Build Versions: establish OS for URL - acfl_os = get_os() - - # Build Versions - for ver, packages in _versions.items(): - pkg = packages.get(acfl_os) - if pkg: - version(ver, sha256=pkg[0], url=pkg[1]) - - # Only install for Aarch64 - 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"] - - # Licensing - Not required from 22.0.1 on. - - # Run the installer with the desired install directory - def install(self, spec, prefix): - exe = Executable("./arm-compiler-for-linux_{0}_{1}.sh".format(spec.version, get_os())) - exe("--accept", "--force", "--install-to", prefix) - - @classmethod - def determine_version(cls, exe): - regex_str = r"Arm C\/C\+\+\/Fortran Compiler version ([\d\.]+) " r"\(build number (\d+)\) " - version_regex = re.compile(regex_str) - try: - output = spack.compiler.get_compiler_version_output(exe, "--version") - match = version_regex.search(output) - if match: - if match.group(1).count(".") == 1: - return match.group(1) + ".0." + match.group(2) - return match.group(1) + "." + match.group(2) - except spack.util.executable.ProcessError: - pass - except Exception as e: - tty.debug(e) - - @classmethod - def determine_variants(cls, exes, version_str): - compilers = {} - for exe in exes: - if "armclang" in exe: - compilers["c"] = exe - if "armclang++" in exe: - compilers["cxx"] = exe - if "armflang" in exe: - compilers["fortran"] = exe - return "", {"compilers": compilers} - - @property - def cc(self): - msg = "cannot retrieve C compiler [spec is not concrete]" - assert self.spec.concrete, msg - if self.spec.external: - return self.spec.extra_attributes["compilers"].get("c", None) - return join_path(get_acfl_prefix(self.spec), "bin", "armclang") - - @property - def cxx(self): - msg = "cannot retrieve C++ compiler [spec is not concrete]" - assert self.spec.concrete, msg - if self.spec.external: - return self.spec.extra_attributes["compilers"].get("cxx", None) - return join_path(get_acfl_prefix(self.spec), "bin", "armclang++") - - @property - def fortran(self): - msg = "cannot retrieve Fortran compiler [spec is not concrete]" - assert self.spec.concrete, msg - if self.spec.external: - return self.spec.extra_attributes["compilers"].get("fortran", None) - return join_path(get_acfl_prefix(self.spec), "bin", "armflang") - - def setup_run_environment(self, env): - arm_dir = get_acfl_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("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")) -- cgit v1.2.3-70-g09d2