Introduce intel oneapi 202{4,5} and make 2025 the default intelPackages
This commit is contained in:
		
							parent
							
								
									d974fbee05
								
							
						
					
					
						commit
						4377ad3e46
					
				
							
								
								
									
										14
									
								
								overlay.nix
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								overlay.nix
									
									
									
									
									
								
							| @ -19,8 +19,11 @@ let | |||||||
|     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 { }; |     gpi-2 = callPackage ./pkgs/gpi-2/default.nix { }; | ||||||
|  |     intel-apt = callPackage ./pkgs/intel-oneapi/packages.nix { }; | ||||||
|     intelPackages_2023 = callPackage ./pkgs/intel-oneapi/2023.nix { }; |     intelPackages_2023 = callPackage ./pkgs/intel-oneapi/2023.nix { }; | ||||||
|     intelPackages = final.intelPackages_2023; |     intelPackages_2024 = final.intel-apt.hpckit_2024; | ||||||
|  |     intelPackages_2025 = final.intel-apt.hpckit_2025; | ||||||
|  |     intelPackages = final.intelPackages_2025; | ||||||
|     jemallocNanos6 = callPackage ./pkgs/nanos6/jemalloc.nix { }; |     jemallocNanos6 = callPackage ./pkgs/nanos6/jemalloc.nix { }; | ||||||
|     lmbench = callPackage ./pkgs/lmbench/default.nix { }; |     lmbench = callPackage ./pkgs/lmbench/default.nix { }; | ||||||
|     mcxx = callPackage ./pkgs/mcxx/default.nix { }; |     mcxx = callPackage ./pkgs/mcxx/default.nix { }; | ||||||
| @ -74,6 +77,15 @@ in bscPkgs // { | |||||||
|       intel2023-ifort   = callPackage ./test/compilers/hello-f.nix { |       intel2023-ifort   = callPackage ./test/compilers/hello-f.nix { | ||||||
|         stdenv = final.intelPackages_2023.stdenv-ifort; |         stdenv = final.intelPackages_2023.stdenv-ifort; | ||||||
|       }; |       }; | ||||||
|  | 
 | ||||||
|  |       intel2024-icx-c   = hello-c.override   { stdenv = final.intelPackages_2024.stdenv; }; | ||||||
|  |       intel2025-icx-c   = hello-c.override   { stdenv = final.intelPackages_2025.stdenv; }; | ||||||
|  |       intel2024-icx-cpp = hello-cpp.override { stdenv = final.intelPackages_2024.stdenv; }; | ||||||
|  |       intel2025-icx-cpp = hello-cpp.override { stdenv = final.intelPackages_2025.stdenv; }; | ||||||
|  |       intel2023-sycl    = hello-sycl.override { intelPackages = final.intelPackages_2023; }; | ||||||
|  |       intel2024-sycl    = hello-sycl.override { intelPackages = final.intelPackages_2024; }; | ||||||
|  |       intel2025-sycl    = hello-sycl.override { intelPackages = final.intelPackages_2025; }; | ||||||
|  | 
 | ||||||
