summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMassimiliano Culpo <massimiliano.culpo@gmail.com>2020-12-21 23:38:04 +0100
committerTodd Gamblin <tgamblin@llnl.gov>2020-12-22 00:02:54 -0800
commitcde6ffe3692af7ffc9dafb3d8bbdf56c554996c3 (patch)
tree053413501c6f800cea087eb6b35773e1bcfbae78
parent635c6c29fa6e50373daba646db7cd81560329bf9 (diff)
downloadspack-cde6ffe3692af7ffc9dafb3d8bbdf56c554996c3.tar.gz
spack-cde6ffe3692af7ffc9dafb3d8bbdf56c554996c3.tar.bz2
spack-cde6ffe3692af7ffc9dafb3d8bbdf56c554996c3.tar.xz
spack-cde6ffe3692af7ffc9dafb3d8bbdf56c554996c3.zip
concretizer: optimize loop on compiler version
Similar to the optimization on platform
-rw-r--r--lib/spack/spack/solver/asp.py1
-rw-r--r--lib/spack/spack/solver/concretize.lp27
2 files changed, 15 insertions, 13 deletions
diff --git a/lib/spack/spack/solver/asp.py b/lib/spack/spack/solver/asp.py
index f7714edaaa..af75d47535 100644
--- a/lib/spack/spack/solver/asp.py
+++ b/lib/spack/spack/solver/asp.py
@@ -577,7 +577,6 @@ class SpackSolverSetup(object):
compiler_versions[compiler.name].add(compiler.version)
for compiler in sorted(compiler_versions):
- self.gen.fact(fn.compiler(compiler))
for v in sorted(compiler_versions[compiler]):
self.gen.fact(fn.compiler_version(compiler, v))
diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp
index cda05347ea..837f22f05b 100644
--- a/lib/spack/spack/solver/concretize.lp
+++ b/lib/spack/spack/solver/concretize.lp
@@ -502,13 +502,20 @@ derive_target_from_parent(Parent, Package)
%-----------------------------------------------------------------------------
% Compiler semantics
%-----------------------------------------------------------------------------
+compiler(Compiler) :- compiler_version(Compiler, _).
-% one compiler per node
-1 { node_compiler(Package, Compiler) : compiler(Compiler) } 1 :- node(Package).
+% There must be only one compiler set per node. The compiler
+% is chosen among available versions.
1 { node_compiler_version(Package, Compiler, Version)
: compiler_version(Compiler, Version) } 1 :- node(Package).
-1 { compiler_weight(Package, Weight) : compiler_weight(Package, Weight) } 1
- :- node(Package).
+
+% Sometimes we just need to know the compiler and not the version
+node_compiler(Package, Compiler) :- node_compiler_version(Package, Compiler, _).
+
+% We can't have a compiler be enforced and select the version from another compiler
+:- node_compiler(Package, Compiler1),
+ node_compiler_version(Package, Compiler2, _),
+ Compiler1 != Compiler2.
% define node_compiler_version_satisfies/3 from node_compiler_version_satisfies/4
% version_satisfies implies that exactly one of the satisfying versions
@@ -519,6 +526,7 @@ derive_target_from_parent(Parent, Package)
node_compiler_version_satisfies(Package, Compiler, Constraint)
:- node_compiler_version(Package, Compiler, Version),
node_compiler_version_satisfies(Package, Compiler, Constraint, Version).
+
#defined node_compiler_version_satisfies/4.
% If the compiler version was set from the command line,
@@ -566,17 +574,14 @@ compiler_version_match(Package, 1)
% compilers weighted by preference according to packages.yaml
compiler_weight(Package, Weight)
- :- node_compiler(Package, Compiler),
- node_compiler_version(Package, Compiler, V),
+ :- node_compiler_version(Package, Compiler, V),
node_compiler_preference(Package, Compiler, V, Weight).
compiler_weight(Package, Weight)
- :- node_compiler(Package, Compiler),
- node_compiler_version(Package, Compiler, V),
+ :- node_compiler_version(Package, Compiler, V),
not node_compiler_preference(Package, Compiler, V, _),
default_compiler_preference(Compiler, V, Weight).
compiler_weight(Package, 100)
- :- node_compiler(Package, Compiler),
- node_compiler_version(Package, Compiler, Version),
+ :- node_compiler_version(Package, Compiler, Version),
not node_compiler_preference(Package, Compiler, Version, _),
not default_compiler_preference(Compiler, Version, _).
@@ -610,7 +615,6 @@ node_flag_source(Dependency, Q)
node_flag(Package, FlagType, Flag)
:- not node_flag_set(Package),
compiler_version_flag(Compiler, Version, FlagType, Flag),
- node_compiler(Package, Compiler),
node_compiler_version(Package, Compiler, Version),
flag_type(FlagType),
compiler(Compiler),
@@ -619,7 +623,6 @@ node_flag(Package, FlagType, Flag)
node_flag_compiler_default(Package)
:- not node_flag_set(Package),
compiler_version_flag(Compiler, Version, FlagType, Flag),
- node_compiler(Package, Compiler),
node_compiler_version(Package, Compiler, Version),
flag_type(FlagType),
compiler(Compiler),