5 Commits

3 changed files with 37 additions and 16 deletions

View File

@@ -13,10 +13,11 @@ let
bench6 = callPackage ./pkgs/bench6/default.nix { }; bench6 = callPackage ./pkgs/bench6/default.nix { };
bigotes = callPackage ./pkgs/bigotes/default.nix { }; bigotes = callPackage ./pkgs/bigotes/default.nix { };
clangOmpss2 = callPackage ./pkgs/llvm-ompss2/default.nix { }; clangOmpss2 = callPackage ./pkgs/llvm-ompss2/default.nix { };
clangOmpss2Nanos6 = callPackage ./pkgs/llvm-ompss2/default.nix { ompss2rt = final.nanos6; }; clangOmpss2Nanos6 = callPackage ./pkgs/llvm-ompss2/default.nix { useNanos6 = true; };
clangOmpss2Nodes = callPackage ./pkgs/llvm-ompss2/default.nix { ompss2rt = final.nodes; openmp = final.openmp; }; clangOmpss2Nodes = callPackage ./pkgs/llvm-ompss2/default.nix { useNodes = true; useOpenmp = true; };
clangOmpss2NodesOmpv = callPackage ./pkgs/llvm-ompss2/default.nix { ompss2rt = final.nodes; openmp = final.openmpv; }; clangOmpss2NodesOmpv = callPackage ./pkgs/llvm-ompss2/default.nix { useNodes = true; useOpenmpV = true; };
clangOmpss2Unwrapped = callPackage ./pkgs/llvm-ompss2/clang.nix { }; clangOmpss2Unwrapped = callPackage ./pkgs/llvm-ompss2/clang.nix { };
#extrae = callPackage ./pkgs/extrae/default.nix { }; # Broken and outdated #extrae = callPackage ./pkgs/extrae/default.nix { }; # Broken and outdated
#gpi-2 = callPackage ./pkgs/gpi-2/default.nix { }; # Broken: https://jungle.bsc.es/git/rarias/bscpkgs/issues/7 #gpi-2 = callPackage ./pkgs/gpi-2/default.nix { }; # Broken: https://jungle.bsc.es/git/rarias/bscpkgs/issues/7
intelPackages_2023 = callPackage ./pkgs/intel-oneapi/2023.nix { }; intelPackages_2023 = callPackage ./pkgs/intel-oneapi/2023.nix { };

View File

@@ -3,25 +3,43 @@
, lib , lib
, gcc , gcc
, clangOmpss2Unwrapped , clangOmpss2Unwrapped
, openmp ? null
, openmp
, useOpenmp ? false
, openmpv
, useOpenmpV ? false
, nanos6
, useNanos6 ? false
, nodes
, useNodes ? false
, wrapCCWith , wrapCCWith
, llvmPackages_latest , llvmPackages_latest
, ompss2rt ? null
}: }:
with lib; with lib;
let let
usingNodesAndOmpv = (openmp.pname == "openmp-v" && ompss2rt.pname == "nodes"); getSplice = target: pkg: if pkg ? "__spliced" && pkg.__spliced ? target then pkg.__spliced."${target}" else pkg;
sameNosv = openmp.nosv == ompss2rt.nosv; #getSpliceTargetTarget = pkg: if pkg ? "__spliced" && pkg.__spliced ? "targetTarget" then pkg.__spliced.targetTarget 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.pname == "openmp-v" && ompss2rt.pname == "nodes");
sameNosvUnspliced = omp.nosv == ompss2rtUnspliced.nosv;
sameNosvSpliced = (getSpliceTargetTarget omp.nosv) == ompss2rt.nosv;
in 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 let
homevar = if ompss2rt.pname == "nanos6" then "NANOS6_HOME" else "NODES_HOME"; homevar = if ompss2rt.pname == "nanos6" then "NANOS6_HOME" else "NODES_HOME";
rtname = if ompss2rt.pname == "nanos6" then "libnanos6" else "libnodes"; 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, # We need to replace the lld linker from bintools with our linker just built,
@@ -37,10 +55,10 @@ let
inherit gcc; inherit gcc;
cc = clangOmpss2Unwrapped; cc = clangOmpss2Unwrapped;
gccVersion = with versions; let v = gcc.version; in concatStringsSep "." [(major v) (minor v) (patch v)]; gccVersion = with versions; let v = gcc.version; in concatStringsSep "." [(major v) (minor v) (patch v)];
in wrapCCWith { in (wrapCCWith {
inherit cc bintools; inherit cc bintools;
# extraPackages adds packages to depsTargetTargetPropagated # extraPackages adds packages to depsTargetTargetPropagated
extraPackages = optional (openmp != null) openmp; extraPackages = optional (omp != null) omp;
extraBuildCommands = '' extraBuildCommands = ''
echo "-target ${targetConfig}" >> $out/nix-support/cc-cflags echo "-target ${targetConfig}" >> $out/nix-support/cc-cflags
#echo "-fuse-ld=lld" >> $out/nix-support/cc-cflags #echo "-fuse-ld=lld" >> $out/nix-support/cc-cflags
@@ -60,13 +78,14 @@ in wrapCCWith {
wrap ${targetConfig}clang++ $wrapper $ccPath/clang++ wrap ${targetConfig}clang++ $wrapper $ccPath/clang++
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 echo "export OPENMP_RUNTIME=${ompname}" >> $out/nix-support/cc-wrapper-hook
'' + optionalString (ompss2rt != null) '' '' + optionalString (ompss2rt != null) ''
echo "export OMPSS2_RUNTIME=${rtname}" >> $out/nix-support/cc-wrapper-hook echo "export OMPSS2_RUNTIME=${rtname}" >> $out/nix-support/cc-wrapper-hook
echo "export ${homevar}=${ompss2rt}" >> $out/nix-support/cc-wrapper-hook echo "export ${homevar}=${ompss2rt}" >> $out/nix-support/cc-wrapper-hook
'' + optionalString (ompss2rt != null && ompss2rt.pname == "nodes") '' '' + optionalString (ompss2rt != null && ompss2rt.pname == "nodes") ''
echo "export NOSV_HOME=${ompss2rt.nosv}" >> $out/nix-support/cc-wrapper-hook echo "export NOSV_HOME=${ompss2rt}" >> $out/nix-support/cc-wrapper-hook
''; '';
} }) // { inherit ompss2rt; }

View File

@@ -46,15 +46,16 @@ in stdenv.mkDerivation rec {
inherit (source) src version; inherit (source) src version;
enableParallelBuilding = true; enableParallelBuilding = true;
separateDebugInfo = true; separateDebugInfo = true;
buildInputs = [ nativeBuildInputs = [
autoreconfHook autoreconfHook
automake automake
autoconf autoconf
libtool libtool
gnumake gnumake
];
buildInputs = [
boost boost
mpi mpi
gcc
] ++ optional (enableOvni) ovni; ] ++ optional (enableOvni) ovni;
configureFlags = optional (enableOvni) "--with-ovni=${ovni}"; configureFlags = optional (enableOvni) "--with-ovni=${ovni}";
dontDisableStatic = true; dontDisableStatic = true;