Improve stability of DAG when using multiple compilers for the same language

This commit is contained in:
Massimiliano Culpo 2025-02-07 19:40:07 +01:00
parent 5920d31b25
commit ddeab9879e
No known key found for this signature in database
GPG Key ID: 3E52BB992233066C
2 changed files with 17 additions and 3 deletions

View File

@ -1246,6 +1246,10 @@ error(100, "Cannot propagate the variant '{0}' from the package: {1} because pac
% 1. The same flag type is not set on this node
% 2. This node has the same compilers as the propagation source
compiler_penalty(PackageNode, C-1) :-
C = #count { CompilerNode : node_compiler(PackageNode, CompilerNode) },
node_compiler(PackageNode, _).
node_compiler(node(X, Package), node(Y, Compiler)) :-
attr("virtual_on_edge", node(X, Package), node(Y, Compiler), Language),
attr("version", node(Y, Compiler), Version),
@ -1683,7 +1687,7 @@ opt_criterion(50, "number of non-default variants (non-roots)").
build_priority(PackageNode, Priority)
}.
% Minimize the weights of the providers, i.e. use as much as
% Minimize the ids of the providers, i.e. use as much as
% possible the first providers
opt_criterion(48, "number of duplicate virtuals needed").
#minimize{ 0@248: #true }.
@ -1694,6 +1698,16 @@ opt_criterion(48, "number of duplicate virtuals needed").
build_priority(ProviderNode, Priority)
}.
% Minimize the number of compilers used on nodes
opt_criterion(49, "minimize the number of compilers used on the same node").
#minimize{ 0@249: #true }.
#minimize{ 0@49: #true }.
#minimize{
Penalty@49+Priority,PackageNode
: compiler_penalty(PackageNode, Penalty),
build_priority(PackageNode, Priority)
}.
% Minimize the weights of the providers, i.e. use as much as
% possible the most preferred providers
opt_criterion(45, "preferred providers (non-roots)").
@ -1792,6 +1806,7 @@ opt_criterion(1, "edge wiring").
depends_on(ParentNode, PackageNode)
}.
#minimize{ 0@201: #true }.
#minimize{ 0@1: #true }.
#minimize{

View File

@ -356,8 +356,7 @@ class IntelOneapiCompilers(IntelOneApiPackage, CompilerPackage):
stdcxx_libs = ("-cxxlib",)
provides("c")
provides("cxx")
provides("c", "cxx")
provides("fortran")
def _standard_flag(self, *, language, standard):