diff options
author | Todd Gamblin <tgamblin@llnl.gov> | 2020-04-19 12:26:47 -0700 |
---|---|---|
committer | Todd Gamblin <tgamblin@llnl.gov> | 2020-11-17 10:04:13 -0800 |
commit | cd55fd4bd3af0dcb1c92954ef36eb2a3e530b505 (patch) | |
tree | f21e517d237689dec506039676b42e6f12d520c8 | |
parent | 51cb49743e6f81456843200c203c0669eb39ac2a (diff) | |
download | spack-cd55fd4bd3af0dcb1c92954ef36eb2a3e530b505.tar.gz spack-cd55fd4bd3af0dcb1c92954ef36eb2a3e530b505.tar.bz2 spack-cd55fd4bd3af0dcb1c92954ef36eb2a3e530b505.tar.xz spack-cd55fd4bd3af0dcb1c92954ef36eb2a3e530b505.zip |
concretizer: allow non-default OS, inherit OS along dependencies
-rw-r--r-- | lib/spack/spack/solver/asp.py | 20 | ||||
-rw-r--r-- | lib/spack/spack/solver/concretize.lp | 24 |
2 files changed, 30 insertions, 14 deletions
diff --git a/lib/spack/spack/solver/asp.py b/lib/spack/spack/solver/asp.py index 8d08245812..146f816c5a 100644 --- a/lib/spack/spack/solver/asp.py +++ b/lib/spack/spack/solver/asp.py @@ -19,6 +19,7 @@ import llnl.util.tty as tty import llnl.util.tty.color as color import spack +import spack.architecture import spack.cmd import spack.config import spack.dependency @@ -617,9 +618,22 @@ class AspGenerator(object): self.fact(fn.node_platform_default(default.platform)) def os_defaults(self, specs): - self.h2('Default operating system') - default = default_arch() - self.fact(fn.node_os_default(default.os)) + self.h2('Possible operating systems') + platform = spack.architecture.platform() + + # create set of OS's to consider + possible = set([ + platform.front_os, platform.back_os, platform.default_os]) + for spec in specs: + if spec.architecture and spec.architecture.os: + possible.add(spec.architecture.os) + + # make directives for possible OS's + for os in sorted(possible): + self.fact(fn.os(os)) + + # mark this one as default + self.fact(fn.node_os_default(platform.default_os)) def target_defaults(self, specs): """Add facts about targets and target compatibility.""" diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp index f0f706c83a..daf0c23ac7 100644 --- a/lib/spack/spack/solver/concretize.lp +++ b/lib/spack/spack/solver/concretize.lp @@ -169,22 +169,24 @@ node_platform_set(Package) :- node_platform_set(Package, _). % OS semantics %----------------------------------------------------------------------------- % one os per node -1 { node_os(Package, OS) : node_os(Package, OS) } 1 :- node(Package). +1 { node_os(Package, OS) : os(OS) } 1 :- node(Package). -% node_os_set implies that the node has that os +% node_os_set implies that the node must have that os node_os(Package, OS) :- node(Package), node_os_set(Package, OS). node_os_set(Package) :- node_os_set(Package, _). -% fall back to default if not set +% inherit OS along dependencies +node_os_inherit(Package, OS) :- node_os_set(Package, OS). +node_os_inherit(Dependency, OS) + :- node_os_inherit(Package, OS), depends_on(Package, Dependency), + not node_os_set(Dependency). +node_os_inherit(Package) :- node_os_inherit(Package, _). + +% fall back to default if not set or inherited node_os(Package, OS) - :- node(Package), not node_os_set(Package), node_os_default(OS). - -% same OS throughout DAG (can currently only set one OS) -% TODO make this smarter; build env may have a different os from run env -node_os_set(Package, OS) - :- depends_on(Package, Dependency), node_os_set(Dependency, OS). -node_os_set(Dependency, OS) - :- depends_on(Package, Dependency), node_os_set(Package, OS). + :- node(Package), + not node_os_set(Package), not node_os_inherit(Package), + node_os_default(OS). #defined node_os_set/2. |