gcc: Clean up cross configure flags and name prefix

This commit is contained in:
John Ericson 2019-11-10 12:58:11 -05:00
parent 3098d65210
commit ca341c2d5b
8 changed files with 289 additions and 351 deletions

View File

@ -101,20 +101,7 @@ let version = "4.8.5";
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" [ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++ "--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
(if crossMingw && crossStageStatic then [ (if 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-libssp"
"--disable-nls" "--disable-nls"
"--without-headers" "--without-headers"
@ -125,38 +112,47 @@ let version = "4.8.5";
"--disable-libatomic" # requires libc "--disable-libatomic" # requires libc
"--disable-decimal-float" # requires libc "--disable-decimal-float" # requires libc
"--disable-libmpx" # 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 [ ] else [
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot" (if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}") else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}")
"--enable-__cxa_atexit" "--enable-__cxa_atexit"
"--enable-long-long" "--enable-long-long"
] ++ "--enable-threads=${if targetPlatform.isUnix then "posix"
(if crossMingw then [ else if targetPlatform.isWindows then "win32"
"--enable-threads=win32" else "single"}"
"--enable-sjlj-exceptions" "--enable-nls"
"--enable-hash-synchronization" "--disable-decimal-float" # No final libdecnumber (it may work only in 386)
"--enable-libssp" ] ++ optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [
"--disable-nls" # libsanitizer requires netrom/netrom.h which is not
"--with-dwarf2" # available in uclibc.
# To keep ABI compatibility with upstream mingw-w64 "--disable-libsanitizer"
"--enable-fully-dynamic-string" # In uclibc cases, libgomp needs an additional '-ldl'
] else # and as I don't know how to pass it, I disable libgomp.
optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [ "--disable-libgomp"
# In uclibc cases, libgomp needs an additional '-ldl' ] ++ optionals (targetPlatform.libc == "musl") [
# and as I don't know how to pass it, I disable libgomp. # musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865
"--disable-libgomp" "--disable-libmpx"
] ] ++ optionals crossMingw [
++ optional (targetPlatform.libc == "newlib") "--with-newlib" "--enable-sjlj-exceptions"
++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc" "--enable-hash-synchronization"
++ [ "--enable-libssp"
"--enable-threads=${if targetPlatform.isUnix then "posix" "--disable-nls"
else if targetPlatform.isWindows then "win32" "--with-dwarf2"
else "single"}" # To keep ABI compatibility with upstream mingw-w64
"--enable-nls" "--enable-fully-dynamic-string"
"--disable-decimal-float" # No final libdecnumber (it may work only in 386) ] ++ optional (targetPlatform.libc == "newlib") "--with-newlib"
])); ++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc"
);
stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final"; stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final";
crossNameAddon = if targetPlatform != hostPlatform then "${targetPlatform.config}${stageNameAddon}-" else ""; crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else "";
bootstrap = targetPlatform == hostPlatform; bootstrap = targetPlatform == hostPlatform;

View File

