concretizer: allow non-default OS, inherit OS along dependencies
This commit is contained in:
parent
51cb49743e
commit
cd55fd4bd3
@ -19,6 +19,7 @@
|
||||
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 @@ def platform_defaults(self):
|
||||
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."""
|
||||
|
@ -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
|
||||
node_os(Package, OS)
|
||||
:- node(Package), not node_os_set(Package), node_os_default(OS).
|
||||
% 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, _).
|
||||
|
||||
% 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).
|
||||
% fall back to default if not set or inherited
|
||||
node_os(Package, OS)
|
||||
:- node(Package),
|
||||
not node_os_set(Package), not node_os_inherit(Package),
|
||||
node_os_default(OS).
|
||||
|
||||
#defined node_os_set/2.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user