nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at python-updates 235 lines 6.2 kB view raw
1{ 2 lib, 3 newScope, 4 stdenv, 5 overrideCC, 6 fetchgit, 7 fetchurl, 8 gitRelease ? null, 9 officialRelease ? null, 10 monorepoSrc ? null, 11 version ? null, 12 patchesFn ? lib.id, 13 wrapCCWith, 14 binutilsNoLibc, 15 binutils, 16 buildGccPackages, 17 targetGccPackages, 18 makeScopeWithSplicing', 19 otherSplices, 20 ... 21}@args: 22 23assert lib.assertMsg (lib.xor (gitRelease != null) (officialRelease != null)) ( 24 "must specify `gitRelease` or `officialRelease`" 25 + (lib.optionalString (gitRelease != null) " not both") 26); 27 28let 29 monorepoSrc' = monorepoSrc; 30 31 metadata = rec { 32 inherit 33 (import ./common-let.nix { 34 inherit (args) 35 lib 36 gitRelease 37 officialRelease 38 version 39 ; 40 }) 41 releaseInfo 42 ; 43 inherit (releaseInfo) release_version version; 44 inherit 45 (import ./common-let.nix { 46 inherit 47 lib 48 fetchgit 49 fetchurl 50 release_version 51 gitRelease 52 officialRelease 53 monorepoSrc' 54 version 55 ; 56 }) 57 gcc_meta 58 monorepoSrc 59 ; 60 src = monorepoSrc; 61 versionDir = 62 (toString ../.) + "/${if (gitRelease != null) then "git" else lib.versions.major release_version}"; 63 getVersionFile = 64 p: 65 builtins.path { 66 name = baseNameOf p; 67 path = 68 let 69 patches = args.patchesFn (import ./patches.nix); 70 71 constraints = patches."${p}" or null; 72 matchConstraint = 73 { 74 before ? null, 75 after ? null, 76 path, 77 }: 78 let 79 check = fn: value: if value == null then true else fn release_version value; 80 matchBefore = check lib.versionOlder before; 81 matchAfter = check lib.versionAtLeast after; 82 in 83 matchBefore && matchAfter; 84 85 patchDir = 86 toString 87 ( 88 if constraints == null then 89 { path = metadata.versionDir; } 90 else 91 (lib.findFirst matchConstraint { path = metadata.versionDir; } constraints) 92 ).path; 93 in 94 "${patchDir}/${p}"; 95 }; 96 }; 97in 98makeScopeWithSplicing' { 99 inherit otherSplices; 100 f = 101 gccPackages: 102 let 103 callPackage = gccPackages.newScope (args // metadata); 104 in 105 { 106 stdenv = overrideCC stdenv gccPackages.gcc; 107 108 gcc-unwrapped = callPackage ./gcc { 109 bintools = binutils; 110 }; 111 112 libbacktrace = callPackage ./libbacktrace { }; 113 libiberty = callPackage ./libiberty { }; 114 libsanitizer = callPackage ./libsanitizer { }; 115 libquadmath = callPackage ./libquadmath { }; 116 117 gfortran-unwrapped = gccPackages.gcc-unwrapped.override { 118 stdenv = overrideCC stdenv buildGccPackages.gcc; 119 langFortran = true; 120 }; 121 122 gfortran = wrapCCWith { 123 cc = gccPackages.gfortran-unwrapped; 124 libcxx = targetGccPackages.libstdcxx; 125 bintools = binutils; 126 extraPackages = [ 127 targetGccPackages.libgcc 128 ]; 129 nixSupport.cc-cflags = [ 130 "-B${targetGccPackages.libgcc}/lib" 131 "-B${targetGccPackages.libssp}/lib" 132 "-B${targetGccPackages.libatomic}/lib" 133 "-B${targetGccPackages.libgfortran}/lib/" 134 ]; 135 }; 136 137 gfortranNoLibgfortran = wrapCCWith { 138 cc = gccPackages.gfortran-unwrapped; 139 libcxx = targetGccPackages.libstdcxx; 140 bintools = binutils; 141 extraPackages = [ 142 targetGccPackages.libgcc 143 ]; 144 nixSupport.cc-cflags = [ 145 "-B${targetGccPackages.libgcc}/lib" 146 "-B${targetGccPackages.libssp}/lib" 147 "-B${targetGccPackages.libatomic}/lib" 148 ]; 149 }; 150 151 gcc = wrapCCWith { 152 cc = gccPackages.gcc-unwrapped; 153 libcxx = targetGccPackages.libstdcxx; 154 bintools = binutils; 155 extraPackages = [ 156 targetGccPackages.libgcc 157 ]; 158 nixSupport.cc-cflags = [ 159 "-B${targetGccPackages.libgcc}/lib" 160 "-B${targetGccPackages.libssp}/lib" 161 "-B${targetGccPackages.libatomic}/lib" 162 ]; 163 }; 164 165 gccNoLibgcc = wrapCCWith { 166 cc = gccPackages.gcc-unwrapped; 167 libcxx = null; 168 bintools = binutilsNoLibc; 169 extraPackages = [ ]; 170 nixSupport.cc-cflags = [ 171 "-nostartfiles" 172 ]; 173 }; 174 175 libgcc = callPackage ./libgcc { 176 stdenv = overrideCC stdenv buildGccPackages.gccNoLibgcc; 177 }; 178 179 gccWithLibc = wrapCCWith { 180 cc = gccPackages.gcc-unwrapped; 181 libcxx = null; 182 bintools = binutils; 183 extraPackages = [ 184 targetGccPackages.libgcc 185 ]; 186 nixSupport.cc-cflags = [ 187 "-B${targetGccPackages.libgcc}/lib" 188 ]; 189 }; 190 191 libssp = callPackage ./libssp { 192 stdenv = overrideCC stdenv buildGccPackages.gccWithLibc; 193 }; 194 195 gccWithLibssp = wrapCCWith { 196 cc = gccPackages.gcc-unwrapped; 197 libcxx = null; 198 bintools = binutils; 199 extraPackages = [ 200 targetGccPackages.libgcc 201 ]; 202 nixSupport.cc-cflags = [ 203 "-B${targetGccPackages.libgcc}/lib" 204 "-B${targetGccPackages.libssp}/lib" 205 ]; 206 }; 207 208 libatomic = callPackage ./libatomic { 209 stdenv = overrideCC stdenv buildGccPackages.gccWithLibssp; 210 }; 211 212 gccWithLibatomic = wrapCCWith { 213 cc = gccPackages.gcc-unwrapped; 214 libcxx = null; 215 bintools = binutils; 216 extraPackages = [ 217 targetGccPackages.libgcc 218 ]; 219 nixSupport.cc-cflags = [ 220 "-B${targetGccPackages.libgcc}/lib" 221 "-B${targetGccPackages.libssp}/lib" 222 "-B${targetGccPackages.libatomic}/lib" 223 ]; 224 }; 225 226 libgfortran = callPackage ./libgfortran { 227 stdenv = overrideCC stdenv buildGccPackages.gcc; 228 gfortran = buildGccPackages.gfortranNoLibgfortran; 229 }; 230 231 libstdcxx = callPackage ./libstdcxx { 232 stdenv = overrideCC stdenv buildGccPackages.gccWithLibatomic; 233 }; 234 }; 235}