Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at flake-libs 95 lines 3.7 kB view raw
1{ 2 lib, 3 callPackage, 4 stdenvAdapters, 5 buildPackages, 6 targetPackages, 7 stdenv, 8 gcc12Stdenv, 9 pkgs, 10 recurseIntoAttrs, 11 # This is the default binutils, but with *this* version of LLD rather 12 # than the default LLVM version's, if LLD is the choice. We use these for 13 # the `useLLVM` bootstrapping below. 14 bootBintoolsNoLibc ? if stdenv.targetPlatform.linker == "lld" then null else pkgs.bintoolsNoLibc, 15 bootBintools ? if stdenv.targetPlatform.linker == "lld" then null else pkgs.bintools, 16 llvmVersions ? { }, 17 patchesFn ? lib.id, 18 # Allows passthrough to packages via newScope in ./common/default.nix. 19 # This makes it possible to do 20 # `(llvmPackages.override { <someLlvmDependency> = bar; }).clang` and get 21 # an llvmPackages whose packages are overridden in an internally consistent way. 22 ... 23}@packageSetArgs: 24let 25 versions = { 26 "12.0.1".officialRelease.sha256 = "08s5w2db9imb2yaqsvxs6pg21csi1cf6wa35rf8x6q07mam7j8qv"; 27 "13.0.1".officialRelease.sha256 = "06dv6h5dmvzdxbif2s8njki6h32796v368dyb5945x8gjj72xh7k"; 28 "14.0.6".officialRelease.sha256 = "sha256-vffu4HilvYwtzwgq+NlS26m65DGbp6OSSne2aje1yJE="; 29 "15.0.7".officialRelease.sha256 = "sha256-wjuZQyXQ/jsmvy6y1aksCcEDXGBjuhpgngF3XQJ/T4s="; 30 "16.0.6".officialRelease.sha256 = "sha256-fspqSReX+VD+Nl/Cfq+tDcdPtnQPV1IRopNDfd5VtUs="; 31 "17.0.6".officialRelease.sha256 = "sha256-8MEDLLhocshmxoEBRSKlJ/GzJ8nfuzQ8qn0X/vLA+ag="; 32 "18.1.8".officialRelease.sha256 = "sha256-iiZKMRo/WxJaBXct9GdAcAT3cz9d9pnAcO1mmR6oPNE="; 33 "19.1.7".officialRelease.sha256 = "sha256-cZAB5vZjeTsXt9QHbP5xluWNQnAHByHtHnAhVDV0E6I="; 34 "20.1.5".officialRelease.sha256 = "sha256-WKfY+VvAsZEEc0xYgF6+MsXDXZz7haMU6bxqmUpaHuQ="; 35 "21.0.0-git".gitRelease = { 36 rev = "0004c37c1cd55c461bbf24b83165d11f49be1397"; 37 rev-version = "21.0.0-unstable-2025-05-25"; 38 sha256 = "sha256-n8WFnYNb46kK7MEh7XF/Psdbn+KJQFKs/LQBZxCklY4="; 39 }; 40 } // llvmVersions; 41 42 mkPackage = 43 { 44 name ? null, 45 officialRelease ? null, 46 gitRelease ? null, 47 monorepoSrc ? null, 48 version ? null, 49 }@args: 50 let 51 inherit 52 (import ./common/common-let.nix { 53 inherit lib; 54 inherit gitRelease officialRelease version; 55 }) 56 releaseInfo 57 ; 58 inherit (releaseInfo) release_version; 59 attrName = 60 args.name or (if (gitRelease != null) then "git" else lib.versions.major release_version); 61 in 62 lib.nameValuePair attrName ( 63 recurseIntoAttrs ( 64 callPackage ./common ( 65 { 66 inherit (stdenvAdapters) overrideCC; 67 buildLlvmTools = buildPackages."llvmPackages_${attrName}".tools; 68 targetLlvmLibraries = 69 # Allow overriding targetLlvmLibraries; this enables custom runtime builds. 70 packageSetArgs.targetLlvmLibraries or targetPackages."llvmPackages_${attrName}".libraries 71 or llvmPackages."${attrName}".libraries; 72 targetLlvm = targetPackages."llvmPackages_${attrName}".llvm or llvmPackages."${attrName}".llvm; 73 inherit 74 officialRelease 75 gitRelease 76 monorepoSrc 77 version 78 patchesFn 79 ; 80 } 81 // packageSetArgs # Allow overrides. 82 // { 83 stdenv = 84 if (lib.versions.major release_version == "13" && stdenv.cc.cc.isGNU or false) then 85 gcc12Stdenv 86 else 87 stdenv; # does not build with gcc13 88 } 89 ) 90 ) 91 ); 92 93 llvmPackages = lib.mapAttrs' (version: args: mkPackage (args // { inherit version; })) versions; 94in 95llvmPackages // { inherit mkPackage; }