@ -106,20 +106,7 @@ let version = "4.9.4";
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" [ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++ "--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
(if crossMingw && crossStageStatic then [ (if 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-libssp"
"--disable-nls" "--disable-nls"
"--without-headers" "--without-headers"
@ -130,41 +117,47 @@ let version = "4.9.4";
"--disable-libatomic" # requires libc "--disable-libatomic" # requires libc
"--disable-decimal-float" # requires libc "--disable-decimal-float" # requires libc
"--disable-libmpx" # 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 [ ] else [
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot" (if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}") else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}")
"--enable-__cxa_atexit" "--enable-__cxa_atexit"
"--enable-long-long" "--enable-long-long"
] ++ "--enable-threads=${if targetPlatform.isUnix then "posix"
(if crossMingw then [ else if targetPlatform.isWindows then "win32"
"--enable-threads=win32" else "single"}"
"--enable-sjlj-exceptions" "--enable-nls"
"--enable-hash-synchronization" "--disable-decimal-float" # No final libdecnumber (it may work only in 386)
"--enable-libssp" ] ++ optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [
"--disable-nls" # libsanitizer requires netrom/netrom.h which is not
"--with-dwarf2" # available in uclibc.
# To keep ABI compatibility with upstream mingw-w64 "--disable-libsanitizer"
"--enable-fully-dynamic-string" # In uclibc cases, libgomp needs an additional '-ldl'
] else # and as I don't know how to pass it, I disable libgomp.
optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [ "--disable-libgomp"
# libsanitizer requires netrom/netrom.h which is not ] ++ optionals (targetPlatform.libc == "musl") [
# available in uclibc. # musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865
"--disable-libsanitizer" "--disable-libmpx"
# In uclibc cases, libgomp needs an additional '-ldl' ] ++ optionals crossMingw [
# and as I don't know how to pass it, I disable libgomp. "--enable-sjlj-exceptions"
"--disable-libgomp" "--enable-hash-synchronization"
] "--enable-libssp"
++ optional (targetPlatform.libc == "newlib") "--with-newlib" "--disable-nls"
++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc" "--with-dwarf2"
++ [ # To keep ABI compatibility with upstream mingw-w64
"--enable-threads=${if targetPlatform.isUnix then "posix" "--enable-fully-dynamic-string"
else if targetPlatform.isWindows then "win32" ] ++ optional (targetPlatform.libc == "newlib") "--with-newlib"
else "single"}" ++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc"
"--enable-nls" );
"--disable-decimal-float" # No final libdecnumber (it may work only in 386)
]));
stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final"; stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final";
crossNameAddon = if targetPlatform != hostPlatform then "${targetPlatform.config}${stageNameAddon}-" else ""; crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else "";
bootstrap = targetPlatform == hostPlatform; bootstrap = targetPlatform == hostPlatform;

View File

@ -93,20 +93,7 @@ let version = "5.5.0";
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" [ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++ "--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
(if crossMingw && crossStageStatic then [ (if 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-libssp"
"--disable-nls" "--disable-nls"
"--without-headers" "--without-headers"
@ -117,41 +104,47 @@ let version = "5.5.0";
"--disable-libatomic" # requires libc "--disable-libatomic" # requires libc
"--disable-decimal-float" # requires libc "--disable-decimal-float" # requires libc
"--disable-libmpx" # 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 [ ] else [
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot" (if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}") else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}")
"--enable-__cxa_atexit" "--enable-__cxa_atexit"
"--enable-long-long" "--enable-long-long"
] ++ "--enable-threads=${if targetPlatform.isUnix then "posix"
(if crossMingw then [ else if targetPlatform.isWindows then "win32"
"--enable-threads=win32" else "single"}"
"--enable-sjlj-exceptions" "--enable-nls"
"--enable-hash-synchronization" "--disable-decimal-float" # No final libdecnumber (it may work only in 386)
"--enable-libssp" ] ++ optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [
"--disable-nls" # libsanitizer requires netrom/netrom.h which is not
"--with-dwarf2" # available in uclibc.
# To keep ABI compatibility with upstream mingw-w64 "--disable-libsanitizer"
"--enable-fully-dynamic-string" # In uclibc cases, libgomp needs an additional '-ldl'
] else # and as I don't know how to pass it, I disable libgomp.
optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [ "--disable-libgomp"
# libsanitizer requires netrom/netrom.h which is not ] ++ optionals (targetPlatform.libc == "musl") [
# available in uclibc. # musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865
"--disable-libsanitizer" "--disable-libmpx"
# In uclibc cases, libgomp needs an additional '-ldl' ] ++ optionals crossMingw [
# and as I don't know how to pass it, I disable libgomp. "--enable-sjlj-exceptions"
"--disable-libgomp" "--enable-hash-synchronization"
] "--enable-libssp"
++ optional (targetPlatform.libc == "newlib") "--with-newlib" "--disable-nls"
++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc" "--with-dwarf2"
++ [ # To keep ABI compatibility with upstream mingw-w64
"--enable-threads=${if targetPlatform.isUnix then "posix" "--enable-fully-dynamic-string"
else if targetPlatform.isWindows then "win32" ] ++ optional (targetPlatform.libc == "newlib") "--with-newlib"
else "single"}" ++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc"
"--enable-nls" );
"--disable-decimal-float" # No final libdecnumber (it may work only in 386)
]));
stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final"; stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final";
crossNameAddon = if targetPlatform != hostPlatform then "${targetPlatform.config}${stageNameAddon}-" else ""; crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else "";
bootstrap = targetPlatform == hostPlatform; bootstrap = targetPlatform == hostPlatform;

