diff options
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/gcc')
5 files changed, 22 insertions, 275 deletions
diff --git a/nixpkgs/pkgs/development/compilers/gcc/4.9/default.nix b/nixpkgs/pkgs/development/compilers/gcc/4.9/default.nix index b287a8551f3..270d118f97e 100644 --- a/nixpkgs/pkgs/development/compilers/gcc/4.9/default.nix +++ b/nixpkgs/pkgs/development/compilers/gcc/4.9/default.nix @@ -303,7 +303,7 @@ stdenv.mkDerivation ({ compiler used in the GNU system including the GNU/Linux variant. ''; - maintainers = with stdenv.lib.maintainers; [ peti ]; + maintainers = with stdenv.lib.maintainers; [ peti veprbl ]; platforms = stdenv.lib.platforms.linux ++ diff --git a/nixpkgs/pkgs/development/compilers/gcc/8/default.nix b/nixpkgs/pkgs/development/compilers/gcc/8/default.nix index c6b785f84a4..58248093d24 100644 --- a/nixpkgs/pkgs/development/compilers/gcc/8/default.nix +++ b/nixpkgs/pkgs/development/compilers/gcc/8/default.nix @@ -43,7 +43,7 @@ with stdenv.lib; with builtins; let majorVersion = "8"; - version = "${majorVersion}.3.0"; + version = "${majorVersion}.4.0"; inherit (stdenv) buildPlatform hostPlatform targetPlatform; @@ -77,7 +77,7 @@ stdenv.mkDerivation ({ src = fetchurl { url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz"; - sha256 = "0b3xv411xhlnjmin2979nxcbnidgvzqdf4nbhix99x60dkzavfk4"; + sha256 = "1m1d3gfix56w4aq8myazzfffkl8bqcrx4jhhapnjf7qfs596w2p3"; }; inherit patches; diff --git a/nixpkgs/pkgs/development/compilers/gcc/9/default.nix b/nixpkgs/pkgs/development/compilers/gcc/9/default.nix index 7ff8d7529ca..f660a59a790 100644 --- a/nixpkgs/pkgs/development/compilers/gcc/9/default.nix +++ b/nixpkgs/pkgs/development/compilers/gcc/9/default.nix @@ -245,6 +245,12 @@ stdenv.mkDerivation ({ inherit (stdenv) is64bit; + # In this particular combination it stopped creating lib output at all. + # TODO: perhaps find a better fix? (ideally understand what's going on) + postFixup = if crossStageStatic && targetPlatform.isMusl && targetPlatform.is32bit + then ''mkdir "$lib"'' + else null; + meta = { homepage = https://gcc.gnu.org/; license = stdenv.lib.licenses.gpl3Plus; # runtime support libraries are typically LGPLv3+ diff --git a/nixpkgs/pkgs/development/compilers/gcc/builder.sh b/nixpkgs/pkgs/development/compilers/gcc/builder.sh index 07a003691d6..b153687980a 100644 --- a/nixpkgs/pkgs/development/compilers/gcc/builder.sh +++ b/nixpkgs/pkgs/development/compilers/gcc/builder.sh @@ -133,7 +133,7 @@ if test "$noSysDirs" = "1"; then if test "$crossStageStatic" == 1; then # We don't want the gcc build to assume there will be a libc providing - # limits.h in this stagae + # limits.h in this stage makeFlagsArray+=( 'LIMITS_H_TEST=false' ) @@ -203,31 +203,31 @@ postConfigure() { preInstall() { # Make βlib64β symlinks to βlibβ. if [ -n "$is64bit" -a -z "$enableMultilib" ]; then - mkdir -p "$out/lib" - ln -s lib "$out/lib64" - mkdir -p "$lib/lib" - ln -s lib "$lib/lib64" + mkdir -p "$out/${targetConfig}/lib" + ln -s lib "$out/${targetConfig}/lib64" + mkdir -p "$lib/${targetConfig}/lib" + ln -s lib "$lib/${targetConfig}/lib64" fi } postInstall() { # Move runtime libraries to $lib. - moveToOutput "lib/lib*.so*" "$lib" - moveToOutput "lib/lib*.la" "$lib" - moveToOutput "lib/lib*.dylib" "$lib" + moveToOutput "${targetConfig+$targetConfig/}lib/lib*.so*" "$lib" + moveToOutput "${targetConfig+$targetConfig/}lib/lib*.la" "$lib" + moveToOutput "${targetConfig+$targetConfig/}lib/lib*.dylib" "$lib" moveToOutput "share/gcc-*/python" "$lib" - for i in "$lib"/lib/*.{la,py}; do + for i in "$lib/${targetConfig}"/lib/*.{la,py}; do substituteInPlace "$i" --replace "$out" "$lib" done if [ -n "$enableMultilib" ]; then - moveToOutput "lib64/lib*.so*" "$lib" - moveToOutput "lib64/lib*.la" "$lib" - moveToOutput "lib64/lib*.dylib" "$lib" + moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.so*" "$lib" + moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.la" "$lib" + moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.dylib" "$lib" - for i in "$lib"/lib64/*.{la,py}; do + for i in "$lib/${targetConfig}"/lib64/*.{la,py}; do substituteInPlace "$i" --replace "$out" "$lib" done fi @@ -247,13 +247,6 @@ postInstall() { NEW_RPATH=`echo "$PREV_RPATH" | sed 's,:[^:]*bootstrap-tools/lib,,g'` patchelf --set-rpath "$NEW_RPATH" "$i" && echo OK done - - # For some reason the libs retain RPATH to $out - for i in "$lib"/lib/{libtsan,libasan,libubsan}.so.*.*.*; do - PREV_RPATH=`patchelf --print-rpath "$i"` - NEW_RPATH=`echo "$PREV_RPATH" | sed "s,:${out}[^:]*,,g"` - patchelf --set-rpath "$NEW_RPATH" "$i" && echo OK - done fi if type "install_name_tool"; then diff --git a/nixpkgs/pkgs/development/compilers/gcc/snapshot/default.nix b/nixpkgs/pkgs/development/compilers/gcc/snapshot/default.nix deleted file mode 100644 index 0441296ef17..00000000000 --- a/nixpkgs/pkgs/development/compilers/gcc/snapshot/default.nix +++ /dev/null @@ -1,252 +0,0 @@ -{ stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs -, langC ? true, langCC ? true, langFortran ? false -, langObjC ? stdenv.targetPlatform.isDarwin -, langObjCpp ? stdenv.targetPlatform.isDarwin -, langGo ? false -, profiledCompiler ? false -, staticCompiler ? false -, enableShared ? true -, enableLTO ? true -, texinfo ? null -, 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 -, 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 -, flex ? null -, buildPackages -}: - -# 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 = "7"; - version = "${majorVersion}-20170409"; - - inherit (stdenv) buildPlatform hostPlatform targetPlatform; - - patches = - [ ] - ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch - ++ optional noSysDirs ../no-sys-dirs.patch - ++ optional langFortran ../gfortran-driving.patch - ++ 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 = "1nyjnshpq5gbcbbpfv27hy4ajvycmgkpiabkjlxnnrnq1d99k1ay"; - }); - - /* 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 - -stdenv.mkDerivation ({ - pname = "${crossNameAddon}${name}${if stripped then "" else "-debug"}"; - inherit version; - - builder = ../builder.sh; - - src = fetchurl { - url = "mirror://gcc/snapshots/${version}/gcc-${version}.tar.bz2"; - sha256 = "19197rw1xrpkb8h10lfgn6zj7yj52x95hdmr0x5lg8i4v3i23b67"; - }; - - inherit patches; - - outputs = [ "out" "lib" "man" "info" ]; - setOutputFlags = false; - NIX_NO_SELF_RPATH = true; - - libc_dev = stdenv.cc.libc_dev; - - hardeningDisable = [ "format" "pie" ]; - - 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' and \`UCLIBC_DYNAMIC_LINKER' macros..." - for header in "gcc/config/"*-gnu.h "gcc/config/"*"/"*.h - do - grep -q LIBC_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' - done - '' - else null; - - inherit noSysDirs staticCompiler crossStageStatic - libcCross crossMingw; - - depsBuildBuild = [ buildPackages.stdenv.cc ]; - nativeBuildInputs = [ texinfo which gettext ] - ++ (optional (perl != null) perl); - - # 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 flex - targetPackages.stdenv.cc.bintools # For linking code at run-time - ] ++ (optional (isl != null) isl) - ++ (optional (zlib != null) zlib) - # 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 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 - 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; - NIX_STRIP_DEBUG = !stripped; - - installTargets = - if stripped - then "install-strip" - else "install"; - - # 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. - # - # 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 - )); - - LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath (optional (zlib != null) zlib)); - - 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, 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. - ''; - - maintainers = with stdenv.lib.maintainers; [ ]; - - platforms = - stdenv.lib.platforms.linux ++ - stdenv.lib.platforms.freebsd ++ - stdenv.lib.platforms.illumos ++ - stdenv.lib.platforms.darwin; - - broken = true; - }; -} - -// optionalAttrs (targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt" && crossStageStatic) { - makeFlags = [ "all-gcc" "all-target-libgcc" ]; - installTargets = "install-gcc install-target-libgcc"; -} - -// optionalAttrs (enableMultilib) { dontMoveLib64 = true; } -) |