diff --git a/overlay.nix b/overlay.nix index 199ba67f..a58833d4 100644 --- a/overlay.nix +++ b/overlay.nix @@ -20,8 +20,9 @@ let #extrae = callPackage ./pkgs/extrae/default.nix { }; # Broken and outdated gpi-2 = callPackage ./pkgs/gpi-2/default.nix { }; gromacs = callPackage ./pkgs/gromacs/default.nix { enableSYCL = true; }; - intel-apt = callPackage ./pkgs/intel-oneapi/packages.nix { }; - intelPackages_2023 = callPackage ./pkgs/intel-oneapi/2023.nix { }; + wrapIntel = callPackage ./pkgs/intel-oneapi/common/wrapper.nix { }; + intel-apt = callPackage ./pkgs/intel-oneapi/deb/packages.nix { }; + intelPackages_2023 = callPackage ./pkgs/intel-oneapi/deb/2023.nix { }; intelPackages_2024 = final.intel-apt.hpckit_2024; intelPackages_2025 = final.intel-apt.hpckit_2025; intelPackages = final.intelPackages_2025; @@ -34,8 +35,8 @@ let linuxPackages_latest = prev.linuxPackages_latest.extend(_final: _prev: { amd-uprof-driver = _prev.callPackage ./pkgs/amd-uprof/driver.nix { }; }); - llvm-intel-unwrapped = callPackage ./pkgs/llvm-intel/default.nix { }; - llvm-intel = callPackage ./pkgs/llvm-intel/wrapped.nix { }; + llvm-intel-unwrapped = callPackage ./pkgs/intel-oneapi/open/default.nix { }; + llvm-intel = final.wrapIntel { cc = final.llvm-intel-unwrapped; }; lmbench = callPackage ./pkgs/lmbench/default.nix { }; # Broken and unmantained # mcxx = callPackage ./pkgs/mcxx/default.nix { }; diff --git a/pkgs/intel-oneapi/common/wrapper.nix b/pkgs/intel-oneapi/common/wrapper.nix new file mode 100644 index 00000000..a5619033 --- /dev/null +++ b/pkgs/intel-oneapi/common/wrapper.nix @@ -0,0 +1,71 @@ +{ + stdenv, + lib, + gcc, + libgcc, + wrapCCWith, +}: + +{ + cc, + extraPath ? lib.makeBinPath ( + [ gcc.cc ] ++ (lib.optionals (cc.enableCuda or false) [ cc.cudaPackages.cudatoolkit ]) + ), + extraBuildCommands ? "", + extraInstallCommands ? "", +}: + +let + targetConfig = stdenv.targetPlatform.config; +in +(wrapCCWith { + inherit cc; + + nixSupport = { + cc-ldflags = [ + "-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" + "-L${gcc.cc.lib}/lib" + "-L${libgcc.out}/lib" + "-L${gcc.libc}/lib" + "-L${cc}/lib" + ]; + cc-cflags = [ + "--gcc-toolchain=${gcc.cc}" + "-isystem ${cc.original or cc}/lib/clang/${toString cc.llvmMajorVersion}/include" + "-isystem ${cc}/include" + "-isystem ${cc}/include/intel64" + "-isystem ${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}/include" + ]; + libcxx-cxxflags = [ + "-isystem ${gcc.cc}/include/c++/${gcc.version}" + "-isystem ${gcc.cc}/include/c++/${gcc.version}/${targetConfig}" + ]; + }; + + extraBuildCommands = '' + # FIXME: We should find a better way to modify the PATH instead of using + # this ugly hack. See https://jungle.bsc.es/git/rarias/bscpkgs/issues/9 + echo 'path_backup="${extraPath}:$path_backup"' >>$out/nix-support/cc-wrapper-hook + + # Disable hardening by default + echo "" > $out/nix-support/add-hardening.sh + + pushd $ccPath + for i in $ {llvm,sycl}-* ; do + ln -s $ccPath/$i $out/bin/$i + done + popd + + # Use this to detect when a compiler subprocess is called + # from icpx (--fsycl-host-compiler) + echo 'export NIX_CC_WRAPPER_INTEL=1' >>$out/nix-support/cc-wrapper-hook + + # oneMath looks for sycl libraries in bin/../lib + ln -s ${cc}/lib $out/lib + ln -s ${cc}/include $out/include + '' + + extraBuildCommands; +}).overrideAttrs + (old: { + installPhase = old.installPhase + extraInstallCommands; + }) diff --git a/pkgs/intel-oneapi/2023.nix b/pkgs/intel-oneapi/deb/2023.nix similarity index 100% rename from pkgs/intel-oneapi/2023.nix rename to pkgs/intel-oneapi/deb/2023.nix diff --git a/pkgs/intel-oneapi/packages.json b/pkgs/intel-oneapi/deb/packages.json similarity index 100% rename from pkgs/intel-oneapi/packages.json rename to pkgs/intel-oneapi/deb/packages.json diff --git a/pkgs/intel-oneapi/packages.nix b/pkgs/intel-oneapi/deb/packages.nix similarity index 100% rename from pkgs/intel-oneapi/packages.nix rename to pkgs/intel-oneapi/deb/packages.nix diff --git a/pkgs/intel-oneapi/patch_intel.nix b/pkgs/intel-oneapi/deb/patch_intel.nix similarity index 56% rename from pkgs/intel-oneapi/patch_intel.nix rename to pkgs/intel-oneapi/deb/patch_intel.nix index 56a74b30..b85b26ad 100644 --- a/pkgs/intel-oneapi/patch_intel.nix +++ b/pkgs/intel-oneapi/deb/patch_intel.nix @@ -4,12 +4,10 @@ lib, symlinkJoin, autoPatchelfHook, - wrapCCWith, + wrapIntel, overrideCC, - gcc, hwloc, libelf, - libgcc, libffi_3_3, libpsm2, libuuid, @@ -41,79 +39,16 @@ lib.makeOverridable ( inherit (components) llvmMajorVersion; - __components = removeAttrs components [ "extraPackages" "llvmMajorVersion" ]; + __components = removeAttrs components [ + "extraPackages" + "llvmMajorVersion" + ]; _components = __components; # _components = lib.traceSeqN 2 { # inherit unpatched __components; # deps = builtins.map (x: "${x.pname}-${x.version}") unpatched.deps; # } __components; - wrapIntel = - cc: - let - targetConfig = stdenv.targetPlatform.config; - in - (wrapCCWith { - inherit cc; - - nixSupport = { - cc-ldflags = [ - "-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" - "-L${gcc.cc.lib}/lib" - "-L${libgcc.out}/lib" - "-L${cc}/lib" - ]; - cc-cflags = [ - "--gcc-toolchain=${gcc.cc}" - "-isystem ${cc.original or cc}/lib/clang/${toString cc.llvmMajorVersion}/include" - "-isystem ${cc}/include" - "-isystem ${cc}/include/intel64" - "-isystem ${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}/include" - ]; - libcxx-cxxflags = [ - # "--gcc-toolchain=${gcc.cc}" - "-isystem ${gcc.cc}/include/c++/${gcc.version}" - "-isystem ${gcc.cc}/include/c++/${gcc.version}/${targetConfig}" - ]; - }; - - extraBuildCommands = '' - # FIXME: We should find a better way to modify the PATH instead of using - # this ugly hack. See https://jungle.bsc.es/git/rarias/bscpkgs/issues/9 - echo 'path_backup="${gcc.cc}/bin:$path_backup"' >>$out/nix-support/cc-wrapper-hook - - # Disable hardening by default - echo "" > $out/nix-support/add-hardening.sh - - wrap icx $wrapper $ccPath/icx - wrap icpx $wrapper $ccPath/icpx - wrap ifx $wrapper $ccPath/ifx - - ln -s $out/bin/icpx $out/bin/c++ - ln -s $out/bin/icx $out/bin/cc - - ln -s $ccPath/sycl-ls $out/bin/sycl-ls - ln -s $ccPath/sycl-trace $out/bin/sycl-trace - - sed -i 's/.*isCxx=0/isCxx=1/' $out/bin/icpx - - # Use this to detect when a compiler subprocess is called - # from icpx (--fsycl-host-compiler) - echo 'export NIX_CC_WRAPPER_INTEL=1' >>$out/nix-support/cc-wrapper-hook - - # oneMath looks for sycl libraries in bin/../lib - ln -s ${cc}/lib $out/lib - ln -s ${cc}/include $out/include - ''; - }).overrideAttrs - (old: { - installPhase = old.installPhase + '' - export named_cc="icx" - export named_cxx="icpx" - export named_fc="ifx" - ''; - }); - in stdenvNoCC.mkDerivation (finalAttrs: { pname = lib.removeSuffix "-extracted" unpatched.pname; @@ -196,7 +131,25 @@ lib.makeOverridable ( stdenv = overrideCC stdenv finalAttrs.finalPackage.cc; - cc = wrapIntel finalAttrs.finalPackage.pkgs.compiler; + cc = wrapIntel { + cc = finalAttrs.finalPackage.pkgs.compiler; + extraBuildCommands = '' + wrap icx $wrapper $ccPath/icx + wrap icpx $wrapper $ccPath/icpx + wrap ifx $wrapper $ccPath/ifx + + ln -s $out/bin/icpx $out/bin/c++ + ln -s $out/bin/icx $out/bin/cc + + sed -i 's/.*isCxx=0/isCxx=1/' $out/bin/icpx + ''; + + extraInstallCommands = '' + export named_cc="icx" + export named_cxx="icpx" + export named_fc="ifx" + ''; + }; }; }) diff --git a/pkgs/intel-oneapi/process.jq b/pkgs/intel-oneapi/deb/process.jq similarity index 100% rename from pkgs/intel-oneapi/process.jq rename to pkgs/intel-oneapi/deb/process.jq diff --git a/pkgs/intel-oneapi/toJson.awk b/pkgs/intel-oneapi/deb/toJson.awk similarity index 100% rename from pkgs/intel-oneapi/toJson.awk rename to pkgs/intel-oneapi/deb/toJson.awk diff --git a/pkgs/intel-oneapi/update.sh b/pkgs/intel-oneapi/deb/update.sh similarity index 100% rename from pkgs/intel-oneapi/update.sh rename to pkgs/intel-oneapi/deb/update.sh diff --git a/pkgs/llvm-intel/default.nix b/pkgs/intel-oneapi/open/default.nix similarity index 100% rename from pkgs/llvm-intel/default.nix rename to pkgs/intel-oneapi/open/default.nix diff --git a/pkgs/llvm-intel/fix-ur.patch b/pkgs/intel-oneapi/open/fix-ur.patch similarity index 100% rename from pkgs/llvm-intel/fix-ur.patch rename to pkgs/intel-oneapi/open/fix-ur.patch diff --git a/pkgs/llvm-intel/wrapped.nix b/pkgs/llvm-intel/wrapped.nix deleted file mode 100644 index 3ad2e0c3..00000000 --- a/pkgs/llvm-intel/wrapped.nix +++ /dev/null @@ -1,69 +0,0 @@ -{ - stdenv, - lib, - wrapCCWith, - llvm-intel-unwrapped, - gcc, - libgcc, -}: - -let - wrapIntel = - cc: - let - targetConfig = stdenv.targetPlatform.config; - - extraPath = builtins.concatStringsSep ":" ( - [ "${gcc.cc}/bin" ] ++ lib.optionals cc.enableCuda [ "${cc.cudaPackages.cudatoolkit}/bin" ] - ); - in - wrapCCWith { - inherit cc; - - nixSupport = { - cc-ldflags = [ - "-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" - "-L${gcc.cc.lib}/lib" - "-L${libgcc.out}/lib" - "-L${gcc.libc}/lib" - "-L${cc}/lib" - ]; - cc-cflags = [ - "--gcc-toolchain=${gcc.cc}" - "-isystem ${cc}/lib/clang/${cc.llvmMajorVersion}/include" - "-isystem ${cc}/include" - "-isystem ${cc}/include/intel64" - "-isystem ${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}/include" - ]; - libcxx-cxxflags = [ - # "--gcc-toolchain=${gcc.cc}" - "-isystem ${gcc.cc}/include/c++/${gcc.version}" - "-isystem ${gcc.cc}/include/c++/${gcc.version}/${targetConfig}" - ]; - }; - - extraBuildCommands = '' - # FIXME: We should find a better way to modify the PATH instead of using - # this ugly hack. See https://jungle.bsc.es/git/rarias/bscpkgs/issues/9 - echo 'path_backup="${extraPath}:$path_backup"' >>$out/nix-support/cc-wrapper-hook - - # Disable hardening by default - echo "" > $out/nix-support/add-hardening.sh - - pushd $ccPath - for i in $ {llvm,sycl}-* ; do - ln -s $ccPath/$i $out/bin/$i - done - popd - - # Use this to detect when a compiler subprocess is called - # from icpx (--fsycl-host-compiler) - echo 'export NIX_CC_WRAPPER_INTEL=1' >>$out/nix-support/cc-wrapper-hook - - # oneMath looks for sycl libraries in bin/../lib - ln -s ${cc}/lib $out/lib - ln -s ${cc}/include $out/include - ''; - }; -in -wrapIntel llvm-intel-unwrapped