diff options
Diffstat (limited to 'var')
3 files changed, 71 insertions, 4 deletions
diff --git a/var/spack/repos/builtin.mock/packages/intel-oneapi-compilers/package.py b/var/spack/repos/builtin.mock/packages/intel-oneapi-compilers/package.py new file mode 100644 index 0000000000..3ab49f1e1c --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/intel-oneapi-compilers/package.py @@ -0,0 +1,28 @@ +# 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) + +from spack.package import * + + +class IntelOneapiCompilers(Package): + """Simple compiler package.""" + + homepage = "http://www.example.com" + url = "http://www.example.com/oneapi-1.0.tar.gz" + + version("1.0", "0123456789abcdef0123456789abcdef") + version("2.0", "abcdef0123456789abcdef0123456789") + version("3.0", "def0123456789abcdef0123456789abc") + + @property + def compiler_search_prefix(self): + return self.prefix.foo.bar.baz.bin + + def install(self, spec, prefix): + # Create the minimal compiler that will fool `spack compiler find` + mkdirp(self.compiler_search_prefix) + with open(self.compiler_search_prefix.icx, "w") as f: + f.write('#!/bin/bash\necho "oneAPI DPC++ Compiler %s"' % str(spec.version)) + set_executable(self.compiler_search_prefix.icx) diff --git a/var/spack/repos/builtin/packages/intel-oneapi-compilers-classic/package.py b/var/spack/repos/builtin/packages/intel-oneapi-compilers-classic/package.py index 61b634fb9b..1b81e0ff63 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-compilers-classic/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-compilers-classic/package.py @@ -2,6 +2,9 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import os + +from llnl.util.link_tree import LinkTree from spack.package import * @@ -19,8 +22,6 @@ class IntelOneapiCompilersClassic(Package): has_code = False - phases = [] - # Versions before 2021 are in the `intel` package # intel-oneapi versions before 2022 use intel@19.0.4 for ver, oneapi_ver in { @@ -35,8 +36,19 @@ class IntelOneapiCompilersClassic(Package): version(ver) depends_on("intel-oneapi-compilers@" + oneapi_ver, when="@" + ver, type="run") + @property + def oneapi_compiler_prefix(self): + oneapi_version = self.spec["intel-oneapi-compilers"].version + return self.spec["intel-oneapi-compilers"].prefix.compiler.join(str(oneapi_version)) + def setup_run_environment(self, env): - """Adds environment variables to the generated module file.""" + """Adds environment variables to the generated module file. + + These environment variables come from running: + .. code-block:: console + $ source {prefix}/{component}/{version}/env/vars.sh + and from setting CC/CXX/F77/FC + """ oneapi_pkg = self.spec["intel-oneapi-compilers"].package oneapi_pkg.setup_run_environment(env) @@ -46,3 +58,26 @@ class IntelOneapiCompilersClassic(Package): env.set("CXX", bin_prefix.icpc) env.set("F77", bin_prefix.ifort) env.set("FC", bin_prefix.ifort) + + def install(self, spec, prefix): + # If we symlink top-level directories directly, files won't show up in views + # Create real dirs and symlink files instead + self.symlink_dir(self.oneapi_compiler_prefix.linux.bin.intel64, prefix.bin) + self.symlink_dir(self.oneapi_compiler_prefix.linux.lib, prefix.lib) + self.symlink_dir(self.oneapi_compiler_prefix.linux.include, prefix.include) + self.symlink_dir(self.oneapi_compiler_prefix.linux.compiler, prefix.compiler) + self.symlink_dir(self.oneapi_compiler_prefix.documentation.en.man, prefix.man) + + def symlink_dir(self, src, dest): + # Create a real directory at dest + mkdirp(dest) + + # Symlink all files in src to dest keeping directories as dirs + for entry in os.listdir(src): + src_path = os.path.join(src, entry) + dest_path = os.path.join(dest, entry) + if os.path.isdir(src_path) and os.access(src_path, os.X_OK): + link_tree = LinkTree(src_path) + link_tree.merge(dest_path) + else: + os.symlink(src_path, dest_path) diff --git a/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py b/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py index c596074289..4869fc63d8 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py @@ -149,6 +149,10 @@ class IntelOneapiCompilers(IntelOneApiPackage): def component_dir(self): return "compiler" + @property + def compiler_search_prefix(self): + return self.prefix.compiler.join(str(self.version)).linux.bin + def setup_run_environment(self, env): """Adds environment variables to the generated module file. @@ -169,7 +173,7 @@ class IntelOneapiCompilers(IntelOneApiPackage): def install(self, spec, prefix): # Copy instead of install to speed up debugging - # install_tree('/opt/intel/oneapi/compiler', self.prefix) + # install_tree("/opt/intel/oneapi/compiler", self.prefix) # install cpp super(IntelOneapiCompilers, self).install(spec, prefix) |