From 79a567c883b1a999fb51f795f2c7c1a7cd6e0be4 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Fri, 17 Jan 2020 22:02:13 +0100 Subject: [PATCH] gcc5: remove Latest gcc5 release was in 2017[1], doesn't build with glibc 2.30[2]. [1] https://gcc.gnu.org/gcc-5/ [2] https://hydra.nixos.org/build/110408216 --- pkgs/development/compilers/gcc/5/default.nix | 328 ------------------- pkgs/top-level/all-packages.nix | 21 -- pkgs/top-level/static.nix | 1 - 3 files changed, 350 deletions(-) delete mode 100644 pkgs/development/compilers/gcc/5/default.nix diff --git a/pkgs/development/compilers/gcc/5/default.nix b/pkgs/development/compilers/gcc/5/default.nix deleted file mode 100644 index f68ddc81f81..00000000000 --- a/pkgs/development/compilers/gcc/5/default.nix +++ /dev/null @@ -1,328 +0,0 @@ -{ stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs -, langC ? true, langCC ? true, langFortran ? false -, langObjC ? stdenv.targetPlatform.isDarwin -, langObjCpp ? stdenv.targetPlatform.isDarwin -, langJava ? false -, langGo ? false -, profiledCompiler ? false -, staticCompiler ? false -, enableShared ? true -, enableLTO ? true -, texinfo ? null -, perl ? null # optional, for texi2pod (then pod2man); required for Java -, gmp, mpfr, libmpc, gettext, which -, libelf # optional, for link-time optimizations (LTO) -, isl ? null # optional, for the Graphite optimization framework. -, zlib ? null, boehmgc ? null -, zip ? null, unzip ? null, pkgconfig ? null -, gtk2 ? null, libart_lgpl ? null -, libX11 ? null, libXt ? null, libSM ? null, libICE ? null, libXtst ? null -, libXrender ? null, xorgproto ? null -, libXrandr ? null, libXi ? null -, x11Support ? langJava -, enableMultilib ? false -, enablePlugin ? stdenv.hostPlatform == stdenv.buildPlatform # Whether to support user-supplied plug-ins -, name ? "gcc" -, libcCross ? null -, threadsCross ? null # for MinGW -, crossStageStatic ? false -, # Strip kills static libs of other archs (hence no cross) - stripped ? stdenv.hostPlatform == stdenv.buildPlatform - && stdenv.targetPlatform == stdenv.hostPlatform -, gnused ? null -, cloog # unused; just for compat with gcc4, as we override the parameter on some places -, buildPackages -}: - -assert langJava -> zip != null && unzip != null - && zlib != null && boehmgc != null - && perl != null; # for `--enable-java-home' - -# LTO needs libelf and zlib. -assert libelf != null -> zlib != null; - -# Make sure we get GNU sed. -assert stdenv.hostPlatform.isDarwin -> gnused != null; - -# The go frontend is written in c++ -assert langGo -> langCC; - -# threadsCross is just for MinGW -assert threadsCross != null -> stdenv.targetPlatform.isWindows; - -with stdenv.lib; -with builtins; - -let majorVersion = "5"; - version = "${majorVersion}.5.0"; - - inherit (stdenv) buildPlatform hostPlatform targetPlatform; - - patches = - [ ../use-source-date-epoch.patch ] - ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch - ++ optional noSysDirs ../no-sys-dirs.patch - ++ optional langFortran ../gfortran-driving.patch - ++ optional (targetPlatform.libc == "musl") ../libgomp-dont-force-initial-exec.patch - ++ optional stdenv.hostPlatform.isMusl (fetchpatch { - url = https://raw.githubusercontent.com/richfelker/musl-cross-make/e84b1bd1fc12a3def33111ca6df522cd6e5ec361/patches/gcc-5.3.0/0001-musl.diff; - sha256 = "0pppbf8myi2kjhm3z3479ihn1cm60kycfv60gj8yy1bs0pl1qcfm"; - }) - ++ optional (!crossStageStatic && targetPlatform.isMinGW) (fetchpatch { - url = "https://raw.githubusercontent.com/lhmouse/MINGW-packages/${import ../common/mfcgthreads-patches-repo.nix}/mingw-w64-gcc-git/9000-gcc-${majorVersion}-branch-Added-mcf-thread-model-support-from-mcfgthread.patch"; - sha256 = "074bl5n27d1ksa31pvzj4vd8xd46r118k0w94gdv3s1vydg7mah0"; - }); - - javaEcj = fetchurl { - # The `$(top_srcdir)/ecj.jar' file is automatically picked up at - # `configure' time. - - # XXX: Eventually we might want to take it from upstream. - url = "ftp://sourceware.org/pub/java/ecj-4.3.jar"; - sha256 = "0jz7hvc0s6iydmhgh5h2m15yza7p2rlss2vkif30vm9y77m97qcx"; - }; - - # Antlr (optional) allows the Java `gjdoc' tool to be built. We want a - # binary distribution here to allow the whole chain to be bootstrapped. - javaAntlr = fetchurl { - url = https://www.antlr.org/download/antlr-4.4-complete.jar; - sha256 = "02lda2imivsvsis8rnzmbrbp8rh1kb8vmq4i67pqhkwz7lf8y6dz"; - }; - - xlibs = [ - libX11 libXt libSM libICE libXtst libXrender libXrandr libXi - xorgproto - ]; - - javaAwtGtk = langJava && x11Support; - - /* Cross-gcc settings (build == host != target) */ - crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt"; - stageNameAddon = if crossStageStatic then "stage-static" else "stage-final"; - crossNameAddon = optionalString (targetPlatform != hostPlatform) "${targetPlatform.config}-${stageNameAddon}-"; - -in - -# We need all these X libraries when building AWT with GTK. -assert x11Support -> (filter (x: x == null) ([ gtk2 libart_lgpl ] ++ xlibs)) == []; - -stdenv.mkDerivation ({ - pname = "${crossNameAddon}${name}${if stripped then "" else "-debug"}"; - inherit version; - - builder = ../builder.sh; - - src = fetchurl { - url = "mirror://gnu/gcc/gcc-${version}/gcc-${version}.tar.xz"; - sha256 = "11zd1hgzkli3b2v70qsm2hyqppngd4616qc96lmm9zl2kl9yl32k"; - }; - - inherit patches; - - outputs = [ "out" "lib" "man" "info" ]; - setOutputFlags = false; - NIX_NO_SELF_RPATH = true; - - libc_dev = stdenv.cc.libc_dev; - - hardeningDisable = [ "format" "pie" ]; - - # This should kill all the stdinc frameworks that gcc and friends like to - # insert into default search paths. - prePatch = stdenv.lib.optionalString hostPlatform.isDarwin '' - substituteInPlace gcc/config/darwin-c.c \ - --replace 'if (stdinc)' 'if (0)' - - substituteInPlace libgcc/config/t-slibgcc-darwin \ - --replace "-install_name @shlib_slibdir@/\$(SHLIB_INSTALL_NAME)" "-install_name $lib/lib/\$(SHLIB_INSTALL_NAME)" - - substituteInPlace libgfortran/configure \ - --replace "-install_name \\\$rpath/\\\$soname" "-install_name $lib/lib/\\\$soname" - ''; - - postPatch = - if targetPlatform != hostPlatform || stdenv.cc.libc != null then - # On NixOS, use the right path to the dynamic linker instead of - # `/lib/ld*.so'. - let - libc = if libcCross != null then libcCross else stdenv.cc.libc; - in - ( - '' echo "fixing the \`GLIBC_DYNAMIC_LINKER', \`UCLIBC_DYNAMIC_LINKER', and \`MUSL_DYNAMIC_LINKER' macros..." - for header in "gcc/config/"*-gnu.h "gcc/config/"*"/"*.h - do - grep -q _DYNAMIC_LINKER "$header" || continue - echo " fixing \`$header'..." - sed -i "$header" \ - -e 's|define[[:blank:]]*\([UCG]\+\)LIBC_DYNAMIC_LINKER\([0-9]*\)[[:blank:]]"\([^\"]\+\)"$|define \1LIBC_DYNAMIC_LINKER\2 "${libc.out}\3"|g' \ - -e 's|define[[:blank:]]*MUSL_DYNAMIC_LINKER\([0-9]*\)[[:blank:]]"\([^\"]\+\)"$|define MUSL_DYNAMIC_LINKER\1 "${libc.out}\2"|g' - done - '' - + stdenv.lib.optionalString (targetPlatform.libc == "musl") - '' - sed -i gcc/config/linux.h -e '1i#undef LOCAL_INCLUDE_DIR' - '' - ) - else null; - - inherit noSysDirs staticCompiler langJava crossStageStatic - libcCross crossMingw; - - depsBuildBuild = [ buildPackages.stdenv.cc ]; - nativeBuildInputs = [ texinfo which gettext ] - ++ (optional (perl != null) perl) - ++ (optional javaAwtGtk pkgconfig); - - # For building runtime libs - depsBuildTarget = - if hostPlatform == buildPlatform then [ - targetPackages.stdenv.cc.bintools # newly-built gcc will be used - ] else assert targetPlatform == hostPlatform; [ # build != host == target - stdenv.cc - ]; - - buildInputs = [ - gmp mpfr libmpc libelf - targetPackages.stdenv.cc.bintools # For linking code at run-time - ] ++ (optional (isl != null) isl) - ++ (optional (zlib != null) zlib) - ++ (optionals langJava [ boehmgc zip unzip ]) - ++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs)) - - # The builder relies on GNU sed (for instance, Darwin's `sed' fails with - # "-i may not be used with stdin"), and `stdenvNative' doesn't provide it. - ++ (optional hostPlatform.isDarwin gnused) - ; - - depsTargetTarget = optional (!crossStageStatic && threadsCross != null) threadsCross; - - NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl"; - - preConfigure = import ../common/pre-configure.nix { - inherit (stdenv) lib; - inherit version hostPlatform langJava langGo; - }; - - dontDisableStatic = true; - - # TODO(@Ericson2314): Always pass "--target" and always prefix. - configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target"; - - configureFlags = import ../common/configure-flags.nix { - inherit - stdenv - targetPackages - crossStageStatic libcCross - version - - gmp mpfr libmpc libelf isl - - enableLTO - enableMultilib - enablePlugin - enableShared - - langC - langCC - langFortran - langJava javaAwtGtk javaAntlr javaEcj - langGo - langObjC - langObjCpp - ; - }; - - targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null; - - buildFlags = optional - (targetPlatform == hostPlatform && hostPlatform == buildPlatform) - (if profiledCompiler then "profiledbootstrap" else "bootstrap"); - - dontStrip = !stripped; - - doCheck = false; # requires a lot of tools, causes a dependency cycle for stdenv - - installTargets = optional stripped "install-strip"; - - # https://gcc.gnu.org/install/specific.html#x86-64-x-solaris210 - ${if hostPlatform.system == "x86_64-solaris" then "CC" else null} = "gcc -m64"; - - # Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find the - # library headers and binaries, regarless of the language being compiled. - # - # Note: When building the Java AWT GTK peer, the build system doesn't honor - # `--with-gmp' et al., e.g., when building - # `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just add - # them to $CPATH and $LIBRARY_PATH in this case. - # - # Likewise, the LTO code doesn't find zlib. - # - # Cross-compiling, we need gcc not to read ./specs in order to build the g++ - # compiler (after the specs for the cross-gcc are created). Having - # LIBRARY_PATH= makes gcc read the specs from ., and the build breaks. - - CPATH = optionals (targetPlatform == hostPlatform) (makeSearchPathOutput "dev" "include" ([] - ++ optional (zlib != null) zlib - ++ optional langJava boehmgc - ++ optionals javaAwtGtk xlibs - ++ optionals javaAwtGtk [ gmp mpfr ] - )); - - LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath ([] - ++ optional (zlib != null) zlib - ++ optional langJava boehmgc - ++ optionals javaAwtGtk xlibs - ++ optionals javaAwtGtk [ gmp mpfr ] - )); - - inherit - (import ../common/extra-target-flags.nix { - inherit stdenv crossStageStatic libcCross threadsCross; - }) - EXTRA_TARGET_FLAGS - EXTRA_TARGET_LDFLAGS - ; - - passthru = { - inherit langC langCC langObjC langObjCpp langFortran langGo version; - isGNU = true; - }; - - enableParallelBuilding = true; - inherit enableMultilib; - - inherit (stdenv) is64bit; - - meta = { - homepage = https://gcc.gnu.org/; - license = stdenv.lib.licenses.gpl3Plus; # runtime support libraries are typically LGPLv3+ - description = "GNU Compiler Collection, version ${version}" - + (if stripped then "" else " (with debugging info)"); - - longDescription = '' - The GNU Compiler Collection includes compiler front ends for C, C++, - Objective-C, Fortran, OpenMP for C/C++/Fortran, Java, and Ada, as well - as libraries for these languages (libstdc++, libgcj, libgomp,...). - - GCC development is a part of the GNU Project, aiming to improve the - compiler used in the GNU system including the GNU/Linux variant. - ''; - - maintainers = with stdenv.lib.maintainers; [ peti ]; - - platforms = - stdenv.lib.platforms.linux ++ - stdenv.lib.platforms.freebsd ++ - stdenv.lib.platforms.illumos ++ - stdenv.lib.platforms.darwin; - badPlatforms = [ "x86_64-darwin" ]; - }; -} - -// optionalAttrs (targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt" && crossStageStatic) { - makeFlags = [ "all-gcc" "all-target-libgcc" ]; - installTargets = "install-gcc install-target-libgcc"; -} - -// optionalAttrs (enableMultilib) { dontMoveLib64 = true; } -) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 45a36cddcd2..af29f8be1e7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -7949,7 +7949,6 @@ in }; gcc49Stdenv = overrideCC gccStdenv buildPackages.gcc49; - gcc5Stdenv = overrideCC gccStdenv buildPackages.gcc5; gcc6Stdenv = overrideCC gccStdenv buildPackages.gcc6; gcc7Stdenv = overrideCC gccStdenv buildPackages.gcc7; gcc8Stdenv = overrideCC gccStdenv buildPackages.gcc8; @@ -8067,18 +8066,6 @@ in cloog = if !stdenv.isDarwin then cloog_0_18_0 else null; })); - gcc5 = lowPrio (wrapCC (callPackage ../development/compilers/gcc/5 { - inherit noSysDirs; - - # PGO seems to speed up compilation by gcc by ~10%, see #445 discussion - profiledCompiler = with stdenv; (!isDarwin && (isi686 || isx86_64)); - - libcCross = if stdenv.targetPlatform != stdenv.buildPlatform then libcCross else null; - threadsCross = if stdenv.targetPlatform != stdenv.buildPlatform then threadsCross else null; - - isl = if !stdenv.isDarwin then isl_0_14 else null; - })); - gcc6 = lowPrio (wrapCC (callPackage ../development/compilers/gcc/6 { inherit noSysDirs; @@ -8157,14 +8144,6 @@ in profiledCompiler = false; }); - gfortran5 = wrapCC (gcc5.cc.override { - name = "gfortran"; - langFortran = true; - langCC = false; - langC = false; - profiledCompiler = false; - }); - gfortran6 = wrapCC (gcc6.cc.override { name = "gfortran"; langFortran = true; diff --git a/pkgs/top-level/static.nix b/pkgs/top-level/static.nix index 3dd539e03a7..0de1db7d99b 100644 --- a/pkgs/top-level/static.nix +++ b/pkgs/top-level/static.nix @@ -88,7 +88,6 @@ self: super: let in { stdenv = foldl (flip id) super.stdenv staticAdapters; gcc49Stdenv = foldl (flip id) super.gcc49Stdenv staticAdapters; - gcc5Stdenv = foldl (flip id) super.gcc5Stdenv staticAdapters; gcc6Stdenv = foldl (flip id) super.gcc6Stdenv staticAdapters; gcc7Stdenv = foldl (flip id) super.gcc7Stdenv staticAdapters; gcc8Stdenv = foldl (flip id) super.gcc8Stdenv staticAdapters;