From 659363fb401a9916f8aa92f297f96c0584432dc7 Mon Sep 17 00:00:00 2001 From: Patrick Hilhorst Date: Wed, 2 May 2018 18:32:50 +0200 Subject: [PATCH 1/9] gcc8: init at 8.1.0 --- pkgs/development/compilers/gcc/8/default.nix | 525 ++++++++++++++++++ .../compilers/gcc/8/riscv-no-relax.patch | 109 ++++ .../gcc/8/riscv-pthread-reentrant.patch | 13 + 3 files changed, 647 insertions(+) create mode 100644 pkgs/development/compilers/gcc/8/default.nix create mode 100644 pkgs/development/compilers/gcc/8/riscv-no-relax.patch create mode 100644 pkgs/development/compilers/gcc/8/riscv-pthread-reentrant.patch diff --git a/pkgs/development/compilers/gcc/8/default.nix b/pkgs/development/compilers/gcc/8/default.nix new file mode 100644 index 00000000000..d5e15287db0 --- /dev/null +++ b/pkgs/development/compilers/gcc/8/default.nix @@ -0,0 +1,525 @@ +{ stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs +, langC ? true, langCC ? true, langFortran ? false +, langObjC ? targetPlatform.isDarwin +, langObjCpp ? targetPlatform.isDarwin +, langJava ? false +, langGo ? false +, profiledCompiler ? false +, staticCompiler ? false +, enableShared ? 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, xproto ? null, renderproto ? null, xextproto ? null +, libXrandr ? null, libXi ? null, inputproto ? null, randrproto ? null +, x11Support ? langJava +, enableMultilib ? false +, enablePlugin ? hostPlatform == buildPlatform # Whether to support user-supplied plug-ins +, name ? "gcc" +, libcCross ? null +, crossStageStatic ? false +, libpthread ? null, libpthreadCross ? null # required for GNU/Hurd +, stripped ? true +, gnused ? null +, cloog # unused; just for compat with gcc4, as we override the parameter on some places +, darwin ? null +, buildPlatform, hostPlatform, targetPlatform +, 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 hostPlatform.isDarwin -> gnused != null; + +# The go frontend is written in c++ +assert langGo -> langCC; + +with stdenv.lib; +with builtins; + +let version = "8.1.0"; + + # Whether building a cross-compiler for GNU/Hurd. + crossGNU = targetPlatform != hostPlatform && targetPlatform.config == "i586-pc-gnu"; + + enableParallelBuilding = true; + + patches = + [ # https://gcc.gnu.org/ml/gcc-patches/2018-02/msg00633.html + /* ./riscv-pthread-reentrant.patch */ # TODO: is this needed? + # https://gcc.gnu.org/ml/gcc-patches/2018-03/msg00297.html + /* ./riscv-no-relax.patch */ + ] + ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch + ++ optional noSysDirs ../no-sys-dirs.patch + /* ++ optional (hostPlatform != buildPlatform) (fetchpatch { # XXX: Refine when this should be applied + url = "https://git.busybox.net/buildroot/plain/package/gcc/7.1.0/0900-remove-selftests.patch?id=11271540bfe6adafbc133caf6b5b902a816f5f02"; + sha256 = "0mrvxsdwip2p3l17dscpc1x8vhdsciqw1z5q9i6p5g9yg1cqnmgs"; + }) */ + ++ optional langFortran ../gfortran-driving.patch; + + 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 = http://www.antlr.org/download/antlr-4.4-complete.jar; + sha256 = "02lda2imivsvsis8rnzmbrbp8rh1kb8vmq4i67pqhkwz7lf8y6dz"; + }; + + xlibs = [ + libX11 libXt libSM libICE libXtst libXrender libXrandr libXi + xproto renderproto xextproto inputproto randrproto + ]; + + javaAwtGtk = langJava && x11Support; + + /* Platform flags */ + platformFlags = let + gccArch = targetPlatform.platform.gcc.arch or null; + gccCpu = targetPlatform.platform.gcc.cpu or null; + gccAbi = targetPlatform.platform.gcc.abi or null; + gccFpu = targetPlatform.platform.gcc.fpu or null; + gccFloat = targetPlatform.platform.gcc.float or null; + gccMode = targetPlatform.platform.gcc.mode or null; + in + optional (gccArch != null) "--with-arch=${gccArch}" ++ + optional (gccCpu != null) "--with-cpu=${gccCpu}" ++ + optional (gccAbi != null) "--with-abi=${gccAbi}" ++ + optional (gccFpu != null) "--with-fpu=${gccFpu}" ++ + optional (gccFloat != null) "--with-float=${gccFloat}" ++ + optional (gccMode != null) "--with-mode=${gccMode}"; + + /* Cross-gcc settings (build == host != target) */ + crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt"; + crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem"; + crossConfigureFlags = + # Ensure that -print-prog-name is able to find the correct programs. + [ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" + "--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++ + (if crossMingw && crossStageStatic then [ + "--with-headers=${libcCross}/include" + "--with-gcc" + "--with-gnu-as" + "--with-gnu-ld" + "--with-gnu-ld" + "--disable-shared" + "--disable-nls" + "--disable-debug" + "--enable-sjlj-exceptions" + "--enable-threads=win32" + "--disable-win32-registry" + ] else if crossStageStatic then [ + "--disable-libssp" + "--disable-nls" + "--without-headers" + "--disable-threads" + "--disable-libgomp" + "--disable-libquadmath" + "--disable-shared" + "--disable-libatomic" # libatomic requires libc + "--disable-decimal-float" # libdecnumber requires libc + # maybe only needed on musl, PATH_MAX + # https://github.com/richfelker/musl-cross-make/blob/0867cdf300618d1e3e87a0a939fa4427207ad9d7/litecross/Makefile#L62 + "--disable-libmpx" + ] else [ + (if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot" + else "--with-headers=${getDev libcCross}/include") + "--enable-__cxa_atexit" + "--enable-long-long" + ] ++ + (if crossMingw then [ + "--enable-threads=win32" + "--enable-sjlj-exceptions" + "--enable-hash-synchronization" + "--enable-libssp" + "--disable-nls" + "--with-dwarf2" + # To keep ABI compatibility with upstream mingw-w64 + "--enable-fully-dynamic-string" + ] else + optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [ + # libsanitizer requires netrom/netrom.h which is not + # available in uclibc. + "--disable-libsanitizer" + # In uclibc cases, libgomp needs an additional '-ldl' + # and as I don't know how to pass it, I disable libgomp. + "--disable-libgomp" + # musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865 + "--disable-libmpx" + ] ++ [ + "--enable-threads=posix" + "--enable-nls" + "--disable-decimal-float" # No final libdecnumber (it may work only in 386) + ])); + stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final"; + crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else ""; + + bootstrap = targetPlatform == hostPlatform; + +in + +# We need all these X libraries when building AWT with GTK+. +assert x11Support -> (filter (x: x == null) ([ gtk2 libart_lgpl ] ++ xlibs)) == []; + +stdenv.mkDerivation ({ + name = "${name}${if stripped then "" else "-debug"}-${version}" + crossNameAddon; + + builder = ../builder.sh; + + src = fetchurl { + url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz"; + /* sha256 = "0p71bij6bfhzyrs8676a8jmpjsfz392s2rg862sdnsk30jpacb43"; */ + sha256 = "0lxil8x0jjx7zbf90cy1rli650akaa6hpk8wk8s62vk2jbwnc60x"; + }; + + inherit patches; + + outputs = [ "out" "lib" "man" "info" ]; + setOutputFlags = false; + NIX_NO_SELF_RPATH = true; + + libc_dev = stdenv.cc.libc_dev; + + hardeningDisable = [ "format" ]; + + # 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 = '' + configureScripts=$(find . -name configure) + for configureScript in $configureScripts; do + patchShebangs $configureScript + done + '' + ( + if (hostPlatform.isHurd + || (libcCross != null # e.g., building `gcc.crossDrv' + && libcCross ? crossConfig + && libcCross.crossConfig == "i586-pc-gnu") + || (crossGNU && libcCross != null)) + then + # On GNU/Hurd glibc refers to Hurd & Mach headers and libpthread is not + # in glibc, so add the right `-I' flags to the default spec string. + assert libcCross != null -> libpthreadCross != null; + let + libc = if libcCross != null then libcCross else stdenv.glibc; + gnu_h = "gcc/config/gnu.h"; + extraCPPDeps = + libc.propagatedBuildInputs + ++ stdenv.lib.optional (libpthreadCross != null) libpthreadCross + ++ stdenv.lib.optional (libpthread != null) libpthread; + extraCPPSpec = + concatStrings (intersperse " " + (map (x: "-I${x.dev or x}/include") extraCPPDeps)); + extraLibSpec = + if libpthreadCross != null + then "-L${libpthreadCross}/lib ${libpthreadCross.TARGET_LDFLAGS}" + else "-L${libpthread}/lib"; + in + '' echo "augmenting \`CPP_SPEC' in \`${gnu_h}' with \`${extraCPPSpec}'..." + sed -i "${gnu_h}" \ + -es'|CPP_SPEC *"\(.*\)$|CPP_SPEC "${extraCPPSpec} \1|g' + + echo "augmenting \`LIB_SPEC' in \`${gnu_h}' with \`${extraLibSpec}'..." + sed -i "${gnu_h}" \ + -es'|LIB_SPEC *"\(.*\)$|LIB_SPEC "${extraLibSpec} \1|g' + + echo "setting \`NATIVE_SYSTEM_HEADER_DIR' and \`STANDARD_INCLUDE_DIR' to \`${libc.dev}/include'..." + sed -i "${gnu_h}" \ + -es'|#define STANDARD_INCLUDE_DIR.*$|#define STANDARD_INCLUDE_DIR "${libc.dev}/include"|g' + '' + else 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 ""); + + # TODO(@Ericson2314): Make passthru instead. Weird to avoid mass rebuild, + crossStageStatic = targetPlatform == hostPlatform || crossStageStatic; + inherit noSysDirs staticCompiler langJava + 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)) + ++ (optionals (targetPlatform != hostPlatform) [targetPackages.stdenv.cc.bintools]) + + # 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) + ++ (optional hostPlatform.isDarwin targetPackages.stdenv.cc.bintools) + ; + + NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl"; + + preConfigure = stdenv.lib.optionalString (hostPlatform.isSunOS && hostPlatform.is64bit) '' + export NIX_LDFLAGS=`echo $NIX_LDFLAGS | sed -e s~$prefix/lib~$prefix/lib/amd64~g` + export LDFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $LDFLAGS_FOR_TARGET" + export CXXFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CXXFLAGS_FOR_TARGET" + export CFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CFLAGS_FOR_TARGET" + ''; + + dontDisableStatic = true; + + # TODO(@Ericson2314): Always pass "--target" and always prefix. + configurePlatforms = + # TODO(@Ericson2314): Figure out what's going wrong with Arm + if buildPlatform == hostPlatform && hostPlatform == targetPlatform && targetPlatform.isAarch32 + then [] + else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target"; + + configureFlags = + # Basic dependencies + [ + "--with-gmp-include=${gmp.dev}/include" + "--with-gmp-lib=${gmp.out}/lib" + "--with-mpfr-include=${mpfr.dev}/include" + "--with-mpfr-lib=${mpfr.out}/lib" + "--with-mpc=${libmpc}" + ] ++ + optional (libelf != null) "--with-libelf=${libelf}" ++ + optional (!(crossMingw && crossStageStatic)) + "--with-native-system-header-dir=${getDev stdenv.cc.libc}/include" ++ + + # Basic configuration + [ + "--enable-lto" + "--disable-libstdcxx-pch" + "--without-included-gettext" + "--with-system-zlib" + "--enable-static" + "--enable-languages=${ + concatStrings (intersperse "," + ( optional langC "c" + ++ optional langCC "c++" + ++ optional langFortran "fortran" + ++ optional langJava "java" + ++ optional langGo "go" + ++ optional langObjC "objc" + ++ optional langObjCpp "obj-c++" + ++ optionals crossDarwin [ "objc" "obj-c++" ] + ) + ) + }" + ] ++ + + (if enableMultilib + then ["--enable-multilib" "--disable-libquadmath"] + else ["--disable-multilib"]) ++ + optional (!enableShared) "--disable-shared" ++ + (if enablePlugin + then ["--enable-plugin"] + else ["--disable-plugin"]) ++ + + # Optional features + optional (isl != null) "--with-isl=${isl}" ++ + + # Java options + optionals langJava [ + "--with-ecj-jar=${javaEcj}" + + # Follow Sun's layout for the convenience of IcedTea/OpenJDK. See + # . + "--enable-java-home" + "--with-java-home=\${prefix}/lib/jvm/jre" + ] ++ + optional javaAwtGtk "--enable-java-awt=gtk" ++ + optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}" ++ + + + platformFlags ++ + optional (targetPlatform != hostPlatform) crossConfigureFlags ++ + optional (!bootstrap) "--disable-bootstrap" ++ + + # Platform-specific flags + optional (targetPlatform == hostPlatform && targetPlatform.isi686) "--with-arch=i686" ++ + optionals hostPlatform.isSunOS [ + "--enable-long-long" "--enable-libssp" "--enable-threads=posix" "--disable-nls" "--enable-__cxa_atexit" + # On Illumos/Solaris GNU as is preferred + "--with-gnu-as" "--without-gnu-ld" + ] + ++ optional (targetPlatform == hostPlatform && targetPlatform.libc == "musl") "--disable-libsanitizer" + ; + + targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null; + + buildFlags = + optional bootstrap (if profiledCompiler then "profiledbootstrap" else "bootstrap"); + + installTargets = + if stripped + then "install-strip" + else "install"; + + /* For cross-built gcc (build != host == target) */ + crossAttrs = { + dontStrip = true; + buildFlags = ""; + }; + + # http://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 ] + ++ optional (libpthread != null) libpthread + ++ optional (libpthreadCross != null) libpthreadCross + + # On GNU/Hurd glibc refers to Mach & Hurd + # headers. + ++ optionals (libcCross != null && libcCross ? propagatedBuildInputs) + libcCross.propagatedBuildInputs + )); + + LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath ([] + ++ optional (zlib != null) zlib + ++ optional langJava boehmgc + ++ optionals javaAwtGtk xlibs + ++ optionals javaAwtGtk [ gmp mpfr ] + ++ optional (libpthread != null) libpthread) + ); + + EXTRA_TARGET_FLAGS = optionals + (targetPlatform != hostPlatform && libcCross != null) + ([ + "-idirafter ${getDev libcCross}/include" + ] ++ optionals (! crossStageStatic) [ + "-B${libcCross.out}/lib" + ]); + + EXTRA_TARGET_LDFLAGS = optionals + (targetPlatform != hostPlatform && libcCross != null) + ([ + "-Wl,-L${libcCross.out}/lib" + ] ++ (if crossStageStatic then [ + "-B${libcCross.out}/lib" + ] else [ + "-Wl,-rpath,${libcCross.out}/lib" + "-Wl,-rpath-link,${libcCross.out}/lib" + ]) ++ optionals (libpthreadCross != null) [ + "-L${libpthreadCross}/lib" + "-Wl,${libpthreadCross.TARGET_LDFLAGS}" + ]); + + passthru = + { inherit langC langCC langObjC langObjCpp langFortran langGo version; isGNU = true; }; + + inherit enableParallelBuilding enableMultilib; + + inherit (stdenv) is64bit; + + meta = { + homepage = http://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; [ ]; + + platforms = + stdenv.lib.platforms.linux ++ + stdenv.lib.platforms.freebsd ++ + stdenv.lib.platforms.darwin; + }; +} + +// optionalAttrs (targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt" && crossStageStatic) { + makeFlags = [ "all-gcc" "all-target-libgcc" ]; + installTargets = "install-gcc install-target-libgcc"; +} + +# Strip kills static libs of other archs (hence targetPlatform != hostPlatform) +// optionalAttrs (!stripped || targetPlatform != hostPlatform) { dontStrip = true; } + +// optionalAttrs (enableMultilib) { dontMoveLib64 = true; } +) diff --git a/pkgs/development/compilers/gcc/8/riscv-no-relax.patch b/pkgs/development/compilers/gcc/8/riscv-no-relax.patch new file mode 100644 index 00000000000..93d9cd1d60f --- /dev/null +++ b/pkgs/development/compilers/gcc/8/riscv-no-relax.patch @@ -0,0 +1,109 @@ +commit e7c570f37384d824cb9725f237920e9691e57269 +gpg: Signature made Tue 06 Mar 2018 04:52:46 PM PST +gpg: using RSA key 00CE76D1834960DFCE886DF8EF4CA1502CCBAB41 +gpg: issuer "palmer@dabbelt.com" +gpg: Good signature from "Palmer Dabbelt " [ultimate] +gpg: aka "Palmer Dabbelt " [ultimate] +Author: Palmer Dabbelt +Date: Thu Mar 1 12:01:06 2018 -0800 + + RISC-V: Add and document the "-mno-relax" option + + RISC-V relies on aggressive linker relaxation to get good code size. As + a result no text symbol addresses can be known until link time, which + means that alignment must be handled during the link. This alignment + pass is essentially just another linker relaxation, so this has the + unfortunate side effect that linker relaxation is required for + correctness on many RISC-V targets. + + The RISC-V assembler has supported an ".option norelax" for a long time + because there are situations in which linker relaxation is a bad idea -- + the canonical example is when trying to materialize the initial value of + the global pointer into a register, which would otherwise be relaxed to + a NOP. We've been relying on users who want to disable relaxation for + an entire link to pass "-Wl,--no-relax", but that still relies on the + linker relaxing R_RISCV_ALIGN to handle alignment despite it not being + strictly necessary. + + This patch adds a GCC option, "-mno-relax", that disable linker + relaxation by adding ".option norelax" to the top of every generated + assembly file. The assembler is smart enough to handle alignment at + assemble time for files that have never emitted a relaxable relocation, + so this is sufficient to really disable all relaxations in the linker, + which results in significantly faster link times for large objects. + + This also has the side effect of allowing toolchains that don't support + linker relaxation (LLVM and the Linux module loader) to function + correctly. Toolchains that don't support linker relaxation should + default to "-mno-relax" and error when presented with any R_RISCV_ALIGN + relocation as those need to be handled for correctness. + + gcc/ChangeLog + + 2018-03-01 Palmer Dabbelt + + * config/riscv/riscv.opt (mrelax): New option. + * config/riscv/riscv.c (riscv_file_start): Emit ".option + "norelax" when riscv_mrelax is disabled. + * doc/invoke.texi (RISC-V): Document "-mrelax" and "-mno-relax". + +diff --git a/gcc/config/riscv/riscv.c b/gcc/config/riscv/riscv.c +index c38f6c394d54..3e81874de232 100644 +--- a/gcc/config/riscv/riscv.c ++++ b/gcc/config/riscv/riscv.c +@@ -3979,6 +3979,11 @@ riscv_file_start (void) + + /* Instruct GAS to generate position-[in]dependent code. */ + fprintf (asm_out_file, "\t.option %spic\n", (flag_pic ? "" : "no")); ++ ++ /* If the user specifies "-mno-relax" on the command line then disable linker ++ relaxation in the assembler. */ ++ if (! riscv_mrelax) ++ fprintf (asm_out_file, "\t.option norelax\n"); + } + + /* Implement TARGET_ASM_OUTPUT_MI_THUNK. Generate rtl rather than asm text +diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt +index 581a26bb5c1e..b37ac75d9bb4 100644 +--- a/gcc/config/riscv/riscv.opt ++++ b/gcc/config/riscv/riscv.opt +@@ -106,6 +106,11 @@ mexplicit-relocs + Target Report Mask(EXPLICIT_RELOCS) + Use %reloc() operators, rather than assembly macros, to load addresses. + ++mrelax ++Target Bool Var(riscv_mrelax) Init(1) ++Take advantage of linker relaxations to reduce the number of instructions ++required to materialize symbol addresses. ++ + Mask(64BIT) + + Mask(MUL) +diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi +index 8d366c626bae..deb48af2ecad 100644 +--- a/gcc/doc/invoke.texi ++++ b/gcc/doc/invoke.texi +@@ -1042,7 +1042,8 @@ See RS/6000 and PowerPC Options. + -msave-restore -mno-save-restore @gol + -mstrict-align -mno-strict-align @gol + -mcmodel=medlow -mcmodel=medany @gol +--mexplicit-relocs -mno-explicit-relocs @gol} ++-mexplicit-relocs -mno-explicit-relocs @gol ++-mrelax -mno-relax @gol} + + @emph{RL78 Options} + @gccoptlist{-msim -mmul=none -mmul=g13 -mmul=g14 -mallregs @gol +@@ -23102,6 +23103,12 @@ Use or do not use assembler relocation operators when dealing with symbolic + addresses. The alternative is to use assembler macros instead, which may + limit optimization. + ++@item -mrelax ++@itemx -mno-relax ++Take advantage of linker relaxations to reduce the number of instructions ++required to materialize symbol addresses. The default is to take advantage of ++linker relaxations. ++ + @end table + + @node RL78 Options + diff --git a/pkgs/development/compilers/gcc/8/riscv-pthread-reentrant.patch b/pkgs/development/compilers/gcc/8/riscv-pthread-reentrant.patch new file mode 100644 index 00000000000..c7527ffb2b1 --- /dev/null +++ b/pkgs/development/compilers/gcc/8/riscv-pthread-reentrant.patch @@ -0,0 +1,13 @@ +Index: gcc/config/riscv/linux.h +=================================================================== +--- a/gcc/config/riscv/linux.h (revision 257620) ++++ b/gcc/config/riscv/linux.h (revision 257621) +@@ -47,6 +47,8 @@ + + #define ICACHE_FLUSH_FUNC "__riscv_flush_icache" + ++#define CPP_SPEC "%{pthread:-D_REENTRANT}" ++ + #define LINK_SPEC "\ + -melf" XLEN_SPEC "lriscv \ + %{shared} \ From 736dab4a681d9ff5e18ab4e47ed0c85303819b52 Mon Sep 17 00:00:00 2001 From: Patrick Hilhorst Date: Wed, 2 May 2018 18:43:06 +0200 Subject: [PATCH 2/9] gcc8: register to all-packages --- pkgs/top-level/all-packages.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a405a6785fe..e994da03909 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6243,6 +6243,17 @@ with pkgs; isl = if !stdenv.isDarwin then isl_0_17 else null; })); + gcc8 = lowPrio (wrapCC (callPackage ../development/compilers/gcc/8 { + inherit noSysDirs; + + # PGO seems to speed up compilation by gcc by ~10%, see #445 discussion + profiledCompiler = with stdenv; (!isDarwin && (isi686 || isx86_64)); + + libcCross = if targetPlatform != buildPlatform then libcCross else null; + + isl = if !stdenv.isDarwin then isl_0_17 else null; + })); + gcc-snapshot = lowPrio (wrapCC (callPackage ../development/compilers/gcc/snapshot { inherit noSysDirs; From 728eb27618990cb558a88f5779eb91a25b3e1a3f Mon Sep 17 00:00:00 2001 From: Patrick Hilhorst Date: Wed, 2 May 2018 18:52:50 +0200 Subject: [PATCH 3/9] gcc8: added myself as maintainer --- pkgs/development/compilers/gcc/8/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/compilers/gcc/8/default.nix b/pkgs/development/compilers/gcc/8/default.nix index d5e15287db0..ea7b98efcc8 100644 --- a/pkgs/development/compilers/gcc/8/default.nix +++ b/pkgs/development/compilers/gcc/8/default.nix @@ -504,7 +504,7 @@ stdenv.mkDerivation ({ compiler used in the GNU system including the GNU/Linux variant. ''; - maintainers = with stdenv.lib.maintainers; [ ]; + maintainers = with stdenv.lib.maintainers; [ synthetica ]; platforms = stdenv.lib.platforms.linux ++ From d0708a30c4fa2ea612148fdf5bfe9618b8040eb6 Mon Sep 17 00:00:00 2001 From: Patrick Hilhorst Date: Wed, 2 May 2018 20:51:01 +0200 Subject: [PATCH 4/9] gcc8: removed merged patches Log: ``` patching sources applying patch /nix/store/6m27y27zvzsjn1ir4y8mm9nc9xnh2sgx-riscv-no-relax.patch patching file gcc/config/riscv/riscv.c Reversed (or previously applied) patch detected! Assume -R? [n] Apply anyway? [n] Skipping patch. 1 out of 1 hunk ignored -- saving rejects to file gcc/config/riscv/riscv.c.rej patching file gcc/config/riscv/riscv.opt Reversed (or previously applied) patch detected! Assume -R? [n] Apply anyway? [n] Skipping patch. 1 out of 1 hunk ignored -- saving rejects to file gcc/config/riscv/riscv.opt.rej patching file gcc/doc/invoke.texi Reversed (or previously applied) patch detected! Assume -R? [n] Apply anyway? [n] Skipping patch. ``` --- pkgs/development/compilers/gcc/8/default.nix | 7 +- .../compilers/gcc/8/riscv-no-relax.patch | 109 ------------------ .../gcc/8/riscv-pthread-reentrant.patch | 13 --- 3 files changed, 1 insertion(+), 128 deletions(-) delete mode 100644 pkgs/development/compilers/gcc/8/riscv-no-relax.patch delete mode 100644 pkgs/development/compilers/gcc/8/riscv-pthread-reentrant.patch diff --git a/pkgs/development/compilers/gcc/8/default.nix b/pkgs/development/compilers/gcc/8/default.nix index ea7b98efcc8..9294985d99c 100644 --- a/pkgs/development/compilers/gcc/8/default.nix +++ b/pkgs/development/compilers/gcc/8/default.nix @@ -57,12 +57,7 @@ let version = "8.1.0"; enableParallelBuilding = true; patches = - [ # https://gcc.gnu.org/ml/gcc-patches/2018-02/msg00633.html - /* ./riscv-pthread-reentrant.patch */ # TODO: is this needed? - # https://gcc.gnu.org/ml/gcc-patches/2018-03/msg00297.html - /* ./riscv-no-relax.patch */ - ] - ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch + optional (targetPlatform != hostPlatform) ../libstdc++-target.patch ++ optional noSysDirs ../no-sys-dirs.patch /* ++ optional (hostPlatform != buildPlatform) (fetchpatch { # XXX: Refine when this should be applied url = "https://git.busybox.net/buildroot/plain/package/gcc/7.1.0/0900-remove-selftests.patch?id=11271540bfe6adafbc133caf6b5b902a816f5f02"; diff --git a/pkgs/development/compilers/gcc/8/riscv-no-relax.patch b/pkgs/development/compilers/gcc/8/riscv-no-relax.patch deleted file mode 100644 index 93d9cd1d60f..00000000000 --- a/pkgs/development/compilers/gcc/8/riscv-no-relax.patch +++ /dev/null @@ -1,109 +0,0 @@ -commit e7c570f37384d824cb9725f237920e9691e57269 -gpg: Signature made Tue 06 Mar 2018 04:52:46 PM PST -gpg: using RSA key 00CE76D1834960DFCE886DF8EF4CA1502CCBAB41 -gpg: issuer "palmer@dabbelt.com" -gpg: Good signature from "Palmer Dabbelt " [ultimate] -gpg: aka "Palmer Dabbelt " [ultimate] -Author: Palmer Dabbelt -Date: Thu Mar 1 12:01:06 2018 -0800 - - RISC-V: Add and document the "-mno-relax" option - - RISC-V relies on aggressive linker relaxation to get good code size. As - a result no text symbol addresses can be known until link time, which - means that alignment must be handled during the link. This alignment - pass is essentially just another linker relaxation, so this has the - unfortunate side effect that linker relaxation is required for - correctness on many RISC-V targets. - - The RISC-V assembler has supported an ".option norelax" for a long time - because there are situations in which linker relaxation is a bad idea -- - the canonical example is when trying to materialize the initial value of - the global pointer into a register, which would otherwise be relaxed to - a NOP. We've been relying on users who want to disable relaxation for - an entire link to pass "-Wl,--no-relax", but that still relies on the - linker relaxing R_RISCV_ALIGN to handle alignment despite it not being - strictly necessary. - - This patch adds a GCC option, "-mno-relax", that disable linker - relaxation by adding ".option norelax" to the top of every generated - assembly file. The assembler is smart enough to handle alignment at - assemble time for files that have never emitted a relaxable relocation, - so this is sufficient to really disable all relaxations in the linker, - which results in significantly faster link times for large objects. - - This also has the side effect of allowing toolchains that don't support - linker relaxation (LLVM and the Linux module loader) to function - correctly. Toolchains that don't support linker relaxation should - default to "-mno-relax" and error when presented with any R_RISCV_ALIGN - relocation as those need to be handled for correctness. - - gcc/ChangeLog - - 2018-03-01 Palmer Dabbelt - - * config/riscv/riscv.opt (mrelax): New option. - * config/riscv/riscv.c (riscv_file_start): Emit ".option - "norelax" when riscv_mrelax is disabled. - * doc/invoke.texi (RISC-V): Document "-mrelax" and "-mno-relax". - -diff --git a/gcc/config/riscv/riscv.c b/gcc/config/riscv/riscv.c -index c38f6c394d54..3e81874de232 100644 ---- a/gcc/config/riscv/riscv.c -+++ b/gcc/config/riscv/riscv.c -@@ -3979,6 +3979,11 @@ riscv_file_start (void) - - /* Instruct GAS to generate position-[in]dependent code. */ - fprintf (asm_out_file, "\t.option %spic\n", (flag_pic ? "" : "no")); -+ -+ /* If the user specifies "-mno-relax" on the command line then disable linker -+ relaxation in the assembler. */ -+ if (! riscv_mrelax) -+ fprintf (asm_out_file, "\t.option norelax\n"); - } - - /* Implement TARGET_ASM_OUTPUT_MI_THUNK. Generate rtl rather than asm text -diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt -index 581a26bb5c1e..b37ac75d9bb4 100644 ---- a/gcc/config/riscv/riscv.opt -+++ b/gcc/config/riscv/riscv.opt -@@ -106,6 +106,11 @@ mexplicit-relocs - Target Report Mask(EXPLICIT_RELOCS) - Use %reloc() operators, rather than assembly macros, to load addresses. - -+mrelax -+Target Bool Var(riscv_mrelax) Init(1) -+Take advantage of linker relaxations to reduce the number of instructions -+required to materialize symbol addresses. -+ - Mask(64BIT) - - Mask(MUL) -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 8d366c626bae..deb48af2ecad 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -1042,7 +1042,8 @@ See RS/6000 and PowerPC Options. - -msave-restore -mno-save-restore @gol - -mstrict-align -mno-strict-align @gol - -mcmodel=medlow -mcmodel=medany @gol ---mexplicit-relocs -mno-explicit-relocs @gol} -+-mexplicit-relocs -mno-explicit-relocs @gol -+-mrelax -mno-relax @gol} - - @emph{RL78 Options} - @gccoptlist{-msim -mmul=none -mmul=g13 -mmul=g14 -mallregs @gol -@@ -23102,6 +23103,12 @@ Use or do not use assembler relocation operators when dealing with symbolic - addresses. The alternative is to use assembler macros instead, which may - limit optimization. - -+@item -mrelax -+@itemx -mno-relax -+Take advantage of linker relaxations to reduce the number of instructions -+required to materialize symbol addresses. The default is to take advantage of -+linker relaxations. -+ - @end table - - @node RL78 Options - diff --git a/pkgs/development/compilers/gcc/8/riscv-pthread-reentrant.patch b/pkgs/development/compilers/gcc/8/riscv-pthread-reentrant.patch deleted file mode 100644 index c7527ffb2b1..00000000000 --- a/pkgs/development/compilers/gcc/8/riscv-pthread-reentrant.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: gcc/config/riscv/linux.h -=================================================================== ---- a/gcc/config/riscv/linux.h (revision 257620) -+++ b/gcc/config/riscv/linux.h (revision 257621) -@@ -47,6 +47,8 @@ - - #define ICACHE_FLUSH_FUNC "__riscv_flush_icache" - -+#define CPP_SPEC "%{pthread:-D_REENTRANT}" -+ - #define LINK_SPEC "\ - -melf" XLEN_SPEC "lriscv \ - %{shared} \ From c7a6b3665896a5bf62c39e35a73988058f0c026f Mon Sep 17 00:00:00 2001 From: Patrick Hilhorst Date: Wed, 2 May 2018 20:53:13 +0200 Subject: [PATCH 5/9] gcc8: removed commented gcc7 hash --- pkgs/development/compilers/gcc/8/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/pkgs/development/compilers/gcc/8/default.nix b/pkgs/development/compilers/gcc/8/default.nix index 9294985d99c..15b8b99c82f 100644 --- a/pkgs/development/compilers/gcc/8/default.nix +++ b/pkgs/development/compilers/gcc/8/default.nix @@ -183,7 +183,6 @@ stdenv.mkDerivation ({ src = fetchurl { url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz"; - /* sha256 = "0p71bij6bfhzyrs8676a8jmpjsfz392s2rg862sdnsk30jpacb43"; */ sha256 = "0lxil8x0jjx7zbf90cy1rli650akaa6hpk8wk8s62vk2jbwnc60x"; }; From 48e44490e907d0bf978e7cf5188a5bdfcca44fc9 Mon Sep 17 00:00:00 2001 From: Will Dietz Date: Wed, 2 May 2018 14:19:28 -0500 Subject: [PATCH 6/9] add cc-wrapper test variants for gcc7, gcc8, add to release.nix --- pkgs/top-level/all-packages.nix | 3 +++ pkgs/top-level/release.nix | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e994da03909..35af7305184 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6086,6 +6086,7 @@ with pkgs; }; gcc7Stdenv = overrideCC gccStdenv gcc7; + gcc8Stdenv = overrideCC gccStdenv gcc8; wrapCCMulti = cc: if system == "x86_64-linux" then let @@ -21390,6 +21391,8 @@ with pkgs; tests = recurseIntoAttrs { cc-wrapper = callPackage ../test/cc-wrapper { }; cc-wrapper-gcc = callPackage ../test/cc-wrapper { stdenv = gccStdenv; }; + cc-wrapper-gcc7 = callPackage ../test/cc-wrapper { stdenv = gcc7Stdenv; }; + cc-wrapper-gcc8 = callPackage ../test/cc-wrapper { stdenv = gcc8Stdenv; }; cc-wrapper-clang = callPackage ../test/cc-wrapper { stdenv = llvmPackages.stdenv; }; cc-wrapper-libcxx = callPackage ../test/cc-wrapper { stdenv = llvmPackages.libcxxStdenv; }; cc-wrapper-clang-39 = callPackage ../test/cc-wrapper { stdenv = llvmPackages_39.stdenv; }; diff --git a/pkgs/top-level/release.nix b/pkgs/top-level/release.nix index 3ea873cdc7f..5233051cad8 100644 --- a/pkgs/top-level/release.nix +++ b/pkgs/top-level/release.nix @@ -107,6 +107,10 @@ let jobs.tests.cc-wrapper.x86_64-linux jobs.tests.cc-wrapper.x86_64-darwin + jobs.tests.cc-wrapper-gcc7.x86_64-linux + jobs.tests.cc-wrapper-gcc7.x86_64-darwin + jobs.tests.cc-wrapper-gcc8.x86_64-linux + jobs.tests.cc-wrapper-gcc8.x86_64-darwin jobs.tests.cc-wrapper-clang.x86_64-linux jobs.tests.cc-wrapper-clang.x86_64-darwin jobs.tests.cc-wrapper-libcxx.x86_64-linux From 5794d941362df79071ffc3155a0a6fabc5051b7e Mon Sep 17 00:00:00 2001 From: Patrick Hilhorst Date: Wed, 2 May 2018 22:31:58 +0200 Subject: [PATCH 7/9] gcc8: made the remove-selftests patch more robust, removed old hash --- pkgs/development/compilers/gcc/8/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/compilers/gcc/8/default.nix b/pkgs/development/compilers/gcc/8/default.nix index 15b8b99c82f..00b3f944713 100644 --- a/pkgs/development/compilers/gcc/8/default.nix +++ b/pkgs/development/compilers/gcc/8/default.nix @@ -60,8 +60,8 @@ let version = "8.1.0"; optional (targetPlatform != hostPlatform) ../libstdc++-target.patch ++ optional noSysDirs ../no-sys-dirs.patch /* ++ optional (hostPlatform != buildPlatform) (fetchpatch { # XXX: Refine when this should be applied - url = "https://git.busybox.net/buildroot/plain/package/gcc/7.1.0/0900-remove-selftests.patch?id=11271540bfe6adafbc133caf6b5b902a816f5f02"; - sha256 = "0mrvxsdwip2p3l17dscpc1x8vhdsciqw1z5q9i6p5g9yg1cqnmgs"; + url = "https://git.busybox.net/buildroot/plain/package/gcc/${version}/0900-remove-selftests.patch?id=11271540bfe6adafbc133caf6b5b902a816f5f02"; + sha256 = ""; # TODO: uncomment and check hash when available. }) */ ++ optional langFortran ../gfortran-driving.patch; From d21ff87160cfde2db368622a8044006391cae60a Mon Sep 17 00:00:00 2001 From: Patrick Hilhorst Date: Thu, 3 May 2018 13:07:19 +0200 Subject: [PATCH 8/9] gcc8: Removed java as a target language --- pkgs/development/compilers/gcc/8/default.nix | 67 +++----------------- 1 file changed, 8 insertions(+), 59 deletions(-) diff --git a/pkgs/development/compilers/gcc/8/default.nix b/pkgs/development/compilers/gcc/8/default.nix index 00b3f944713..16636f04982 100644 --- a/pkgs/development/compilers/gcc/8/default.nix +++ b/pkgs/development/compilers/gcc/8/default.nix @@ -2,23 +2,22 @@ , langC ? true, langCC ? true, langFortran ? false , langObjC ? targetPlatform.isDarwin , langObjCpp ? targetPlatform.isDarwin -, langJava ? false , langGo ? false , profiledCompiler ? false , staticCompiler ? false , enableShared ? true , texinfo ? null -, perl ? null # optional, for texi2pod (then pod2man); required for Java +, perl ? null # optional, for texi2pod (then pod2man) , 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 +, zlib ? null +, pkgconfig ? null , gtk2 ? null, libart_lgpl ? null , libX11 ? null, libXt ? null, libSM ? null, libICE ? null, libXtst ? null , libXrender ? null, xproto ? null, renderproto ? null, xextproto ? null , libXrandr ? null, libXi ? null, inputproto ? null, randrproto ? null -, x11Support ? langJava +, x11Support ? false , enableMultilib ? false , enablePlugin ? hostPlatform == buildPlatform # Whether to support user-supplied plug-ins , name ? "gcc" @@ -33,10 +32,6 @@ , 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; @@ -65,29 +60,11 @@ let version = "8.1.0"; }) */ ++ optional langFortran ../gfortran-driving.patch; - 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 = http://www.antlr.org/download/antlr-4.4-complete.jar; - sha256 = "02lda2imivsvsis8rnzmbrbp8rh1kb8vmq4i67pqhkwz7lf8y6dz"; - }; - xlibs = [ libX11 libXt libSM libICE libXtst libXrender libXrandr libXi xproto renderproto xextproto inputproto randrproto ]; - javaAwtGtk = langJava && x11Support; - /* Platform flags */ platformFlags = let gccArch = targetPlatform.platform.gcc.arch or null; @@ -277,13 +254,12 @@ stdenv.mkDerivation ({ # TODO(@Ericson2314): Make passthru instead. Weird to avoid mass rebuild, crossStageStatic = targetPlatform == hostPlatform || crossStageStatic; - inherit noSysDirs staticCompiler langJava + inherit noSysDirs staticCompiler libcCross crossMingw; depsBuildBuild = [ buildPackages.stdenv.cc ]; nativeBuildInputs = [ texinfo which gettext ] - ++ (optional (perl != null) perl) - ++ (optional javaAwtGtk pkgconfig); + ++ (optional (perl != null) perl); # For building runtime libs depsBuildTarget = @@ -298,8 +274,6 @@ stdenv.mkDerivation ({ 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)) ++ (optionals (targetPlatform != hostPlatform) [targetPackages.stdenv.cc.bintools]) # The builder relies on GNU sed (for instance, Darwin's `sed' fails with @@ -351,7 +325,6 @@ stdenv.mkDerivation ({ ( optional langC "c" ++ optional langCC "c++" ++ optional langFortran "fortran" - ++ optional langJava "java" ++ optional langGo "go" ++ optional langObjC "objc" ++ optional langObjCpp "obj-c++" @@ -372,19 +345,6 @@ stdenv.mkDerivation ({ # Optional features optional (isl != null) "--with-isl=${isl}" ++ - # Java options - optionals langJava [ - "--with-ecj-jar=${javaEcj}" - - # Follow Sun's layout for the convenience of IcedTea/OpenJDK. See - # . - "--enable-java-home" - "--with-java-home=\${prefix}/lib/jvm/jre" - ] ++ - optional javaAwtGtk "--enable-java-awt=gtk" ++ - optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}" ++ - - platformFlags ++ optional (targetPlatform != hostPlatform) crossConfigureFlags ++ optional (!bootstrap) "--disable-bootstrap" ++ @@ -421,11 +381,6 @@ stdenv.mkDerivation ({ # 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++ @@ -434,9 +389,6 @@ stdenv.mkDerivation ({ CPATH = optionals (targetPlatform == hostPlatform) (makeSearchPathOutput "dev" "include" ([] ++ optional (zlib != null) zlib - ++ optional langJava boehmgc - ++ optionals javaAwtGtk xlibs - ++ optionals javaAwtGtk [ gmp mpfr ] ++ optional (libpthread != null) libpthread ++ optional (libpthreadCross != null) libpthreadCross @@ -448,9 +400,6 @@ stdenv.mkDerivation ({ LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath ([] ++ optional (zlib != null) zlib - ++ optional langJava boehmgc - ++ optionals javaAwtGtk xlibs - ++ optionals javaAwtGtk [ gmp mpfr ] ++ optional (libpthread != null) libpthread) ); @@ -491,8 +440,8 @@ stdenv.mkDerivation ({ 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,...). + Objective-C, Fortran, OpenMP for C/C++/Fortran, and Ada, as well as + libraries for these languages (libstdc++, 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. From 51ac1d8df08d606ae5d8af95073bb74e330249f3 Mon Sep 17 00:00:00 2001 From: Patrick Hilhorst Date: Thu, 3 May 2018 16:30:32 +0200 Subject: [PATCH 9/9] gcc8: Removed X11 components, since they were only used by langJava --- pkgs/development/compilers/gcc/8/default.nix | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/pkgs/development/compilers/gcc/8/default.nix b/pkgs/development/compilers/gcc/8/default.nix index 16636f04982..2465e6149c0 100644 --- a/pkgs/development/compilers/gcc/8/default.nix +++ b/pkgs/development/compilers/gcc/8/default.nix @@ -12,12 +12,6 @@ , libelf # optional, for link-time optimizations (LTO) , isl ? null # optional, for the Graphite optimization framework. , zlib ? null -, pkgconfig ? null -, gtk2 ? null, libart_lgpl ? null -, libX11 ? null, libXt ? null, libSM ? null, libICE ? null, libXtst ? null -, libXrender ? null, xproto ? null, renderproto ? null, xextproto ? null -, libXrandr ? null, libXi ? null, inputproto ? null, randrproto ? null -, x11Support ? false , enableMultilib ? false , enablePlugin ? hostPlatform == buildPlatform # Whether to support user-supplied plug-ins , name ? "gcc" @@ -60,11 +54,6 @@ let version = "8.1.0"; }) */ ++ optional langFortran ../gfortran-driving.patch; - xlibs = [ - libX11 libXt libSM libICE libXtst libXrender libXrandr libXi - xproto renderproto xextproto inputproto randrproto - ]; - /* Platform flags */ platformFlags = let gccArch = targetPlatform.platform.gcc.arch or null; @@ -150,9 +139,6 @@ let version = "8.1.0"; in -# We need all these X libraries when building AWT with GTK+. -assert x11Support -> (filter (x: x == null) ([ gtk2 libart_lgpl ] ++ xlibs)) == []; - stdenv.mkDerivation ({ name = "${name}${if stripped then "" else "-debug"}-${version}" + crossNameAddon;