summary refs log tree commit diff
path: root/pkgs/development/compilers/gcc/6/default.nix
diff options
context:
space:
mode:
authorJohn Ericson <git@JohnEricson.me>2019-11-10 15:58:19 -0500
committerJohn Ericson <git@JohnEricson.me>2019-11-10 15:58:35 -0500
commit5c5ca018c8f2d819ef94429a5358af96533ff6b9 (patch)
tree90abd4901056e3cbb69833b5fa15a9553917808e /pkgs/development/compilers/gcc/6/default.nix
parentf666c61d209959f293730694e7810619502ce7d4 (diff)
downloadnixpkgs-5c5ca018c8f2d819ef94429a5358af96533ff6b9.tar
nixpkgs-5c5ca018c8f2d819ef94429a5358af96533ff6b9.tar.gz
nixpkgs-5c5ca018c8f2d819ef94429a5358af96533ff6b9.tar.bz2
nixpkgs-5c5ca018c8f2d819ef94429a5358af96533ff6b9.tar.lz
nixpkgs-5c5ca018c8f2d819ef94429a5358af96533ff6b9.tar.xz
nixpkgs-5c5ca018c8f2d819ef94429a5358af96533ff6b9.tar.zst
nixpkgs-5c5ca018c8f2d819ef94429a5358af96533ff6b9.zip
gcc: Deduplicate `configureFlags`
Thanks again to @bgamari who in 1c1207220f06b751a42346f33d09582e66999a6d
did the cleanup to make this possible. It's been a long time coming!
Diffstat (limited to 'pkgs/development/compilers/gcc/6/default.nix')
-rw-r--r--pkgs/development/compilers/gcc/6/default.nix157
1 files changed, 23 insertions, 134 deletions
diff --git a/pkgs/development/compilers/gcc/6/default.nix b/pkgs/development/compilers/gcc/6/default.nix
index f7b7c9e239c..a3030366be6 100644
--- a/pkgs/development/compilers/gcc/6/default.nix
+++ b/pkgs/development/compilers/gcc/6/default.nix
@@ -85,66 +85,9 @@ let version = "6.5.0";
 
     /* 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 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
-      ] ++ optionals crossMingw [
-        "--with-headers=${libcCross}/include"
-        "--with-gcc"
-        "--with-gnu-as"
-        "--with-gnu-ld"
-        "--disable-debug"
-        "--enable-sjlj-exceptions"
-        "--disable-win32-registry"
-      ] 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"
-        "--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)
-      ] ++ 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"
-      ] ++ optionals (targetPlatform.libc == "musl") [
-        # musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865
-        "--disable-libmpx"
-      ] ++ optionals crossMingw [
-        "--enable-sjlj-exceptions"
-        "--enable-hash-synchronization"
-        "--enable-libssp"
-        "--disable-nls"
-        "--with-dwarf2"
-        # To keep ABI compatibility with upstream mingw-w64
-        "--enable-fully-dynamic-string"
-      ] ++ optional (targetPlatform.libc == "newlib") "--with-newlib"
-        ++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc"
-      );
     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.
@@ -254,87 +197,33 @@ stdenv.mkDerivation ({
   # 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 langJava     "java"
-          ++ 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}" ++
-
-    # Java options
-    optionals langJava [
-      "--with-ecj-jar=${javaEcj}"
-
-      # Follow Sun's layout for the convenience of IcedTea/OpenJDK.  See
-      # <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
-      "--enable-java-home"
-      "--with-java-home=\${prefix}/lib/jvm/jre"
-    ] ++
-    optional javaAwtGtk "--enable-java-awt=gtk" ++
-    optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}" ++
-
-    (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
+
+      enablePlugin
+      enableMultilib
+      enableShared
+
+      langC
+      langCC
+      langFortran
+      langJava javaAwtGtk javaAntlr javaEcj
+      langGo
+      langObjC
+      langObjCpp
+      ;
+  };
 
   targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
 
   buildFlags = optional
-    (bootstrap && hostPlatform == buildPlatform)
+    (hostPlatform == buildPlatform)
     (if profiledCompiler then "profiledbootstrap" else "bootstrap");
 
   dontStrip = !stripped;