View File

@ -90,20 +90,7 @@ let version = "6.5.0";
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" [ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++ "--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
(if crossMingw && crossStageStatic then [ (if 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-libssp"
"--disable-nls" "--disable-nls"
"--without-headers" "--without-headers"
@ -114,43 +101,47 @@ let version = "6.5.0";
"--disable-libatomic" # requires libc "--disable-libatomic" # requires libc
"--disable-decimal-float" # requires libc "--disable-decimal-float" # requires libc
"--disable-libmpx" # 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 [ ] else [
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot" (if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}") else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}")
"--enable-__cxa_atexit" "--enable-__cxa_atexit"
"--enable-long-long" "--enable-long-long"
] ++ "--enable-threads=${if targetPlatform.isUnix then "posix"
(if crossMingw then [ else if targetPlatform.isWindows then "win32"
"--enable-threads=win32" else "single"}"
"--enable-sjlj-exceptions" "--enable-nls"
"--enable-hash-synchronization" "--disable-decimal-float" # No final libdecnumber (it may work only in 386)
"--enable-libssp" ] ++ optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [
"--disable-nls" # libsanitizer requires netrom/netrom.h which is not
"--with-dwarf2" # available in uclibc.
# To keep ABI compatibility with upstream mingw-w64 "--disable-libsanitizer"
"--enable-fully-dynamic-string" # In uclibc cases, libgomp needs an additional '-ldl'
] else # and as I don't know how to pass it, I disable libgomp.
optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [ "--disable-libgomp"
# libsanitizer requires netrom/netrom.h which is not ] ++ optionals (targetPlatform.libc == "musl") [
# available in uclibc. # musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865
"--disable-libsanitizer" "--disable-libmpx"
# In uclibc cases, libgomp needs an additional '-ldl' ] ++ optionals crossMingw [
# and as I don't know how to pass it, I disable libgomp. "--enable-sjlj-exceptions"
"--disable-libgomp" "--enable-hash-synchronization"
# musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865 "--enable-libssp"
"--disable-libmpx" "--disable-nls"
] "--with-dwarf2"
++ optional (targetPlatform.libc == "newlib") "--with-newlib" # To keep ABI compatibility with upstream mingw-w64
++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc" "--enable-fully-dynamic-string"
++ [ ] ++ optional (targetPlatform.libc == "newlib") "--with-newlib"
"--enable-threads=${if targetPlatform.isUnix then "posix" ++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc"
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"; stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final";
crossNameAddon = if targetPlatform != hostPlatform then "${targetPlatform.config}${stageNameAddon}-" else ""; crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else "";
bootstrap = targetPlatform == hostPlatform; bootstrap = targetPlatform == hostPlatform;

View File

