Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 29 additions & 28 deletions docs/sphinx/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -211,34 +211,35 @@ is found in the in the following order:

Project settings are as follows:

========================= ========================== ================================================ =======================================
Setting Command line Option Description Default
========================= ========================== ================================================ =======================================
package_name ``--package-name`` Spack package name **None**
package_version **None** Spack package version **None**
package_final_phase ``--package-final-phase`` Controls after which phase Spack should stop **None**
package_source_dir ``--package-source-dir`` Controls the source directory Spack should use **None**
force_commandline_prefix **None** Force user to specify `--prefix` on command line ``false``
spack_url **None** Download url for Spack ``https://github.com/spack/spack.git``
spack_commit **None** Spack commit to checkout **None**
spack_activate **None** Spack packages to activate **None**
spack_build_mode ``--spack-build-mode`` Set mode used to build TPLs with Spack ``dev-build``
spack_configs_path **None** Directory with Spack configs to be autodetected ``spack_configs``
spack_packages_url **None** Download url for Spack packages ``https://github.com/spack/spack-packages.git``
spack_packages_path **None** Directory|List with Package Repos to be added ``packages``
spack_packages_branch **None** Spack packages repo branch to checkout **None**
spack_packages_commit **None** Spack packages repo commit to checkout **None**
spack_packages_tag **None** Spack packages repo tag to checkout. **None**
spack_setup_clingo **None** Do not install clingo if set to ``false`` **None**
spack_externals ``--spack-externals`` Space delimited string of packages for Spack to **None**
search for externals
spack_compiler_paths ``--spack-compiler-paths`` Space delimited string of paths for Spack to **None**
search for compilers
vcpkg_url **None** Download url for Vcpkg ``https://github.com/microsoft/vcpkg``
vcpkg_branch **None** Vcpkg branch to checkout ``master``
vcpkg_commit **None** Vcpkg commit to checkout **None**
vcpkg_ports_path ``--vcpkg-ports-path`` Folder with vcpkg ports files **None**
========================= ========================== ================================================ =======================================
========================= =========================== ================================================ =======================================
Setting Command line Option Description Default
========================= =========================== ================================================ =======================================
package_name ``--package-name`` Spack package name **None**
package_version **None** Spack package version **None**
package_final_phase ``--package-final-phase`` Controls after which phase Spack should stop **None**
package_source_dir ``--package-source-dir`` Controls the source directory Spack should use **None**
force_commandline_prefix **None** Force user to specify `--prefix` on command line ``false``
spack_url **None** Download url for Spack ``https://github.com/spack/spack.git``
spack_commit **None** Spack commit to checkout **None**
spack_activate **None** Spack packages to activate **None**
spack_build_mode ``--spack-build-mode`` Set mode used to build TPLs with Spack ``dev-build``
spack_configs_path **None** Directory with Spack configs to be autodetected ``spack_configs``
spack_packages_url **None** Download url for Spack packages ``https://github.com/spack/spack-packages.git``
spack_packages_path **None** Directory|List with Package Repos to be added ``packages``
spack_packages_branch **None** Spack packages repo branch to checkout **None**
spack_packages_commit **None** Spack packages repo commit to checkout **None**
spack_packages_tag **None** Spack packages repo tag to checkout. **None**
spack_setup_clingo **None** Do not install clingo if set to ``false`` **None**
spack_externals ``--spack-externals`` Space delimited string of packages for Spack to **None**
search for externals
spack_compiler_paths ``--spack-compiler-paths`` Space delimited string of paths for Spack to **None**
search for compilers
spack_compiler_mixing ``--spack-compiler-mixing`` Enables compiler mixing (Spack 1.1.0+ only) **None**
vcpkg_url **None** Download url for Vcpkg ``https://github.com/microsoft/vcpkg``
vcpkg_branch **None** Vcpkg branch to checkout ``master``
vcpkg_commit **None** Vcpkg commit to checkout **None**
vcpkg_ports_path ``--vcpkg-ports-path`` Folder with vcpkg ports files **None**
========================= =========================== ================================================ =======================================

If a ``spack_commit`` is present, it supercedes the ``spack_branch`` option, and similarly for ``vcpkg_commit``and ``vcpkg_branch``.
The precedence for the Spack packages repo options are ``spack_packages_commit``, ``spack_packages_branch``, and last ``spack_packages_tag``.
Expand Down
37 changes: 36 additions & 1 deletion uberenv.py
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,13 @@ def parse_args():
default=None,
help="Path to Spack Environment file (e.g. spack.yaml or spack.lock)")

# Enable compiler mixing argument (Spack 1.1.0+ only)
parser.add_argument("--spack-compiler-mixing",
dest="spack_compiler_mixing",
default=False,
action="store_true",
help="Enables compiler mixing (Spack 1.1.0+ only)")

###############
# parse args
###############
Expand Down Expand Up @@ -359,6 +366,22 @@ def find_project_config(args):
print("ERROR: No Uberenv configuration json file found")
sys.exit(-1)

def version2tuple(version: str) -> tuple[int, int, int]:
"""
Converts version string (major.minor.patch.other) to tuple (major, minor, patch).
Add missing 0's if not all three version numbers are supplied (e.g. "1" -> (1, 0, 0))

Example usage:
version2tuple(self.spack_version()) >= version2tuple("1.2.0")

:param version: Version string (major.minor.patch.other)
:type version: str
"""
raw_parts = version.split(".")[:3]
parts = [p if p != "" else "0" for p in raw_parts]
parts += ["0"] * (3 - len(parts))
return tuple(map(int, parts))


class UberEnv():
""" Base class for package manager """
Expand Down Expand Up @@ -595,6 +618,7 @@ def __init__(self, args, extra_args):
self.build_mode = self.set_from_args_or_json("spack_build_mode", True)
self.spack_externals = self.set_from_args_or_json("spack_externals", True)
self.spack_compiler_paths = self.set_from_args_or_json("spack_compiler_paths", True)
self.spack_compiler_mixing = self.set_from_args_or_json("spack_compiler_mixing", True)

# default spack build mode is dev-build
if self.build_mode is None:
Expand Down Expand Up @@ -667,7 +691,7 @@ def spack_exe(self, use_spack_env = True):
# Returns version of Spack being used
def spack_version(self):
res, out = sexe('{0} --version'.format(self.spack_exe(use_spack_env=False)), ret_output=True)
return out
return out.split()[0]

def check_concretizer_args(self):
cmd = "{0} help install".format(self.spack_exe(use_spack_env=False))
Expand Down Expand Up @@ -977,6 +1001,17 @@ def create_spack_env(self):
print("[ERROR: Failed to update git reference for builtin package repository]")
sys.exit(-1)

if version2tuple(self.spack_version()) >= version2tuple("1.1.0"):
if self.spack_compiler_mixing:
print(f"[enabling mixing compilers in Spack]\n")
res = sexe(f"{self.spack_exe()} config --scope=env:{self.spack_env_directory} add concretizer:compiler_mixing:True")
else:
print(f"[disabling mixing compilers in Spack]\n")
res = sexe(f"{self.spack_exe()} config --scope=env:{self.spack_env_directory} add concretizer:compiler_mixing:False")
if res != 0:
print("[ERROR: Failed to configure compiler mixing in Spack]")
sys.exit(-1)

# Find pre-installed compilers and packages and stop uberenv.py
if self.spack_setup_environment:
# Finding compilers
Expand Down