From 9c6f2e0097ecbe6b0efdf1f0a33aee65ba682fd2 Mon Sep 17 00:00:00 2001 From: Aleix Roca Nonell Date: Fri, 5 Sep 2025 11:09:16 +0200 Subject: [PATCH] Do not force derviation inputs, use booleans instead --- overlay.nix | 6 +++--- pkgs/llvm-ompss2/default.nix | 33 +++++++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/overlay.nix b/overlay.nix index ea44f8690..2218faff7 100644 --- a/overlay.nix +++ b/overlay.nix @@ -12,9 +12,9 @@ let bench6 = callPackage ./pkgs/bench6/default.nix { }; bigotes = callPackage ./pkgs/bigotes/default.nix { }; clangOmpss2 = callPackage ./pkgs/llvm-ompss2/default.nix { }; - clangOmpss2Nanos6 = callPackage ./pkgs/llvm-ompss2/default.nix { ompss2rt = final.nanos6; }; - clangOmpss2Nodes = callPackage ./pkgs/llvm-ompss2/default.nix { ompss2rt = final.nodes; openmp = final.openmp; }; - clangOmpss2NodesOmpv = callPackage ./pkgs/llvm-ompss2/default.nix { ompss2rt = final.nodes; openmp = final.openmpv; }; + clangOmpss2Nanos6 = callPackage ./pkgs/llvm-ompss2/default.nix { useNanos6 = true; }; + clangOmpss2Nodes = callPackage ./pkgs/llvm-ompss2/default.nix { useNodes = true; useOpenmp = true; }; + clangOmpss2NodesOmpv = callPackage ./pkgs/llvm-ompss2/default.nix { useNodes = true; useOpenmpV = true; }; clangOmpss2Unwrapped = callPackage ./pkgs/llvm-ompss2/clang.nix { }; cudainfo = prev.callPackage ./pkgs/cudainfo/default.nix { }; #extrae = callPackage ./pkgs/extrae/default.nix { }; # Broken and outdated diff --git a/pkgs/llvm-ompss2/default.nix b/pkgs/llvm-ompss2/default.nix index b003dafbd..f6ef5976e 100644 --- a/pkgs/llvm-ompss2/default.nix +++ b/pkgs/llvm-ompss2/default.nix @@ -3,25 +3,42 @@ , lib , gcc , clangOmpss2Unwrapped -, openmp ? null + +, openmp +, useOpenmp ? false +, openmpv +, useOpenmpV ? false +, nanos6 +, useNanos6 ? false +, nodes +, useNodes ? false + , wrapCCWith , llvmPackages_latest -, ompss2rt ? null }: with lib; let - usingNodesAndOmpv = (openmp.pname == "openmp-v" && ompss2rt.pname == "nodes"); - sameNosv = openmp.nosv == ompss2rt.nosv; + getSplice = target: pkg: if pkg ? "__spliced" && pkg.__spliced ? target then pkg.__spliced."${target}" else pkg; + getSpliceTargetTarget = getSplice "targetTarget"; + omp = if useOpenmp then openmp else if useOpenmpV then openmpv else null; + ompss2rtUnspliced = if useNanos6 then nanos6 else if useNodes then nodes else null; + ompss2rt = getSpliceTargetTarget ompss2rtUnspliced; + usingNodesAndOmpv = omp != null && ompss2rt != null && (omp.pname == "openmp-v" && ompss2rt.pname == "nodes"); + sameNosvUnspliced = omp != null && ompss2rtUnspliced != null && omp.nosv == ompss2rtUnspliced.nosv; + sameNosvSpliced = (getSpliceTargetTarget omp.nosv) == ompss2rt.nosv; in -assert assertMsg (usingNodesAndOmpv -> sameNosv) "OpenMP-V and NODES must share the same nOS-V"; +assert assertMsg (usingNodesAndOmpv -> sameNosvUnspliced) "OpenMP-V and NODES must share the same nOS-V before splice"; +assert assertMsg (usingNodesAndOmpv -> sameNosvSpliced) "OpenMP-V and NODES must share the same nOS-V after splice"; +assert assertMsg (useOpenmp -> !useOpenmpV) "Either OpenMP or OpenMP-V may be enabled, but not both"; +assert assertMsg (useNanos6 -> !useNodes) "Either Nanos6 or NODES may be enabled, but not both"; let homevar = if ompss2rt.pname == "nanos6" then "NANOS6_HOME" else "NODES_HOME"; rtname = if ompss2rt.pname == "nanos6" then "libnanos6" else "libnodes"; - ompname = if openmp.pname == "openmp-v" then "libompv" else "libomp"; + ompname = if omp.pname == "openmp-v" then "libompv" else "libomp"; # We need to replace the lld linker from bintools with our linker just built, @@ -40,7 +57,7 @@ let in (wrapCCWith { inherit cc bintools; # extraPackages adds packages to depsTargetTargetPropagated - extraPackages = optional (openmp != null) openmp; + extraPackages = optional (omp != null) omp; extraBuildCommands = '' echo "-target ${targetConfig}" >> $out/nix-support/cc-cflags echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gccVersion}" >> $out/nix-support/cc-cflags @@ -59,7 +76,7 @@ in (wrapCCWith { wrap ${targetConfig}clang++ $wrapper $ccPath/clang++ wrap ${targetConfig}clang $wrapper $ccPath/clang - '' + optionalString (openmp != null) '' + '' + optionalString (omp != null) '' echo "export OPENMP_RUNTIME=${ompname}" >> $out/nix-support/cc-wrapper-hook '' + optionalString (ompss2rt != null) '' echo "export OMPSS2_RUNTIME=${rtname}" >> $out/nix-support/cc-wrapper-hook