@ -67,20 +67,7 @@ let version = "7.4.0";
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" [ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++ "--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
(if crossMingw && crossStageStatic then [ (if crossStageStatic then [
"--with-headers=${getDev libcCross}${libcCross.incdir or "/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-libssp"
"--disable-nls" "--disable-nls"
"--without-headers" "--without-headers"
@ -91,44 +78,47 @@ let version = "7.4.0";
"--disable-libatomic" # requires libc "--disable-libatomic" # requires libc
"--disable-decimal-float" # requires libc "--disable-decimal-float" # requires libc
"--disable-libmpx" # 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 [ ] else [
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot" (if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}") else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}")
"--enable-__cxa_atexit" "--enable-__cxa_atexit"
"--enable-long-long" "--enable-long-long"
] ++ "--enable-threads=${if targetPlatform.isUnix then "posix"
(if crossMingw then [ else if targetPlatform.isWindows then "win32"
"--enable-threads=win32" else "single"}"
"--enable-sjlj-exceptions" "--enable-nls"
"--enable-hash-synchronization" "--disable-decimal-float" # No final libdecnumber (it may work only in 386)
"--enable-libssp" ] ++ optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [
"--disable-nls" # libsanitizer requires netrom/netrom.h which is not
"--with-dwarf2" # available in uclibc.
# To keep ABI compatibility with upstream mingw-w64 "--disable-libsanitizer"
"--enable-fully-dynamic-string" # In uclibc cases, libgomp needs an additional '-ldl'
] else # and as I don't know how to pass it, I disable libgomp.
optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [ "--disable-libgomp"
# libsanitizer requires netrom/netrom.h which is not ] ++ optionals (targetPlatform.libc == "musl") [
# available in uclibc. # musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865
"--disable-libsanitizer" "--disable-libmpx"
# In uclibc cases, libgomp needs an additional '-ldl' ] ++ optionals crossMingw [
# and as I don't know how to pass it, I disable libgomp. "--enable-sjlj-exceptions"
"--disable-libgomp" "--enable-hash-synchronization"
# musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865 "--enable-libssp"
"--disable-libmpx" "--disable-nls"
] "--with-dwarf2"
++ optional (targetPlatform.libc == "newlib") "--with-newlib" # To keep ABI compatibility with upstream mingw-w64
++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc" "--enable-fully-dynamic-string"
++ [ ] ++ optional (targetPlatform.libc == "newlib") "--with-newlib"
"--enable-threads=${if targetPlatform.isUnix then "posix" ++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc"
else if targetPlatform.isWindows then "win32" );
else "single"}"
"--enable-nls"
# No final libdecnumber (it may work only in 386)
"--disable-decimal-float"
]));
stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final"; stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final";
crossNameAddon = if targetPlatform != hostPlatform then "${targetPlatform.config}${stageNameAddon}-" else ""; crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else "";
bootstrap = targetPlatform == hostPlatform; bootstrap = targetPlatform == hostPlatform;

View File