|       clangOmpss2-lto   = lto.override       { stdenv = final.stdenvClangOmpss2Nanos6; }; |       clangOmpss2-lto   = lto.override       { stdenv = final.stdenvClangOmpss2Nanos6; }; | ||||||
|       clangOmpss2-asan  = asan.override      { stdenv = final.stdenvClangOmpss2Nanos6; }; |       clangOmpss2-asan  = asan.override      { stdenv = final.stdenvClangOmpss2Nanos6; }; | ||||||
|       clangOmpss2-task  = callPackage ./test/compilers/ompss2.nix { |       clangOmpss2-task  = callPackage ./test/compilers/ompss2.nix { | ||||||
|  | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										112674
									
								
								pkgs/intel-oneapi/packages.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112674
									
								
								pkgs/intel-oneapi/packages.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										205
									
								
								pkgs/intel-oneapi/packages.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										205
									
								
								pkgs/intel-oneapi/packages.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,205 @@ | |||||||
|  | { lib | ||||||
|  | , stdenv | ||||||
|  | , callPackage | ||||||
|  | , dpkg | ||||||
|  | , fetchurl | ||||||
|  | , recurseIntoAttrs | ||||||
|  | 
 | ||||||
|  | , sqlite | ||||||
|  | , elfutils | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   inherit (builtins) | ||||||
|  |     elem attrNames attrValues concatMap filter fromJSON getAttr groupBy head isNull listToAttrs map mapAttrs readFile replaceStrings splitVersion ; | ||||||
|  |   inherit (lib) | ||||||
|  |     converge findFirst groupBy' hasPrefix optional pipe take toInt toList versionAtLeast versionOlder ; | ||||||
|  | 
 | ||||||
|  |   aptData = fromJSON (readFile ./packages.json); | ||||||
|  | 
 | ||||||
|  |   # Compare versions in debian control file syntax | ||||||
|  |   # See: https://www.debian.org/doc/debian-policy/ch-relationships.html#syntax-of-relationship-fields | ||||||
|  |   # | ||||||
|  |   # NOTE: this is not a proper version comparison | ||||||
|  |   # | ||||||
|  |   # A proper version solver, should aggregate dependencies with the same name | ||||||
|  |   # and compute the constraint (e.g. a (>= 2) a (<< 5) -> 2 <= a << 5) | ||||||
|  |   # | ||||||
|  |   # But in the intel repo, there are no such "duplicated" dependencies to specify | ||||||
|  |   # upper limits, which leads to issues when intel-hpckit-2021 depends on things | ||||||
|  |   # like intel-basekit >= 2021.1.0-2403 and we end up installing the newest | ||||||
|  |   # basekit instead of the one from 2021. | ||||||
|  |   # | ||||||
|  |   # To mitigate this, >= is set to take the latest version with matching major | ||||||
|  |   # and minor (only revision and patch are allowed to change) | ||||||
|  |   compareVersions = got: kind: want: | ||||||
|  |     let | ||||||
|  |       g0 = take 2 (splitVersion got); | ||||||
|  |       w0 = take 2 (splitVersion want); | ||||||
|  |     in if isNull want then true | ||||||
|  |     else if kind == "=" then got == want | ||||||
|  |     else if kind == "<<" then versionOlder got want | ||||||
|  |     else if kind == "<=" then versionAtLeast want got | ||||||
|  |     else if kind == ">>" then versionOlder want got | ||||||
|  |     else if kind == ">=" then (g0 == w0) && versionAtLeast got want # always match major version | ||||||
|  |     else throw "unknown operation: ${kind}"; | ||||||
|  | 
 | ||||||
|  |   findMatching = { pname, kind, version }: | ||||||
|  |     findFirst (x: pname == x.pname && compareVersions x.version kind version) null aptData; | ||||||
|  | 
 | ||||||
|  |   isIntel = pkg: (hasPrefix "intel-" pkg.pname); | ||||||
|  | 
 | ||||||
|  |   expandDeps = pkg: (map findMatching (filter isIntel pkg.dependencies)) ++ (optional (pkg.size != 0) pkg); | ||||||
|  | 
 | ||||||
|  |   # get the oldest by major version. If they have the same major version, take | ||||||
|  |   # the newest. This prevents most issues with resolutions | ||||||
|  |   # versionOlder b a -> true if b is older than a (b `older` a) | ||||||
|  |   getNewerInMajor = a: b: let | ||||||
|  |     va = a.version; | ||||||
|  |     vb = b.version; | ||||||
|  |     va0 = head (splitVersion va); | ||||||
|  |     vb0 = head (splitVersion vb); | ||||||
|  |   in | ||||||
|  |   if isNull a then b | ||||||
|  |   else if va0 != vb0 then | ||||||
|  |     if va0 > vb0 then b else a | ||||||
|  |   else if versionOlder vb va then a else b; | ||||||
|  |   removeDups = l: attrValues (groupBy' getNewerInMajor null (getAttr "provides") l); | ||||||
|  | 
 | ||||||
|  |   _resolveDeps = converge (l: removeDups (concatMap expandDeps l)); | ||||||
|  |   resolveDeps = pkg: let deps = _resolveDeps (toList pkg); | ||||||
|  |       namedDeps = (map (x: "${x.pname}-${x.version}") deps); | ||||||
|  |     in builtins.traceVerbose (builtins.deepSeq namedDeps namedDeps) deps; | ||||||
|  | 
 | ||||||
|  |   blacklist = [ | ||||||
|  |     "intel-basekit-env" | ||||||
|  |     "intel-basekit-getting-started" | ||||||
|  |     "intel-hpckit-env" | ||||||
|  |     "intel-hpckit-getting-started" | ||||||
|  |     "intel-oneapi-advisor" | ||||||
|  |     "intel-oneapi-common-licensing" | ||||||
|  |     "intel-oneapi-common-oneapi-vars" | ||||||
|  |     "intel-oneapi-common-vars" | ||||||
|  |     "intel-oneapi-compiler-cpp-eclipse-cfg" | ||||||
|  |     "intel-oneapi-compiler-dpcpp-eclipse-cfg" | ||||||
|  |     "intel-oneapi-condaindex" | ||||||
|  |     "intel-oneapi-dev-utilities-eclipse-cfg" | ||||||
|  |     "intel-oneapi-dpcpp-ct-eclipse-cfg" | ||||||
|  |     "intel-oneapi-eclipse-ide" | ||||||
|  |     "intel-oneapi-hpc-toolkit-getting-started" | ||||||
|  |     "intel-oneapi-icc-eclipse-plugin-cpp" | ||||||
|  |     "intel-oneapi-vtune" | ||||||
|  |     "intel-oneapi-vtune-eclipse-plugin-vtune" | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   isInBlacklist = pkg: elem pkg.provides blacklist; | ||||||
|  |   removeBlacklist = filter (e: !(isInBlacklist e)); | ||||||
|  | 
 | ||||||
|  |   dpkgExtractAll = pname: version: {srcs, deps}: stdenv.mkDerivation { | ||||||
|  |     inherit pname version srcs; | ||||||
|  | 
 | ||||||
|  |     nativeBuildInputs = [ dpkg ]; | ||||||
|  |     phases = [ "installPhase" ]; | ||||||
|  | 
 | ||||||
|  |     passthru = { inherit deps; }; | ||||||
|  | 
 | ||||||
|  |     installPhase = '' | ||||||
|  |       mkdir -p $out | ||||||
|  |       for src in $srcs; do | ||||||
|  |         echo "Unpacking $src" | ||||||
|  |         dpkg -x $src $out | ||||||
|  |       done | ||||||
|  |     ''; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   apthost = "https://apt.repos.intel.com/oneapi/"; | ||||||
|  |   fetchDeb = p: fetchurl { url = apthost + p.filename; inherit (p) sha256; }; | ||||||
|  | 
 | ||||||
|  |   buildIntel = pkg: pipe pkg [ | ||||||
|  |     resolveDeps | ||||||
|  |     removeBlacklist | ||||||
|  |     (l: {srcs = map fetchDeb l; deps = l; }) | ||||||
|  |     (dpkgExtractAll "${pkg.provides}-extracted" pkg.version) | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   findHpcKit = year: findMatching { pname = "intel-hpckit"; kind = "<<"; version = toString (year+1); }; | ||||||
|  |   years = map toInt (attrNames components); | ||||||
|  | 
 | ||||||
|  |   patchIntel = callPackage ./patch_intel.nix { }; | ||||||
|  | 
 | ||||||
|  |   # Version information for each hpckit. This is used to normalize the paths | ||||||
|  |   # so that files are in $out/{bin,lib,include...} instead of all over the place | ||||||
|  |   # in $out/opt/intel/oneapi/*/*/{...}. | ||||||
|  |   # | ||||||
|  |   # The most important is the compiler component, which is used to build the | ||||||
|  |   # stdenv for the hpckit. | ||||||
|  |   # | ||||||
|  |   # NOTE: this have to be manually specified, so we can avoid IFD. To add a | ||||||
|  |   # new version, add a new field with an empty attrset, (e.g. "2026" = {}; ), | ||||||
|  |   # build hpckit_2026.unpatched and use the values from | ||||||
|  |   # result/opt/intel/oneapi/* to populate the attrset. | ||||||
|  |   # | ||||||
|  |   # WARN: if there are more than one version in the folders of the unpatched | ||||||
|  |   # components, our dependency resolution hacks have probably failed and the | ||||||
|  |   # package set may be broken. | ||||||
|  |   components = { | ||||||
|  |     "2025" = { | ||||||
|  |       ishmem = "1.3"; | ||||||
|  |       pti = "0.12"; | ||||||
|  |       tcm = "1.3"; | ||||||
|  |       umf = "0.10"; | ||||||
|  | 
 | ||||||
|  |       ccl = "2021.15"; | ||||||
|  |       compiler = "2025.1"; | ||||||
|  |       dal = "2025.5"; | ||||||
|  |       debugger = "2025.1"; | ||||||
|  |       dev-utilities = "2025.1"; | ||||||
|  |       dnnl = "2025.1"; | ||||||
|  |       dpcpp-ct = "2025.1"; | ||||||
|  |       dpl = "2022.8"; | ||||||
|  |       ipp = "2022.1"; | ||||||
|  |       ippcp = "2025.1"; | ||||||
|  |       mkl = "2025.1"; | ||||||
|  |       mpi = "2021.15"; | ||||||
|  |       tbb = "2022.1"; | ||||||
|  |     }; | ||||||
|  |     "2024" = { | ||||||
|  |       tcm = "1.1"; | ||||||
|  | 
 | ||||||
|  |       ccl = "2021.13"; | ||||||
|  |       compiler = "2024.2"; | ||||||
|  |       dal = "2024.6"; | ||||||
|  |       debugger = "2024.2"; | ||||||
|  |       dev-utilities = "2024.2"; | ||||||
|  |       diagnostics = "2024.2"; | ||||||
|  |       dnnl = "2024.2"; | ||||||
|  |       dpcpp-ct = "2024.2"; | ||||||
|  |       dpl = "2022.6"; | ||||||
|  |       ipp = "2021.12"; | ||||||
|  |       ippcp = "2021.12"; | ||||||
|  |       mkl = "2024.2"; | ||||||
|  |       mpi = "2021.13"; | ||||||
|  |       tbb = "2021.13"; | ||||||
|  | 
 | ||||||
|  |       extraPackages = [ | ||||||
|  |         sqlite | ||||||
|  |         elfutils | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   replaceDots = replaceStrings ["."] ["_"]; | ||||||
|  | 
 | ||||||
|  | in recurseIntoAttrs (listToAttrs (map (year: let | ||||||
|  |       year_str = toString year; | ||||||
|  |     in { | ||||||
|  |       name = "hpckit_${year_str}"; | ||||||
|  |       value = patchIntel {unpatched = buildIntel (findHpcKit year); components = components.${year_str}; }; | ||||||
|  |   }) years)) // { | ||||||
|  |   apt = pipe aptData [ | ||||||
|  |     (groupBy (p: replaceDots p.provides)) | ||||||
|  |     (mapAttrs (_: l: listToAttrs (map (pkg: { name = replaceDots ("v" + pkg.version); value = pkg; }) l))) | ||||||
|  |   ] ; | ||||||
|  | 
 | ||||||
|  |   inherit resolveDeps patchIntel buildIntel; | ||||||
|  | } | ||||||
							
								
								
									
										163
									
								
								pkgs/intel-oneapi/patch_intel.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								pkgs/intel-oneapi/patch_intel.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,163 @@ | |||||||
|  | { stdenv | ||||||
|  | , stdenvNoCC | ||||||
|  | , lib | ||||||
|  | , symlinkJoin | ||||||
|  | , autoPatchelfHook | ||||||
|  | , wrapCCWith | ||||||
|  | , overrideCC | ||||||
|  | , gcc | ||||||
|  | , hwloc | ||||||
|  | , libelf | ||||||
|  | , libffi_3_3 | ||||||
|  | , libpsm2 | ||||||
|  | , libuuid | ||||||
|  | , libxml2 | ||||||
|  | , numactl | ||||||
|  | , ocl-icd | ||||||
|  | , openssl | ||||||
|  | , python3 | ||||||
|  | , rdma-core | ||||||
|  | , ucx | ||||||
|  | , zlib | ||||||
|  | , makeOverridable | ||||||
|  | , recurseIntoAttrs | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | makeOverridable ( | ||||||
|  | { | ||||||
|  |   unpatched, | ||||||
|  |   components ? { }, | ||||||
|  |   extraPackages ? components.extraPackages or [] | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   inherit (builtins) attrValues filter mapAttrs removeAttrs; | ||||||
|  | 
 | ||||||
|  |   __components = removeAttrs components ["extraPackages"]; | ||||||
|  |   _components = __components; | ||||||
|  |   # _components = lib.traceSeqN 2 { | ||||||
|  |   #   inherit unpatched __components; | ||||||
|  |   #   deps = builtins.map (x: "${x.pname}-${x.version}") unpatched.deps; | ||||||
|  |   # } __components; | ||||||
|  | 
 | ||||||
|  |   wrapIntel = { cc, extraBuildCommands ? "", extraInstall ? "", ... }@args: | ||||||
|  |     let | ||||||
|  |       targetConfig = stdenv.targetPlatform.config; | ||||||
|  |     in (wrapCCWith { | ||||||
|  |       inherit cc; | ||||||
|  |       extraBuildCommands = '' | ||||||
|  |         echo "-isystem ${cc}/include" >> $out/nix-support/cc-cflags | ||||||
|  |         echo "-isystem ${cc}/include/intel64" >> $out/nix-support/cc-cflags | ||||||
|  | 
 | ||||||
|  |         echo "-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-ldflags | ||||||
|  |         echo "-L${gcc.cc.lib}/lib" >> $out/nix-support/cc-ldflags | ||||||
|  |         echo "-L${cc}/lib" >> $out/nix-support/cc-ldflags | ||||||
|  | 
 | ||||||
|  |         echo "--gcc-toolchain=${gcc.cc}" >> $out/nix-support/libcxx-cxxflags | ||||||
|  | 
 | ||||||
|  |         for dir in ${gcc.cc}/include/c++/*; do | ||||||
|  |           echo "-isystem $dir" >> $out/nix-support/libcxx-cxxflags | ||||||
|  |         done | ||||||
|  |         for dir in ${gcc.cc}/include/c++/*/${targetConfig}; do | ||||||
|  |           echo "-isystem $dir" >> $out/nix-support/libcxx-cxxflags | ||||||
|  |         done | ||||||
|  | 
 | ||||||
|  |         # Need the gcc in the path | ||||||
|  |         echo 'export "PATH=${gcc}/bin:$PATH"' >> $out/nix-support/cc-wrapper-hook | ||||||
|  | 
 | ||||||
|  |         # Disable hardening by default | ||||||
|  |         echo "" > $out/nix-support/add-hardening.sh | ||||||
|  | 
 | ||||||
|  |         # For some reason, If we don't resolve the realpath things go wrong | ||||||
|  |         for stddef in ${cc}/lib/clang/*/include/stddef.h ; do | ||||||
|  |           dir=$(dirname $(realpath "$stddef")) | ||||||
|  |           echo "-isystem $dir" >> $out/nix-support/cc-cflags | ||||||
|  |         done | ||||||
|  | 
 | ||||||
|  |       '' + extraBuildCommands; | ||||||
|  |     } // (removeAttrs args ["cc" "extraBuildCommands" "extraInstall"]) | ||||||
|  |     ).overrideAttrs (old: { | ||||||
|  |       installPhase = old.installPhase + extraInstall; | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  | in | ||||||
|  | stdenvNoCC.mkDerivation (finalAttrs: { | ||||||
|  |   pname = lib.removeSuffix "-extracted" unpatched.pname; | ||||||
|  |   inherit (unpatched) version; | ||||||
|  |   src = unpatched; | ||||||
|  | 
 | ||||||
|  |   phases = [ "installPhase" "fixupPhase" ]; | ||||||
|  |   buildInputs = [ | ||||||
|  |     libffi_3_3 | ||||||
|  |     libelf | ||||||
|  |     libxml2 | ||||||
|  |     hwloc | ||||||
|  |     numactl | ||||||
|  |     libuuid | ||||||
|  |     libpsm2 | ||||||
|  |     zlib | ||||||
|  |     ocl-icd | ||||||
|  |     rdma-core | ||||||
|  |     ucx | ||||||
|  |     openssl | ||||||
|  |     python3 | ||||||
|  |     stdenv.cc.cc.lib | ||||||
|  |   ] ++ extraPackages; | ||||||
|  | 
 | ||||||
|  |   autoPatchelfIgnoreMissingDeps = [ "libhwloc.so.5" "libcuda.so.1" "libze_loader.so.1" ]; | ||||||
|  | 
 | ||||||
|  |   nativeBuildInputs = [ autoPatchelfHook ]; | ||||||
|  |   installPhase = '' | ||||||
|  |     cp -r $src/opt/intel/oneapi/ $out | ||||||
|  |   ''; | ||||||
|  | 
 | ||||||
|  |   passthru = let | ||||||
|  |     pkgs = mapAttrs | ||||||
|  |       (folder: version: symlinkJoin { | ||||||
|  |         pname = "intel-${folder}"; | ||||||
|  |         inherit version; | ||||||
|  |         paths = ["${finalAttrs.finalPackage}/${folder}/${version}"]; | ||||||
|  |       }) | ||||||
|  |       _components; | ||||||
|  |   in pkgs // { | ||||||
|  |     inherit unpatched; | ||||||
|  |     pkgs = recurseIntoAttrs pkgs; | ||||||
|  |     components = _components; | ||||||
|  | 
 | ||||||
|  |     # This contains all packages properly symlinked into toplevel directories | ||||||
|  |     # in $out. | ||||||
|  |     # | ||||||
|  |     # NOTE: there are clashes with packages that have symlinks outside their | ||||||
|  |     # scope (libtcm and env/vars.sh) | ||||||
|  |     all = symlinkJoin { | ||||||
|  |       pname = finalAttrs.finalPackage + "-symlinked"; | ||||||
|  |       inherit (finalAttrs.finalPackage) version; | ||||||
|  |       paths = filter lib.isDerivation (attrValues finalAttrs.finalPackage.pkgs); | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     stdenv = overrideCC stdenv finalAttrs.finalPackage.cc; | ||||||
|  | 
 | ||||||
|  |     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 | ||||||
|  | 
 | ||||||
|  |         ln -s ${finalAttrs.finalPackage.pkgs.compiler}/lib $out/lib | ||||||
|  |         ln -s ${finalAttrs.finalPackage.pkgs.compiler}/include $out/include | ||||||
|  |       ''; | ||||||
|  |       extraInstall = '' | ||||||
|  |         export named_cc="icx" | ||||||
|  |         export named_cxx="icpx" | ||||||
|  |         export named_fc="ifx" | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  | })) | ||||||
							
								
								
									
										29
									
								
								pkgs/intel-oneapi/process.jq
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								pkgs/intel-oneapi/process.jq
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | #!/usr/bin/env -S jq -f | ||||||
|  | 
 | ||||||
|  | def extract_fields: { | ||||||
|  |         pname : .Package, | ||||||
|  |         version : .Version, | ||||||
|  |         provides : .Package | sub("[0-9.-]*$"; ""), | ||||||
|  |         filename : .Filename, | ||||||
|  |         size : ."Installed-Size" | tonumber, | ||||||
|  |         sha256 : .SHA256, | ||||||
|  |         dependencies : .Depends, | ||||||
|  |     } ; | ||||||
|  | 
 | ||||||
|  | # parses dependencies into a list of [{.pname, .kind, .version}] | ||||||
|  | # some dependencies do not have a version specified, in which case, version = version = null | ||||||
|  | # | ||||||
|  | # example dependencies: | ||||||
|  | # intel-oneapi-common-vars (>= 2023.0.0-25325), intel-oneapi-common-licensing-2023.0.0 | ||||||
|  | 
 | ||||||
|  | def split_dependencies : map(try(.dependencies |= split(",\\s?"; "")) // .dependencies |= []) ; | ||||||
|  | 
 | ||||||
|  | def match_version : capture("(?<pname>[a-zA-Z0-9_\\-.]*) *(\\((?<kind>[<>=]*) *(?<version>.*)\\))?"; "") ; | ||||||
|  | 
 | ||||||
|  | def parse_dependencies : map_values(.dependencies.[] |= match_version) ; | ||||||
|  | 
 | ||||||
|  | def sort_version_decreasing : sort_by(.version | split("[-.]"; "") | map(tonumber)) | reverse ; | ||||||
|  | 
 | ||||||
|  | map(extract_fields) | split_dependencies | parse_dependencies | sort_version_decreasing | ||||||
|  | 
 | ||||||
|  | # [.[] | select(.pname == "intel-hpckit") | .version] | ||||||
							
								
								
									
										29
									
								
								pkgs/intel-oneapi/toJson.awk
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								pkgs/intel-oneapi/toJson.awk
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | #!/usr/bin/env -S awk -f | ||||||
|  | 
 | ||||||
|  | BEGIN   { | ||||||
|  |     FS=": " | ||||||
|  | 
 | ||||||
|  |     prev_empty=1 | ||||||
|  |     t="  " | ||||||
|  | 
 | ||||||
|  |     print "[ {" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | !NF { # empty line, update separator so next non empty line closes the dict | ||||||
|  |     prev_empty=1 | ||||||
|  |     t="},\n{ " | ||||||
|  |     next # skip line (we won't match anything else) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |     printf t "\"%s\" : \"%s\"\n", $1, $2 | ||||||
|  | 
 | ||||||
|  |     if (prev_empty) { | ||||||
|  |         # we were the first after a group of empty lines, following ones have to | ||||||
|  |         # have a comma | ||||||
|  |         prev_empty=0 | ||||||
|  |         t=", " | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | END     { print "} ]" } | ||||||
| @ -2,3 +2,5 @@ | |||||||
| 
 | 
 | ||||||
| curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages -o amd64-packages | curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages -o amd64-packages | ||||||
| curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages -o all-packages | curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages -o all-packages | ||||||
|  | 
 | ||||||
|  | cat amd64-packages all-packages | ./toJson.awk | ./process.jq >packages.json | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user