aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/development/compilers/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/gcc')
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/4.9/default.nix2
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/8/default.nix4
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/9/default.nix6
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/builder.sh33
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/snapshot/default.nix252
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; }
-)