diff --git a/pkgs/llvm-ompss2/default.nix b/pkgs/llvm-ompss2/default.nix index beb49dc6..e46878c5 100644 --- a/pkgs/llvm-ompss2/default.nix +++ b/pkgs/llvm-ompss2/default.nix @@ -39,22 +39,6 @@ let cc = clangOmpss2Unwrapped; gccVersion = with versions; let v = gcc.version; in concatStringsSep "." [(major v) (minor v) (patch v)]; - resetIntelCCFlags = let tconf = builtins.replaceStrings ["-"] ["_"] targetConfig; - in writeShellScript "remove-intel.sh" '' - if [ "''${NIX_CC_WRAPPER_INTEL:-0}" = 1 ]; then - unset NIX_CFLAGS_COMPILE_${tconf} - unset NIX_CC_WRAPPER_FLAGS_SET_${tconf} - - if (( "${NIX_DEBUG:-0}" >= 1 )); then - echo "ompss2: cleaned NIX_CFLAGS_COMPILE_${tconf} (invokation from intel compiler detected)" - fi - fi - ''; - -in wrapCCWith { - inherit cc bintools; - # extraPackages adds packages to depsTargetTargetPropagated - extraPackages = optional (openmp != null) openmp; extraBuildCommands = '' echo "-target ${targetConfig}" >> $out/nix-support/cc-cflags echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gccVersion}" >> $out/nix-support/cc-cflags @@ -71,17 +55,50 @@ in wrapCCWith { echo "--gcc-toolchain=${gcc}" >> $out/nix-support/cc-cflags wrap clang++ $wrapper $ccPath/clang++ - - sed -i 's|# Flirting.*|source ${resetIntelCCFlags}\n\n&|' $out/bin/clang - sed -i 's|# Flirting.*|&\nsource ${resetIntelCCFlags}\n\n&|' $out/bin/clang++ - - '' + lib.optionalString (openmp != 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 - echo "export ${homevar}=${ompss2rt}" >> $out/nix-support/cc-wrapper-hook - '' + optionalString (ompss2rt != null && ompss2rt.pname == "nodes") '' - echo "export NOSV_HOME=${ompss2rt.nosv}" >> $out/nix-support/cc-wrapper-hook ''; -} + envExports = lib.optionalString (openmp != 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 + echo "export ${homevar}=${ompss2rt}" >> $out/nix-support/cc-wrapper-hook + '' + optionalString (ompss2rt != null && ompss2rt.pname == "nodes") '' + echo "export NOSV_HOME=${ompss2rt.nosv}" >> $out/nix-support/cc-wrapper-hook + ''; + + extraPackages = optional (openmp != null) openmp; + + wrappedCC = wrapCCWith { + # extraPackages adds packages to depsTargetTargetPropagated + inherit cc bintools extraPackages; + extraBuildCommands = extraBuildCommands + envExports; + }; + + resetIntelCCFlags = let tconf = builtins.replaceStrings ["-"] ["_"] targetConfig; + in writeShellScript "remove-intel.sh" '' + if [ "''${NIX_CC_WRAPPER_INTEL:-0}" = 1 ]; then + unset NIX_CFLAGS_COMPILE_${tconf} + unset NIX_CC_WRAPPER_FLAGS_SET_${tconf} + + if (( "''${NIX_DEBUG:-0}" >= 1 )); then + echo "ompss2: cleaned NIX_CFLAGS_COMPILE_${tconf} (invokation from intel compiler detected)" + fi + fi + ''; + + intelExtraBuildCommands = '' + sed -i 's|# Flirting.*|source ${resetIntelCCFlags}\n\n&|' $out/bin/clang + sed -i 's|# Flirting.*|source ${resetIntelCCFlags}\n\n&|' $out/bin/clang++ + ''; + + wrappedCCIntel = wrapCCWith { + inherit cc bintools extraPackages; + # extraPackages adds packages to depsTargetTargetPropagated + extraBuildCommands = intelExtraBuildCommands + envExports; + }; + +in wrappedCC.overrideAttrs (oldAttrs: { + passthru = oldAttrs.passthru // { + forIcpx = wrappedCCIntel; + }; + }) diff --git a/test/compilers/icpx-ompss2.nix b/test/compilers/icpx-ompss2.nix index 90033319..79b8331a 100644 --- a/test/compilers/icpx-ompss2.nix +++ b/test/compilers/icpx-ompss2.nix @@ -1,4 +1,4 @@ -{ writeText, intelPackages, nodes, nosv, clangOmpss2Nodes, clangOmpss2Unwrapped, clangOmpss2, strace }: +{ writeText, intelPackages, nodes, nosv, clangOmpss2Nodes, strace }: let hello_cpp = writeText "hello.cpp" '' @@ -44,6 +44,10 @@ intelPackages.stdenv.mkDerivation { dontUnpack = true; dontConfigure = true; + # NODES requires access to /sys/devices to request NUMA information. It will + # fail to run otherwise, so we disable the sandbox for this test. + __noChroot = true; + env.NODES_HOME = nodes; NIX_DEBUG = 0; @@ -55,7 +59,7 @@ intelPackages.stdenv.mkDerivation { command -v $CXX icpx -Wno-deprecated-declarations -fsycl \ - -fsycl-host-compiler=${clangOmpss2Nodes}/bin/clang++ \ + -fsycl-host-compiler=${clangOmpss2Nodes.forIcpx}/bin/clang++ \ -fsycl-host-compiler-options='-Wno-deprecated-declarations -fompss-2=libnodes' \ -lnodes -lnosv \ $NODES_HOME/lib/nodes-main-wrapper.o \