nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at python-updates 234 lines 7.1 kB view raw
1{ 2 lib, 3 stdenv, 4 gcc_meta, 5 release_version, 6 version, 7 getVersionFile, 8 monorepoSrc ? null, 9 fetchpatch, 10 autoreconfHook269, 11 buildGccPackages, 12 buildPackages, 13 which, 14 python3, 15}: 16stdenv.mkDerivation (finalAttrs: { 17 pname = "libgcc"; 18 inherit version; 19 20 src = monorepoSrc; 21 22 outputs = [ 23 "out" 24 "dev" 25 ]; 26 27 strictDeps = true; 28 29 depsBuildBuild = [ 30 buildPackages.stdenv.cc 31 buildGccPackages.libiberty 32 ]; 33 34 nativeBuildInputs = [ 35 autoreconfHook269 36 which 37 python3 38 ]; 39 40 patches = [ 41 (fetchpatch { 42 name = "delete-MACHMODE_H.patch"; 43 url = "https://github.com/gcc-mirror/gcc/commit/493aae4b034d62054d5e7e54dc06cd9a8be54e29.diff"; 44 hash = "sha256-oEk0lnI96RlpALWpb7J+GnrtgQsFVqDO57I/zjiqqTk="; 45 }) 46 (fetchpatch { 47 name = "custom-threading-model.patch"; 48 url = "https://github.com/gcc-mirror/gcc/commit/e5d853bbe9b05d6a00d98ad236f01937303e40c4.diff"; 49 hash = "sha256-92LIttIXdh12/lRhivb2JTPpqUmGBRn+uKmR5pzuveo="; 50 includes = [ 51 "config/*" 52 "libgcc/configure.ac" 53 ]; 54 }) 55 (fetchpatch { 56 name = "no-pie-cflags.patch"; 57 url = "https://github.com/gcc-mirror/gcc/commit/77144dd3b6736e0166156bb509590d924375a4f1.diff"; 58 hash = "sha256-QlxlTkWAK1dB7JiU5wz2iOW24gj3bFaeBpwb90oWwns="; 59 includes = [ 60 "gcc/Makefile.in" 61 "gcc/configure.ac" 62 "libgcc/Makefile.in" 63 "libgcc/configure.ac" 64 ]; 65 }) 66 (fetchpatch { 67 name = "no-target-system-root.patch"; 68 url = "https://github.com/gcc-mirror/gcc/commit/9947930b7ae923010c5061fd8fa6b1ec4f22f161.diff"; 69 hash = "sha256-BZmpHpJuuyDmQMwpQhSgCZO0Rg7kXt8rTiJAT+e0sUw="; 70 }) 71 (fetchpatch { 72 name = "regular-libdir-includedir.patch"; 73 url = "https://inbox.sourceware.org/gcc-patches/20250717174911.1536129-1-git@JohnEricson.me/raw"; 74 hash = "sha256-Cn7rvg1FI7H/26GzSe4pv5VW/gvwbwGqivAqEeawkwk="; 75 }) 76 (getVersionFile "libgcc/force-regular-dirs.patch") 77 ]; 78 79 autoreconfFlags = "--install --force --verbose . libgcc"; 80 81 postUnpack = '' 82 mkdir -p ./build 83 buildRoot=$(readlink -e "./build") 84 ''; 85 86 postPatch = '' 87 sourceRoot=$(readlink -e "./libgcc") 88 ''; 89 90 enableParallelBuilding = true; 91 92 preConfigure = '' 93 cd "$buildRoot" 94 95 mkdir -p build-${stdenv.buildPlatform.config}/libiberty/ 96 cd build-${stdenv.buildPlatform.config}/libiberty/ 97 ln -s ${buildGccPackages.libiberty}/lib/libiberty.a ./ 98 99 mkdir -p "$buildRoot/gcc" 100 cd "$buildRoot/gcc" 101 102 ( 103 export AS_FOR_BUILD=${lib.getExe' buildPackages.stdenv.cc "$(basename $AS_FOR_BUILD)"} 104 export CC_FOR_BUILD=${lib.getExe' buildPackages.stdenv.cc "$(basename $CC_FOR_BUILD)"} 105 export CPP_FOR_BUILD=${lib.getExe' buildPackages.stdenv.cc "$(basename $CPP_FOR_BUILD)"} 106 export CXX_FOR_BUILD=${lib.getExe' buildPackages.stdenv.cc "$(basename $CXX_FOR_BUILD)"} 107 export LD_FOR_BUILD=${lib.getExe' buildPackages.stdenv.cc.bintools "$(basename $LD_FOR_BUILD)"} 108 109 export AS=$AS_FOR_BUILD 110 export CC=$CC_FOR_BUILD 111 export CPP=$CPP_FOR_BUILD 112 export CXX=$CXX_FOR_BUILD 113 export LD=$LD_FOR_BUILD 114 115 export AS_FOR_TARGET=${lib.getExe' stdenv.cc "$(basename $AS)"} 116 export CC_FOR_TARGET=${lib.getExe' stdenv.cc "$(basename $CC)"} 117 export CPP_FOR_TARGET=${lib.getExe' stdenv.cc "$(basename $CPP)"} 118 export LD_FOR_TARGET=${lib.getExe' stdenv.cc.bintools "$(basename $LD)"} 119 120 export NIX_CFLAGS_COMPILE_FOR_BUILD+=' -DGENERATOR_FILE=1' 121 122 "$sourceRoot/../gcc/configure" $topLevelConfigureFlags 123 124 sed -e 's,libgcc.mvars:.*$,libgcc.mvars:,' -i Makefile 125 126 make \ 127 config.h \ 128 libgcc.mvars \ 129 tconfig.h \ 130 tm.h \ 131 options.h \ 132 insn-constants.h \ 133 version.h 134 ) 135 mkdir -p "$buildRoot/gcc/include" 136 137 mkdir -p "$buildRoot/gcc/${stdenv.hostPlatform.config}/libgcc" 138 cd "$buildRoot/gcc/${stdenv.hostPlatform.config}/libgcc" 139 configureScript=$sourceRoot/configure 140 chmod +x "$configureScript" 141 142 export AS_FOR_BUILD=${lib.getExe' buildPackages.stdenv.cc "$(basename $AS_FOR_BUILD)"} 143 export CC_FOR_BUILD=${lib.getExe' buildPackages.stdenv.cc "$(basename $CC_FOR_BUILD)"} 144 export CPP_FOR_BUILD=${lib.getExe' buildPackages.stdenv.cc "$(basename $CPP_FOR_BUILD)"} 145 export CXX_FOR_BUILD=${lib.getExe' buildPackages.stdenv.cc "$(basename $CXX_FOR_BUILD)"} 146 export LD_FOR_BUILD=${lib.getExe' buildPackages.stdenv.cc.bintools "$(basename $LD_FOR_BUILD)"} 147 148 export AS=${lib.getExe' stdenv.cc "$(basename $AS)"} 149 export CC=${lib.getExe' stdenv.cc "$(basename $CC)"} 150 export CPP=${lib.getExe' stdenv.cc "$(basename $CPP)"} 151 export CXX=${lib.getExe' stdenv.cc "$(basename $CXX)"} 152 export LD=${lib.getExe' stdenv.cc.bintools "$(basename $LD)"} 153 154 export AS_FOR_TARGET=${lib.getExe' stdenv.cc "$(basename $AS_FOR_TARGET)"} 155 export CC_FOR_TARGET=${lib.getExe' stdenv.cc "$(basename $CC_FOR_TARGET)"} 156 export CPP_FOR_TARGET=${lib.getExe' stdenv.cc "$(basename $CPP_FOR_TARGET)"} 157 export LD_FOR_TARGET=${lib.getExe' stdenv.cc.bintools "$(basename $LD_FOR_TARGET)"} 158 '' 159 + lib.optionalString stdenv.hostPlatform.isMusl '' 160 NIX_CFLAGS_COMPILE_OLD=$NIX_CFLAGS_COMPILE 161 NIX_CFLAGS_COMPILE+=' -isystem ${stdenv.cc.cc}/lib/gcc/${stdenv.hostPlatform.config}/${version}/include-fixed' 162 ''; 163 164 topLevelConfigureFlags = [ 165 "--build=${stdenv.buildPlatform.config}" 166 "--host=${stdenv.buildPlatform.config}" 167 "--target=${stdenv.hostPlatform.config}" 168 169 "--disable-bootstrap" 170 "--disable-multilib" 171 "--enable-languages=c" 172 173 "--disable-fixincludes" 174 "--disable-intl" 175 "--disable-lto" 176 "--disable-libatomic" 177 "--disable-libbacktrace" 178 "--disable-libcpp" 179 "--disable-libssp" 180 "--disable-libquadmath" 181 "--disable-libgomp" 182 "--disable-libvtv" 183 "--disable-vtable-verify" 184 185 "--with-system-zlib" 186 ] 187 ++ 188 lib.optional (!stdenv.hostPlatform.isRiscV) 189 # RISC-V does not like it being empty 190 "--with-multilib-list=" 191 ++ 192 lib.optional (stdenv.hostPlatform.libc == "glibc") 193 # Cheat and use previous stage's glibc to avoid infinite recursion. As 194 # of GCC 11, libgcc only cares if the version is greater than 2.19, 195 # which is quite ancient, so this little lie should be fine. 196 "--with-glibc-version=${buildPackages.glibc.version}"; 197 198 configurePlatforms = [ 199 "build" 200 "host" 201 ]; 202 203 configureFlags = [ 204 "--disable-dependency-tracking" 205 "gcc_cv_target_thread_file=single" 206 # $CC cannot link binaries, let alone run then 207 "cross_compiling=true" 208 # Do not have dynamic linker without libc 209 "--enable-static" 210 "--disable-shared" 211 ]; 212 213 # Set the variable back the way it was, see corresponding code in 214 # `preConfigure`. 215 postConfigure = lib.optionalString stdenv.hostPlatform.isMusl '' 216 NIX_CFLAGS_COMPILE=$NIX_CFLAGS_COMPILE_OLD 217 ''; 218 219 makeFlags = [ "MULTIBUILDTOP:=../" ]; 220 221 postInstall = '' 222 install -c -m 644 gthr-default.h "$dev/include" 223 ''; 224 225 doCheck = true; 226 227 passthru = { 228 isGNU = true; 229 }; 230 231 meta = gcc_meta // { 232 homepage = "https://gcc.gnu.org/"; 233 }; 234})