diff options
author | Alyssa Ross <hi@alyssa.is> | 2020-01-11 23:37:02 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2020-01-11 23:41:30 +0000 |
commit | 6c557e3f1c28cf87e9fba232811d6875dd1399c1 (patch) | |
tree | 035a071d5d8980df6de0fa42e2ef8fc0cce7055e /nixpkgs/pkgs/development/compilers/gcc/8 | |
parent | da7500bc026e937ac7fce7b50f67a0e1765737a7 (diff) | |
parent | e4134747f5666bcab8680aff67fa3b63384f9a0f (diff) | |
download | nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.tar nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.tar.gz nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.tar.bz2 nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.tar.lz nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.tar.xz nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.tar.zst nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.zip |
Merge commit 'e4134747f5666bcab8680aff67fa3b63384f9a0f'
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/gcc/8')
-rw-r--r-- | nixpkgs/pkgs/development/compilers/gcc/8/default.nix | 221 |
1 files changed, 54 insertions, 167 deletions
diff --git a/nixpkgs/pkgs/development/compilers/gcc/8/default.nix b/nixpkgs/pkgs/development/compilers/gcc/8/default.nix index e25c7b6016af..c6b785f84a4e 100644 --- a/nixpkgs/pkgs/development/compilers/gcc/8/default.nix +++ b/nixpkgs/pkgs/development/compilers/gcc/8/default.nix @@ -1,4 +1,4 @@ -{ stdenv, targetPackages, fetchurl, noSysDirs +{ stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs , langC ? true, langCC ? true, langFortran ? false , langObjC ? stdenv.targetPlatform.isDarwin , langObjCpp ? stdenv.targetPlatform.isDarwin @@ -6,6 +6,7 @@ , profiledCompiler ? false , staticCompiler ? false , enableShared ? true +, enableLTO ? true , texinfo ? null , perl ? null # optional, for texi2pod (then pod2man) , gmp, mpfr, libmpc, gettext, which @@ -16,6 +17,7 @@ , 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 @@ -34,10 +36,14 @@ 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 version = "8.3.0"; +let majorVersion = "8"; + version = "${majorVersion}.3.0"; inherit (stdenv) buildPlatform hostPlatform targetPlatform; @@ -50,83 +56,22 @@ let version = "8.3.0"; }) */ ++ optional langFortran ../gfortran-driving.patch ++ optional (targetPlatform.libc == "musl" && targetPlatform.isPower) ../ppc-musl.patch - ++ optional (targetPlatform.libc == "musl") ../libgomp-dont-force-initial-exec.patch; + ++ optional (targetPlatform.libc == "musl") ../libgomp-dont-force-initial-exec.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 = "1in5kvcknlpi9z1vvjw6jfmwy8k12zvbqlqfnq84qpm99r0rh00a"; + }); /* 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" - "--disable-libmpx" # requires libc - ] else if crossStageStatic then [ - "--disable-libssp" - "--disable-nls" - "--without-headers" - "--disable-threads" - "--disable-libgomp" - "--disable-libquadmath" - "--disable-shared" - "--disable-libatomic" # requires libc - "--disable-decimal-float" # requires libc - "--disable-libmpx" # requires libc - ] else [ - (if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot" - else "--with-headers=${getDev libcCross}${libcCross.incdir or "/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" - ] - ++ optional (targetPlatform.libc == "newlib") "--with-newlib" - ++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc" - ++ [ - "--enable-threads=${if targetPlatform.isUnix then "posix" - else if targetPlatform.isWindows then "win32" - else "single"}" - "--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; + stageNameAddon = if crossStageStatic then "stage-static" else "stage-final"; + crossNameAddon = optionalString (targetPlatform != hostPlatform) "${targetPlatform.config}-${stageNameAddon}-"; in stdenv.mkDerivation ({ - name = "${name}${if stripped then "" else "-debug"}-${version}" + crossNameAddon; + pname = "${crossNameAddon}${name}${if stripped then "" else "-debug"}"; + inherit version; builder = ../builder.sh; @@ -218,96 +163,52 @@ stdenv.mkDerivation ({ ++ (optional hostPlatform.isDarwin gnused) ; + depsTargetTarget = optional (!crossStageStatic && threadsCross != null) threadsCross; + 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" - ''; + 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 = - # 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 langGo "go" - ++ optional langObjC "objc" - ++ optional langObjCpp "obj-c++" - ++ optionals crossDarwin [ "objc" "obj-c++" ] - ) - ) - }" - ] ++ - - (if (enableMultilib || targetPlatform.isAvr) - 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}" ++ - - (import ../common/platform-flags.nix { inherit (stdenv) lib targetPlatform; }) ++ - optional (targetPlatform != hostPlatform) crossConfigureFlags ++ - optional (!bootstrap) "--disable-bootstrap" ++ - - # Platform-specific flags - optional (targetPlatform == hostPlatform && targetPlatform.isx86_32) "--with-arch=${stdenv.hostPlatform.parsed.cpu.name}" ++ - 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" - ] - ++ optionals (targetPlatform == hostPlatform && targetPlatform.libc == "musl") [ - "--disable-libsanitizer" - "--disable-symvers" - "libat_cv_have_ifunc=no" - "--disable-gnu-indirect-function" - ] - ; + 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 - (bootstrap && hostPlatform == buildPlatform) + (targetPlatform == hostPlatform && hostPlatform == buildPlatform) (if profiledCompiler then "profiledbootstrap" else "bootstrap"); dontStrip = !stripped; - installTargets = - if stripped - then "install-strip" - else "install"; + 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"; @@ -327,24 +228,13 @@ stdenv.mkDerivation ({ LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath (optional (zlib != null) zlib)); - EXTRA_TARGET_FLAGS = optionals - (targetPlatform != hostPlatform && libcCross != null) - ([ - "-idirafter ${getDev libcCross}${libcCross.incdir or "/include"}" - ] ++ optionals (! crossStageStatic) [ - "-B${libcCross.out}${libcCross.libdir or "/lib"}" - ]); - - EXTRA_TARGET_LDFLAGS = optionals - (targetPlatform != hostPlatform && libcCross != null) - ([ - "-Wl,-L${libcCross.out}${libcCross.libdir or "/lib"}" - ] ++ (if crossStageStatic then [ - "-B${libcCross.out}${libcCross.libdir or "/lib"}" - ] else [ - "-Wl,-rpath,${libcCross.out}${libcCross.libdir or "/lib"}" - "-Wl,-rpath-link,${libcCross.out}${libcCross.libdir or "/lib"}" - ])); + 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; @@ -378,9 +268,6 @@ stdenv.mkDerivation ({ stdenv.lib.platforms.freebsd ++ stdenv.lib.platforms.illumos ++ stdenv.lib.platforms.darwin; - - # See #40038 - broken = stdenv.isDarwin; }; } |