@ -59,20 +59,7 @@ let version = "8.3.0";
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" [ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++ "--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
(if crossMingw && crossStageStatic then [ (if 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-libssp"
"--disable-nls" "--disable-nls"
"--without-headers" "--without-headers"
@ -83,41 +70,45 @@ let version = "8.3.0";
"--disable-libatomic" # requires libc "--disable-libatomic" # requires libc
"--disable-decimal-float" # requires libc "--disable-decimal-float" # requires libc
"--disable-libmpx" # 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 [ ] else [
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot" (if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}") else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}")
"--enable-__cxa_atexit" "--enable-__cxa_atexit"
"--enable-long-long" "--enable-long-long"
] ++ "--enable-threads=${if targetPlatform.isUnix then "posix"
(if crossMingw then [ else if targetPlatform.isWindows then "win32"
"--enable-threads=win32" else "single"}"
"--enable-sjlj-exceptions" "--enable-nls"
"--enable-hash-synchronization" "--disable-decimal-float" # No final libdecnumber (it may work only in 386)
"--enable-libssp" ] ++ optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [
"--disable-nls" # libsanitizer requires netrom/netrom.h which is not
"--with-dwarf2" # available in uclibc.
# To keep ABI compatibility with upstream mingw-w64 "--disable-libsanitizer"
"--enable-fully-dynamic-string" # In uclibc cases, libgomp needs an additional '-ldl'
] else # and as I don't know how to pass it, I disable libgomp.
optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [ "--disable-libgomp"
# libsanitizer requires netrom/netrom.h which is not ] ++ optionals (targetPlatform.libc == "musl") [
# available in uclibc. # musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865
"--disable-libsanitizer" "--disable-libmpx"
# In uclibc cases, libgomp needs an additional '-ldl' ] ++ optionals crossMingw [
# and as I don't know how to pass it, I disable libgomp. "--enable-sjlj-exceptions"
"--disable-libgomp" "--enable-hash-synchronization"
# musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865 "--enable-libssp"
"--disable-libmpx" "--disable-nls"
] "--with-dwarf2"
++ optional (targetPlatform.libc == "newlib") "--with-newlib" # To keep ABI compatibility with upstream mingw-w64
++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc" "--enable-fully-dynamic-string"
++ [ ] ++ optional (targetPlatform.libc == "newlib") "--with-newlib"
"--enable-threads=${if targetPlatform.isUnix then "posix" ++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc"
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"; stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final";
crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else ""; crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else "";
@ -126,7 +117,7 @@ let version = "8.3.0";
in in
stdenv.mkDerivation ({ stdenv.mkDerivation ({
name = "${name}${if stripped then "" else "-debug"}-${version}" + crossNameAddon; name = crossNameAddon + "${name}${if stripped then "" else "-debug"}-${version}";
builder = ../builder.sh; builder = ../builder.sh;

View File

@ -58,20 +58,7 @@ let version = "9.2.0";
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" [ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++ "--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
(if crossMingw && crossStageStatic then [ (if 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-libssp"
"--disable-nls" "--disable-nls"
"--without-headers" "--without-headers"
@ -82,41 +69,45 @@ let version = "9.2.0";
"--disable-libatomic" # requires libc "--disable-libatomic" # requires libc
"--disable-decimal-float" # requires libc "--disable-decimal-float" # requires libc
"--disable-libmpx" # 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 [ ] else [
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot" (if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}") else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}")
"--enable-__cxa_atexit" "--enable-__cxa_atexit"
"--enable-long-long" "--enable-long-long"
] ++ "--enable-threads=${if targetPlatform.isUnix then "posix"
(if crossMingw then [ else if targetPlatform.isWindows then "win32"
"--enable-threads=win32" else "single"}"
"--enable-sjlj-exceptions" "--enable-nls"
"--enable-hash-synchronization" "--disable-decimal-float" # No final libdecnumber (it may work only in 386)
"--enable-libssp" ] ++ optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [
"--disable-nls" # libsanitizer requires netrom/netrom.h which is not
"--with-dwarf2" # available in uclibc.
# To keep ABI compatibility with upstream mingw-w64 "--disable-libsanitizer"
"--enable-fully-dynamic-string" # In uclibc cases, libgomp needs an additional '-ldl'
] else # and as I don't know how to pass it, I disable libgomp.
optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [ "--disable-libgomp"
# libsanitizer requires netrom/netrom.h which is not ] ++ optionals (targetPlatform.libc == "musl") [
# available in uclibc. # musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865
"--disable-libsanitizer" "--disable-libmpx"
# In uclibc cases, libgomp needs an additional '-ldl' ] ++ optionals crossMingw [
# and as I don't know how to pass it, I disable libgomp. "--enable-sjlj-exceptions"
"--disable-libgomp" "--enable-hash-synchronization"
# musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865 "--enable-libssp"
"--disable-libmpx" "--disable-nls"
] "--with-dwarf2"
++ optional (targetPlatform.libc == "newlib") "--with-newlib" # To keep ABI compatibility with upstream mingw-w64
++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc" "--enable-fully-dynamic-string"
++ [ ] ++ optional (targetPlatform.libc == "newlib") "--with-newlib"
"--enable-threads=${if targetPlatform.isUnix then "posix" ++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc"
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"; stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final";
crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else ""; crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else "";
@ -125,7 +116,7 @@ let version = "9.2.0";
in in
stdenv.mkDerivation ({ stdenv.mkDerivation ({
name = "${name}${if stripped then "" else "-debug"}-${version}" + crossNameAddon; name = crossNameAddon + "${name}${if stripped then "" else "-debug"}-${version}";
builder = ../builder.sh; builder = ../builder.sh;

View File

@ -55,20 +55,7 @@ let version = "7-20170409";
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" [ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++ "--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
(if crossMingw && crossStageStatic then [ (if 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-libssp"
"--disable-nls" "--disable-nls"
"--without-headers" "--without-headers"
@ -79,39 +66,45 @@ let version = "7-20170409";
"--disable-libatomic" # requires libc "--disable-libatomic" # requires libc
"--disable-decimal-float" # requires libc "--disable-decimal-float" # requires libc
"--disable-libmpx" # 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 [ ] else [
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot" (if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
else "--with-headers=${getDev libcCross}/include") else "--with-headers=${getDev libcCross}${libcCross.incdir or "/include"}")
"--enable-__cxa_atexit" "--enable-__cxa_atexit"
"--enable-long-long" "--enable-long-long"
] ++ "--enable-threads=${if targetPlatform.isUnix then "posix"
(if crossMingw then [ else if targetPlatform.isWindows then "win32"
"--enable-threads=win32" else "single"}"
"--enable-sjlj-exceptions" "--enable-nls"
"--enable-hash-synchronization" "--disable-decimal-float" # No final libdecnumber (it may work only in 386)
"--enable-libssp" ] ++ optionals (targetPlatform.libc == "uclibc" || targetPlatform.libc == "musl") [
"--disable-nls" # libsanitizer requires netrom/netrom.h which is not
"--with-dwarf2" # available in uclibc.
# To keep ABI compatibility with upstream mingw-w64 "--disable-libsanitizer"
"--enable-fully-dynamic-string" # In uclibc cases, libgomp needs an additional '-ldl'
] else # and as I don't know how to pass it, I disable libgomp.
optionals (targetPlatform.libc == "uclibc") [ "--disable-libgomp"
# libsanitizer requires netrom/netrom.h which is not ] ++ optionals (targetPlatform.libc == "musl") [
# available in uclibc. # musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865
"--disable-libsanitizer" "--disable-libmpx"
# In uclibc cases, libgomp needs an additional '-ldl' ] ++ optionals crossMingw [
# and as I don't know how to pass it, I disable libgomp. "--enable-sjlj-exceptions"
"--disable-libgomp" "--enable-hash-synchronization"
] "--enable-libssp"
++ optional (targetPlatform.libc == "newlib") "--with-newlib" "--disable-nls"
++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc" "--with-dwarf2"
++ [ # To keep ABI compatibility with upstream mingw-w64
"--enable-threads=${if targetPlatform.isUnix then "posix" "--enable-fully-dynamic-string"
else if targetPlatform.isWindows then "win32" ] ++ optional (targetPlatform.libc == "newlib") "--with-newlib"
else "single"}" ++ optional (targetPlatform.libc == "avrlibc") "--with-avrlibc"
"--enable-nls" );
"--disable-decimal-float" # No final libdecnumber (it may work only in 386)
]));
stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final"; stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final";
crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else ""; crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else "";
@ -120,7 +113,7 @@ let version = "7-20170409";
in in
stdenv.mkDerivation ({ stdenv.mkDerivation ({
name = "${name}${if stripped then "" else "-debug"}-${version}" + crossNameAddon; name = crossNameAddon + "${name}${if stripped then "" else "-debug"}-${version}";
builder = ../builder.sh; builder = ../builder.sh;