mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-28 14:22:50 +03:00
Merge pull request #73180 from Ericson2314/gcc-dedup-configure-flags
gcc: Deduplicate `preConfigure` and `configureFlags`
This commit is contained in:
commit
40bb9d1143
@ -7,6 +7,7 @@
|
|||||||
, profiledCompiler ? false
|
, profiledCompiler ? false
|
||||||
, staticCompiler ? false
|
, staticCompiler ? false
|
||||||
, enableShared ? true
|
, enableShared ? true
|
||||||
|
, enableLTO ? true
|
||||||
, texinfo ? null
|
, texinfo ? null
|
||||||
, perl ? null # optional, for texi2pod (then pod2man); required for Java
|
, perl ? null # optional, for texi2pod (then pod2man); required for Java
|
||||||
, gmp, mpfr, libmpc, gettext, which
|
, gmp, mpfr, libmpc, gettext, which
|
||||||
@ -96,66 +97,9 @@ let version = "4.8.5";
|
|||||||
|
|
||||||
/* Cross-gcc settings (build == host != target) */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
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";
|
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;
|
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
# We need all these X libraries when building AWT with GTK.
|
# We need all these X libraries when building AWT with GTK.
|
||||||
@ -228,98 +172,45 @@ stdenv.mkDerivation ({
|
|||||||
++ (optional hostPlatform.isDarwin gnused)
|
++ (optional hostPlatform.isDarwin gnused)
|
||||||
;
|
;
|
||||||
|
|
||||||
preConfigure = stdenv.lib.optionalString (hostPlatform.isSunOS && hostPlatform.is64bit) ''
|
preConfigure = import ../common/pre-configure.nix {
|
||||||
export NIX_LDFLAGS=`echo $NIX_LDFLAGS | sed -e s~$prefix/lib~$prefix/lib/amd64~g`
|
inherit (stdenv) lib;
|
||||||
export LDFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $LDFLAGS_FOR_TARGET"
|
inherit version hostPlatform langJava langGo;
|
||||||
export CXXFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CXXFLAGS_FOR_TARGET"
|
};
|
||||||
export CFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CFLAGS_FOR_TARGET"
|
|
||||||
'';
|
|
||||||
|
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
|
|
||||||
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
||||||
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags =
|
configureFlags = import ../common/configure-flags.nix {
|
||||||
# Basic dependencies
|
inherit
|
||||||
[
|
stdenv
|
||||||
"--with-gmp-include=${gmp.dev}/include"
|
targetPackages
|
||||||
"--with-gmp-lib=${gmp.out}/lib"
|
crossStageStatic libcCross
|
||||||
"--with-mpfr-include=${mpfr.dev}/include"
|
version
|
||||||
"--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
|
gmp mpfr libmpc libelf isl
|
||||||
[
|
cloog
|
||||||
"--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)
|
enableLTO
|
||||||
then ["--enable-multilib" "--disable-libquadmath"]
|
enableMultilib
|
||||||
else ["--disable-multilib"]) ++
|
enablePlugin
|
||||||
optional (!enableShared) "--disable-shared" ++
|
enableShared
|
||||||
(if enablePlugin
|
|
||||||
then ["--enable-plugin"]
|
|
||||||
else ["--disable-plugin"]) ++
|
|
||||||
|
|
||||||
# Optional features
|
langC
|
||||||
optional (isl != null) "--with-isl=${isl}" ++
|
langCC
|
||||||
optionals (cloog != null) [
|
langFortran
|
||||||
"--with-cloog=${cloog}"
|
langJava javaAwtGtk javaAntlr javaEcj
|
||||||
"--disable-cloog-version-check"
|
langGo
|
||||||
"--enable-cloog-backend=isl"
|
langObjC
|
||||||
] ++
|
langObjCpp
|
||||||
|
;
|
||||||
# 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"
|
|
||||||
]
|
|
||||||
;
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
buildFlags = optional
|
buildFlags = optional
|
||||||
(bootstrap && hostPlatform == buildPlatform)
|
(hostPlatform == buildPlatform)
|
||||||
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
||||||
|
|
||||||
dontStrip = !stripped;
|
dontStrip = !stripped;
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
, profiledCompiler ? false
|
, profiledCompiler ? false
|
||||||
, staticCompiler ? false
|
, staticCompiler ? false
|
||||||
, enableShared ? true
|
, enableShared ? true
|
||||||
|
, enableLTO ? true
|
||||||
, texinfo ? null
|
, texinfo ? null
|
||||||
, perl ? null # optional, for texi2pod (then pod2man); required for Java
|
, perl ? null # optional, for texi2pod (then pod2man); required for Java
|
||||||
, gmp, mpfr, libmpc, gettext, which
|
, gmp, mpfr, libmpc, gettext, which
|
||||||
@ -101,66 +102,9 @@ let version = "4.9.4";
|
|||||||
|
|
||||||
/* Cross-gcc settings (build == host != target) */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
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";
|
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;
|
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
# We need all these X libraries when building AWT with GTK.
|
# We need all these X libraries when building AWT with GTK.
|
||||||
@ -234,102 +178,45 @@ stdenv.mkDerivation ({
|
|||||||
++ (optional hostPlatform.isDarwin gnused)
|
++ (optional hostPlatform.isDarwin gnused)
|
||||||
;
|
;
|
||||||
|
|
||||||
preConfigure = stdenv.lib.optionalString (hostPlatform.isSunOS && hostPlatform.is64bit) ''
|
preConfigure = import ../common/pre-configure.nix {
|
||||||
sed -i -e "s/-lrt//g" libstdc++-v3/configure
|
inherit (stdenv) lib;
|
||||||
export NIX_LDFLAGS=`echo $NIX_LDFLAGS | sed -e s~$prefix/lib~$prefix/lib/amd64~g`
|
inherit version hostPlatform langJava langGo;
|
||||||
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"
|
|
||||||
''
|
|
||||||
+ stdenv.lib.optionalString (langJava || langGo) ''
|
|
||||||
export lib=$out;
|
|
||||||
'';
|
|
||||||
|
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
|
|
||||||
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
||||||
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags =
|
configureFlags = import ../common/configure-flags.nix {
|
||||||
# Basic dependencies
|
inherit
|
||||||
[
|
stdenv
|
||||||
"--with-gmp-include=${gmp.dev}/include"
|
targetPackages
|
||||||
"--with-gmp-lib=${gmp.out}/lib"
|
crossStageStatic libcCross
|
||||||
"--with-mpfr-include=${mpfr.dev}/include"
|
version
|
||||||
"--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
|
gmp mpfr libmpc libelf isl
|
||||||
[
|
cloog
|
||||||
"--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)
|
enableLTO
|
||||||
then ["--enable-multilib" "--disable-libquadmath"]
|
enableMultilib
|
||||||
else ["--disable-multilib"]) ++
|
enablePlugin
|
||||||
optional (!enableShared) "--disable-shared" ++
|
enableShared
|
||||||
(if enablePlugin
|
|
||||||
then ["--enable-plugin"]
|
|
||||||
else ["--disable-plugin"]) ++
|
|
||||||
|
|
||||||
# Optional features
|
langC
|
||||||
optional (isl != null) "--with-isl=${isl}" ++
|
langCC
|
||||||
optionals (cloog != null) [
|
langFortran
|
||||||
"--with-cloog=${cloog}"
|
langJava javaAwtGtk javaAntlr javaEcj
|
||||||
"--disable-cloog-version-check"
|
langGo
|
||||||
"--enable-cloog-backend=isl"
|
langObjC
|
||||||
] ++
|
langObjCpp
|
||||||
|
;
|
||||||
# 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"
|
|
||||||
]
|
|
||||||
;
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
buildFlags = optional
|
buildFlags = optional
|
||||||
(bootstrap && hostPlatform == buildPlatform)
|
(hostPlatform == buildPlatform)
|
||||||
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
||||||
|
|
||||||
dontStrip = !stripped;
|
dontStrip = !stripped;
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
, profiledCompiler ? false
|
, profiledCompiler ? false
|
||||||
, staticCompiler ? false
|
, staticCompiler ? false
|
||||||
, enableShared ? true
|
, enableShared ? true
|
||||||
|
, enableLTO ? true
|
||||||
, texinfo ? null
|
, texinfo ? null
|
||||||
, perl ? null # optional, for texi2pod (then pod2man); required for Java
|
, perl ? null # optional, for texi2pod (then pod2man); required for Java
|
||||||
, gmp, mpfr, libmpc, gettext, which
|
, gmp, mpfr, libmpc, gettext, which
|
||||||
@ -88,66 +89,9 @@ let version = "5.5.0";
|
|||||||
|
|
||||||
/* Cross-gcc settings (build == host != target) */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
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";
|
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;
|
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
# We need all these X libraries when building AWT with GTK.
|
# We need all these X libraries when building AWT with GTK.
|
||||||
@ -242,99 +186,44 @@ stdenv.mkDerivation ({
|
|||||||
|
|
||||||
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";
|
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";
|
||||||
|
|
||||||
preConfigure = stdenv.lib.optionalString (hostPlatform.isSunOS && hostPlatform.is64bit) ''
|
preConfigure = import ../common/pre-configure.nix {
|
||||||
export NIX_LDFLAGS=`echo $NIX_LDFLAGS | sed -e s~$prefix/lib~$prefix/lib/amd64~g`
|
inherit (stdenv) lib;
|
||||||
export LDFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $LDFLAGS_FOR_TARGET"
|
inherit version hostPlatform langJava langGo;
|
||||||
export CXXFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CXXFLAGS_FOR_TARGET"
|
};
|
||||||
export CFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CFLAGS_FOR_TARGET"
|
|
||||||
'';
|
|
||||||
|
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
|
|
||||||
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
||||||
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags =
|
configureFlags = import ../common/configure-flags.nix {
|
||||||
# Basic dependencies
|
inherit
|
||||||
[
|
stdenv
|
||||||
"--with-gmp-include=${gmp.dev}/include"
|
targetPackages
|
||||||
"--with-gmp-lib=${gmp.out}/lib"
|
crossStageStatic libcCross
|
||||||
"--with-mpfr-include=${mpfr.dev}/include"
|
version
|
||||||
"--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
|
gmp mpfr libmpc libelf isl
|
||||||
[
|
|
||||||
"--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)
|
enableLTO
|
||||||
then ["--enable-multilib" "--disable-libquadmath"]
|
enableMultilib
|
||||||
else ["--disable-multilib"]) ++
|
enablePlugin
|
||||||
optional (!enableShared) "--disable-shared" ++
|
enableShared
|
||||||
(if enablePlugin
|
|
||||||
then ["--enable-plugin"]
|
|
||||||
else ["--disable-plugin"]) ++
|
|
||||||
|
|
||||||
# Optional features
|
langC
|
||||||
optional (isl != null) "--with-isl=${isl}" ++
|
langCC
|
||||||
|
langFortran
|
||||||
# Java options
|
langJava javaAwtGtk javaAntlr javaEcj
|
||||||
optionals langJava [
|
langGo
|
||||||
"--with-ecj-jar=${javaEcj}"
|
langObjC
|
||||||
|
langObjCpp
|
||||||
# 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"
|
|
||||||
]
|
|
||||||
;
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
buildFlags = optional
|
buildFlags = optional
|
||||||
(bootstrap && hostPlatform == buildPlatform)
|
(hostPlatform == buildPlatform)
|
||||||
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
||||||
|
|
||||||
dontStrip = !stripped;
|
dontStrip = !stripped;
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
, profiledCompiler ? false
|
, profiledCompiler ? false
|
||||||
, staticCompiler ? false
|
, staticCompiler ? false
|
||||||
, enableShared ? true
|
, enableShared ? true
|
||||||
|
, enableLTO ? true
|
||||||
, texinfo ? null
|
, texinfo ? null
|
||||||
, perl ? null # optional, for texi2pod (then pod2man); required for Java
|
, perl ? null # optional, for texi2pod (then pod2man); required for Java
|
||||||
, gmp, mpfr, libmpc, gettext, which
|
, gmp, mpfr, libmpc, gettext, which
|
||||||
@ -85,66 +86,9 @@ let version = "6.5.0";
|
|||||||
|
|
||||||
/* Cross-gcc settings (build == host != target) */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
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";
|
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;
|
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
# We need all these X libraries when building AWT with GTK.
|
# We need all these X libraries when building AWT with GTK.
|
||||||
@ -244,102 +188,44 @@ stdenv.mkDerivation ({
|
|||||||
|
|
||||||
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";
|
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";
|
||||||
|
|
||||||
preConfigure = stdenv.lib.optionalString (hostPlatform.isSunOS && hostPlatform.is64bit) ''
|
preConfigure = import ../common/pre-configure.nix {
|
||||||
export NIX_LDFLAGS=`echo $NIX_LDFLAGS | sed -e s~$prefix/lib~$prefix/lib/amd64~g`
|
inherit (stdenv) lib;
|
||||||
export LDFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $LDFLAGS_FOR_TARGET"
|
inherit version hostPlatform langJava langGo;
|
||||||
export CXXFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CXXFLAGS_FOR_TARGET"
|
};
|
||||||
export CFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CFLAGS_FOR_TARGET"
|
|
||||||
''
|
|
||||||
+ stdenv.lib.optionalString (langJava || langGo) ''
|
|
||||||
export lib=$out;
|
|
||||||
'';
|
|
||||||
|
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
|
|
||||||
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
||||||
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags =
|
configureFlags = import ../common/configure-flags.nix {
|
||||||
# Basic dependencies
|
inherit
|
||||||
[
|
stdenv
|
||||||
"--with-gmp-include=${gmp.dev}/include"
|
targetPackages
|
||||||
"--with-gmp-lib=${gmp.out}/lib"
|
crossStageStatic libcCross
|
||||||
"--with-mpfr-include=${mpfr.dev}/include"
|
version
|
||||||
"--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
|
gmp mpfr libmpc libelf isl
|
||||||
[
|
|
||||||
"--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)
|
enableLTO
|
||||||
then ["--enable-multilib" "--disable-libquadmath"]
|
enableMultilib
|
||||||
else ["--disable-multilib"]) ++
|
enablePlugin
|
||||||
optional (!enableShared) "--disable-shared" ++
|
enableShared
|
||||||
(if enablePlugin
|
|
||||||
then ["--enable-plugin"]
|
|
||||||
else ["--disable-plugin"]) ++
|
|
||||||
|
|
||||||
# Optional features
|
langC
|
||||||
optional (isl != null) "--with-isl=${isl}" ++
|
langCC
|
||||||
|
langFortran
|
||||||
# Java options
|
langJava javaAwtGtk javaAntlr javaEcj
|
||||||
optionals langJava [
|
langGo
|
||||||
"--with-ecj-jar=${javaEcj}"
|
langObjC
|
||||||
|
langObjCpp
|
||||||
# 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"
|
|
||||||
]
|
|
||||||
;
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
buildFlags = optional
|
buildFlags = optional
|
||||||
(bootstrap && hostPlatform == buildPlatform)
|
(hostPlatform == buildPlatform)
|
||||||
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
||||||
|
|
||||||
dontStrip = !stripped;
|
dontStrip = !stripped;
|
||||||
|
@ -63,66 +63,9 @@ let version = "7.4.0";
|
|||||||
|
|
||||||
/* Cross-gcc settings (build == host != target) */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
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";
|
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;
|
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
stdenv.mkDerivation ({
|
stdenv.mkDerivation ({
|
||||||
@ -221,88 +164,45 @@ stdenv.mkDerivation ({
|
|||||||
NIX_CFLAGS_COMPILE = stdenv.lib.optionalString (stdenv.cc.isClang && langFortran) "-Wno-unused-command-line-argument";
|
NIX_CFLAGS_COMPILE = stdenv.lib.optionalString (stdenv.cc.isClang && langFortran) "-Wno-unused-command-line-argument";
|
||||||
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";
|
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";
|
||||||
|
|
||||||
preConfigure = stdenv.lib.optionalString (hostPlatform.isSunOS && hostPlatform.is64bit) ''
|
preConfigure = import ../common/pre-configure.nix {
|
||||||
export NIX_LDFLAGS=`echo $NIX_LDFLAGS | sed -e s~$prefix/lib~$prefix/lib/amd64~g`
|
inherit (stdenv) lib;
|
||||||
export LDFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $LDFLAGS_FOR_TARGET"
|
inherit version hostPlatform langGo;
|
||||||
export CXXFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CXXFLAGS_FOR_TARGET"
|
};
|
||||||
export CFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CFLAGS_FOR_TARGET"
|
|
||||||
'';
|
|
||||||
|
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
|
|
||||||
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
||||||
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags =
|
configureFlags = import ../common/configure-flags.nix {
|
||||||
# Basic dependencies
|
inherit
|
||||||
[
|
stdenv
|
||||||
"--with-gmp-include=${gmp.dev}/include"
|
targetPackages
|
||||||
"--with-gmp-lib=${gmp.out}/lib"
|
crossStageStatic libcCross
|
||||||
"--with-mpfr-include=${mpfr.dev}/include"
|
version
|
||||||
"--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
|
gmp mpfr libmpc libelf isl
|
||||||
[
|
|
||||||
(if enableLTO then "--enable-lto" else "--disable-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)
|
enableLTO
|
||||||
then ["--enable-multilib" "--disable-libquadmath"]
|
enableMultilib
|
||||||
else ["--disable-multilib"]) ++
|
enablePlugin
|
||||||
optional (!enableShared) "--disable-shared" ++
|
enableShared
|
||||||
(if enablePlugin
|
|
||||||
then ["--enable-plugin"]
|
|
||||||
else ["--disable-plugin"]) ++
|
|
||||||
|
|
||||||
# Optional features
|
langC
|
||||||
optional (isl != null) "--with-isl=${isl}" ++
|
langCC
|
||||||
|
langFortran
|
||||||
(import ../common/platform-flags.nix { inherit (stdenv) lib targetPlatform; }) ++
|
langGo
|
||||||
optional (targetPlatform != hostPlatform) crossConfigureFlags ++
|
langObjC
|
||||||
optional (!bootstrap) "--disable-bootstrap" ++
|
langObjCpp
|
||||||
|
;
|
||||||
# Platform-specific flags
|
} ++ optional (targetPlatform.isAarch64) "--enable-fix-cortex-a53-843419"
|
||||||
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"
|
|
||||||
]
|
|
||||||
++ optional (targetPlatform.isAarch64) "--enable-fix-cortex-a53-843419"
|
|
||||||
++ optional targetPlatform.isNetBSD "--disable-libcilkrts"
|
++ optional targetPlatform.isNetBSD "--disable-libcilkrts"
|
||||||
;
|
;
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
buildFlags = optional
|
buildFlags = optional
|
||||||
(bootstrap && hostPlatform == buildPlatform)
|
(hostPlatform == buildPlatform)
|
||||||
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
||||||
|
|
||||||
dontStrip = !stripped;
|
dontStrip = !stripped;
|
||||||
|
@ -55,66 +55,9 @@ let version = "8.3.0";
|
|||||||
|
|
||||||
/* Cross-gcc settings (build == host != target) */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
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";
|
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;
|
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
stdenv.mkDerivation ({
|
stdenv.mkDerivation ({
|
||||||
@ -212,86 +155,43 @@ stdenv.mkDerivation ({
|
|||||||
|
|
||||||
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";
|
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";
|
||||||
|
|
||||||
preConfigure = stdenv.lib.optionalString (hostPlatform.isSunOS && hostPlatform.is64bit) ''
|
preConfigure = import ../common/pre-configure.nix {
|
||||||
export NIX_LDFLAGS=`echo $NIX_LDFLAGS | sed -e s~$prefix/lib~$prefix/lib/amd64~g`
|
inherit (stdenv) lib;
|
||||||
export LDFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $LDFLAGS_FOR_TARGET"
|
inherit version hostPlatform langGo;
|
||||||
export CXXFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CXXFLAGS_FOR_TARGET"
|
};
|
||||||
export CFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CFLAGS_FOR_TARGET"
|
|
||||||
'';
|
|
||||||
|
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
|
|
||||||
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
||||||
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags =
|
configureFlags = import ../common/configure-flags.nix {
|
||||||
# Basic dependencies
|
inherit
|
||||||
[
|
stdenv
|
||||||
"--with-gmp-include=${gmp.dev}/include"
|
targetPackages
|
||||||
"--with-gmp-lib=${gmp.out}/lib"
|
crossStageStatic libcCross
|
||||||
"--with-mpfr-include=${mpfr.dev}/include"
|
version
|
||||||
"--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
|
gmp mpfr libmpc libelf isl
|
||||||
[
|
|
||||||
(if enableLTO then "--enable-lto" else "--disable-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)
|
enableLTO
|
||||||
then ["--enable-multilib" "--disable-libquadmath"]
|
enableMultilib
|
||||||
else ["--disable-multilib"]) ++
|
enablePlugin
|
||||||
optional (!enableShared) "--disable-shared" ++
|
enableShared
|
||||||
(if enablePlugin
|
|
||||||
then ["--enable-plugin"]
|
|
||||||
else ["--disable-plugin"]) ++
|
|
||||||
|
|
||||||
# Optional features
|
langC
|
||||||
optional (isl != null) "--with-isl=${isl}" ++
|
langCC
|
||||||
|
langFortran
|
||||||
(import ../common/platform-flags.nix { inherit (stdenv) lib targetPlatform; }) ++
|
langGo
|
||||||
optional (targetPlatform != hostPlatform) crossConfigureFlags ++
|
langObjC
|
||||||
optional (!bootstrap) "--disable-bootstrap" ++
|
langObjCpp
|
||||||
|
;
|
||||||
# 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"
|
|
||||||
]
|
|
||||||
;
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
buildFlags = optional
|
buildFlags = optional
|
||||||
(bootstrap && hostPlatform == buildPlatform)
|
(hostPlatform == buildPlatform)
|
||||||
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
||||||
|
|
||||||
dontStrip = !stripped;
|
dontStrip = !stripped;
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
, profiledCompiler ? false
|
, profiledCompiler ? false
|
||||||
, staticCompiler ? false
|
, staticCompiler ? false
|
||||||
, enableShared ? true
|
, enableShared ? true
|
||||||
|
, enableLTO ? true
|
||||||
, texinfo ? null
|
, texinfo ? null
|
||||||
, perl ? null # optional, for texi2pod (then pod2man)
|
, perl ? null # optional, for texi2pod (then pod2man)
|
||||||
, gmp, mpfr, libmpc, gettext, which
|
, gmp, mpfr, libmpc, gettext, which
|
||||||
@ -53,66 +54,9 @@ let version = "9.2.0";
|
|||||||
|
|
||||||
/* Cross-gcc settings (build == host != target) */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
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";
|
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;
|
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
stdenv.mkDerivation ({
|
stdenv.mkDerivation ({
|
||||||
@ -210,86 +154,43 @@ stdenv.mkDerivation ({
|
|||||||
|
|
||||||
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";
|
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";
|
||||||
|
|
||||||
preConfigure = stdenv.lib.optionalString (hostPlatform.isSunOS && hostPlatform.is64bit) ''
|
preConfigure = import ../common/pre-configure.nix {
|
||||||
export NIX_LDFLAGS=`echo $NIX_LDFLAGS | sed -e s~$prefix/lib~$prefix/lib/amd64~g`
|
inherit (stdenv) lib;
|
||||||
export LDFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $LDFLAGS_FOR_TARGET"
|
inherit version hostPlatform langGo;
|
||||||
export CXXFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CXXFLAGS_FOR_TARGET"
|
};
|
||||||
export CFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CFLAGS_FOR_TARGET"
|
|
||||||
'';
|
|
||||||
|
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
|
|
||||||
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
||||||
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags =
|
configureFlags = import ../common/configure-flags.nix {
|
||||||
# Basic dependencies
|
inherit
|
||||||
[
|
stdenv
|
||||||
"--with-gmp-include=${gmp.dev}/include"
|
targetPackages
|
||||||
"--with-gmp-lib=${gmp.out}/lib"
|
crossStageStatic libcCross
|
||||||
"--with-mpfr-include=${mpfr.dev}/include"
|
version
|
||||||
"--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
|
gmp mpfr libmpc libelf isl
|
||||||
[
|
|
||||||
"--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)
|
enableLTO
|
||||||
then ["--enable-multilib" "--disable-libquadmath"]
|
enableMultilib
|
||||||
else ["--disable-multilib"]) ++
|
enablePlugin
|
||||||
optional (!enableShared) "--disable-shared" ++
|
enableShared
|
||||||
(if enablePlugin
|
|
||||||
then ["--enable-plugin"]
|
|
||||||
else ["--disable-plugin"]) ++
|
|
||||||
|
|
||||||
# Optional features
|
langC
|
||||||
optional (isl != null) "--with-isl=${isl}" ++
|
langCC
|
||||||
|
langFortran
|
||||||
(import ../common/platform-flags.nix { inherit (stdenv) lib targetPlatform; }) ++
|
langGo
|
||||||
optional (targetPlatform != hostPlatform) crossConfigureFlags ++
|
langObjC
|
||||||
optional (!bootstrap) "--disable-bootstrap" ++
|
langObjCpp
|
||||||
|
;
|
||||||
# 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"
|
|
||||||
]
|
|
||||||
;
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
buildFlags = optional
|
buildFlags = optional
|
||||||
(bootstrap && hostPlatform == buildPlatform)
|
(hostPlatform == buildPlatform)
|
||||||
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
||||||
|
|
||||||
dontStrip = !stripped;
|
dontStrip = !stripped;
|
||||||
|
174
pkgs/development/compilers/gcc/common/configure-flags.nix
Normal file
174
pkgs/development/compilers/gcc/common/configure-flags.nix
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
{ stdenv
|
||||||
|
, targetPackages
|
||||||
|
|
||||||
|
, crossStageStatic, libcCross
|
||||||
|
, version
|
||||||
|
|
||||||
|
, gmp, mpfr, libmpc, libelf, isl
|
||||||
|
, cloog ? null
|
||||||
|
|
||||||
|
, enableLTO
|
||||||
|
, enableMultilib
|
||||||
|
, enablePlugin
|
||||||
|
, enableShared
|
||||||
|
|
||||||
|
, langC
|
||||||
|
, langCC
|
||||||
|
, langFortran
|
||||||
|
, langJava ? false, javaAwtGtk ? false, javaAntlr ? null, javaEcj ? null
|
||||||
|
, langGo
|
||||||
|
, langObjC
|
||||||
|
, langObjCpp
|
||||||
|
}:
|
||||||
|
|
||||||
|
assert cloog != null -> stdenv.lib.versionOlder version "5";
|
||||||
|
assert langJava -> stdenv.lib.versionOlder version "6";
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (stdenv)
|
||||||
|
buildPlatform hostPlatform targetPlatform
|
||||||
|
lib;
|
||||||
|
|
||||||
|
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
|
||||||
|
] ++ lib.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=${lib.getLib libcCross}/share/sysroot"
|
||||||
|
else "--with-headers=${lib.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)
|
||||||
|
] ++ lib.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"
|
||||||
|
] ++ lib.optionals (targetPlatform.libc == "musl") [
|
||||||
|
# musl at least, disable: https://git.buildroot.net/buildroot/commit/?id=873d4019f7fb00f6a80592224236b3ba7d657865
|
||||||
|
"--disable-libmpx"
|
||||||
|
] ++ lib.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"
|
||||||
|
] ++ lib.optional (targetPlatform.libc == "newlib") "--with-newlib"
|
||||||
|
++ lib.optional (targetPlatform.libc == "avrlibc") "--with-avrlibc"
|
||||||
|
);
|
||||||
|
|
||||||
|
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}"
|
||||||
|
]
|
||||||
|
++ lib.optional (libelf != null) "--with-libelf=${libelf}"
|
||||||
|
++ lib.optional (!(crossMingw && crossStageStatic))
|
||||||
|
"--with-native-system-header-dir=${lib.getDev stdenv.cc.libc}/include"
|
||||||
|
|
||||||
|
# Basic configuration
|
||||||
|
++ [
|
||||||
|
(lib.enableFeature enableLTO "lto")
|
||||||
|
"--disable-libstdcxx-pch"
|
||||||
|
"--without-included-gettext"
|
||||||
|
"--with-system-zlib"
|
||||||
|
"--enable-static"
|
||||||
|
"--enable-languages=${
|
||||||
|
lib.concatStrings (lib.intersperse ","
|
||||||
|
( lib.optional langC "c"
|
||||||
|
++ lib.optional langCC "c++"
|
||||||
|
++ lib.optional langFortran "fortran"
|
||||||
|
++ lib.optional langJava "java"
|
||||||
|
++ lib.optional langGo "go"
|
||||||
|
++ lib.optional langObjC "objc"
|
||||||
|
++ lib.optional langObjCpp "obj-c++"
|
||||||
|
++ lib.optionals crossDarwin [ "objc" "obj-c++" ]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}"
|
||||||
|
]
|
||||||
|
|
||||||
|
++ (if (enableMultilib || targetPlatform.isAvr)
|
||||||
|
then ["--enable-multilib" "--disable-libquadmath"]
|
||||||
|
else ["--disable-multilib"])
|
||||||
|
++ lib.optional (!enableShared) "--disable-shared"
|
||||||
|
++ [
|
||||||
|
(lib.enableFeature enablePlugin "plugin")
|
||||||
|
]
|
||||||
|
|
||||||
|
# Optional features
|
||||||
|
++ lib.optional (isl != null) "--with-isl=${isl}"
|
||||||
|
++ lib.optionals (cloog != null) [
|
||||||
|
"--with-cloog=${cloog}"
|
||||||
|
"--disable-cloog-version-check"
|
||||||
|
"--enable-cloog-backend=isl"
|
||||||
|
]
|
||||||
|
|
||||||
|
# Java options
|
||||||
|
++ lib.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"
|
||||||
|
]
|
||||||
|
++ lib.optional javaAwtGtk "--enable-java-awt=gtk"
|
||||||
|
++ lib.optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}"
|
||||||
|
|
||||||
|
++ (import ../common/platform-flags.nix { inherit (stdenv) lib targetPlatform; })
|
||||||
|
++ lib.optional (targetPlatform != hostPlatform) crossConfigureFlags
|
||||||
|
++ lib.optional (targetPlatform != hostPlatform) "--disable-bootstrap"
|
||||||
|
|
||||||
|
# Platform-specific flags
|
||||||
|
++ lib.optional (targetPlatform == hostPlatform && targetPlatform.isx86_32) "--with-arch=${stdenv.hostPlatform.parsed.cpu.name}"
|
||||||
|
++ lib.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"
|
||||||
|
]
|
||||||
|
++ lib.optionals (targetPlatform == hostPlatform && targetPlatform.libc == "musl") [
|
||||||
|
"--disable-libsanitizer"
|
||||||
|
"--disable-symvers"
|
||||||
|
"libat_cv_have_ifunc=no"
|
||||||
|
"--disable-gnu-indirect-function"
|
||||||
|
]
|
||||||
|
;
|
||||||
|
|
||||||
|
in configureFlags
|
12
pkgs/development/compilers/gcc/common/pre-configure.nix
Normal file
12
pkgs/development/compilers/gcc/common/pre-configure.nix
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{ lib, version, hostPlatform, langJava ? false, langGo }:
|
||||||
|
|
||||||
|
assert langJava -> lib.versionOlder version "7";
|
||||||
|
|
||||||
|
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"
|
||||||
|
'' + lib.optionalString (lib.versionOlder version "7" && (langJava || langGo)) ''
|
||||||
|
export lib=$out;
|
||||||
|
''
|
@ -6,6 +6,7 @@
|
|||||||
, profiledCompiler ? false
|
, profiledCompiler ? false
|
||||||
, staticCompiler ? false
|
, staticCompiler ? false
|
||||||
, enableShared ? true
|
, enableShared ? true
|
||||||
|
, enableLTO ? true
|
||||||
, texinfo ? null
|
, texinfo ? null
|
||||||
, perl ? null # optional, for texi2pod (then pod2man)
|
, perl ? null # optional, for texi2pod (then pod2man)
|
||||||
, gmp, mpfr, libmpc, gettext, which
|
, gmp, mpfr, libmpc, gettext, which
|
||||||
@ -50,66 +51,9 @@ let version = "7-20170409";
|
|||||||
|
|
||||||
/* Cross-gcc settings (build == host != target) */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
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";
|
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;
|
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
stdenv.mkDerivation ({
|
stdenv.mkDerivation ({
|
||||||
@ -177,82 +121,44 @@ stdenv.mkDerivation ({
|
|||||||
|
|
||||||
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";
|
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";
|
||||||
|
|
||||||
preConfigure = stdenv.lib.optionalString (hostPlatform.isSunOS && hostPlatform.is64bit) ''
|
preConfigure = import ../common/pre-configure.nix {
|
||||||
export NIX_LDFLAGS=`echo $NIX_LDFLAGS | sed -e s~$prefix/lib~$prefix/lib/amd64~g`
|
inherit (stdenv) lib;
|
||||||
export LDFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $LDFLAGS_FOR_TARGET"
|
inherit version hostPlatform langGo;
|
||||||
export CXXFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CXXFLAGS_FOR_TARGET"
|
};
|
||||||
export CFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CFLAGS_FOR_TARGET"
|
|
||||||
'';
|
|
||||||
|
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
|
|
||||||
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
# TODO(@Ericson2314): Always pass "--target" and always prefix.
|
||||||
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags =
|
configureFlags = import ../common/configure-flags.nix {
|
||||||
# Basic dependencies
|
inherit
|
||||||
[
|
stdenv
|
||||||
"--with-gmp-include=${gmp.dev}/include"
|
targetPackages
|
||||||
"--with-gmp-lib=${gmp.out}/lib"
|
crossStageStatic libcCross
|
||||||
"--with-mpfr-include=${mpfr.dev}/include"
|
version
|
||||||
"--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
|
gmp mpfr libmpc libelf isl
|
||||||
[
|
|
||||||
"--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
|
enableLTO
|
||||||
then ["--enable-multilib" "--disable-libquadmath"]
|
enableMultilib
|
||||||
else ["--disable-multilib"]) ++
|
enablePlugin
|
||||||
optional (!enableShared) "--disable-shared" ++
|
enableShared
|
||||||
(if enablePlugin
|
|
||||||
then ["--enable-plugin"]
|
|
||||||
else ["--disable-plugin"]) ++
|
|
||||||
|
|
||||||
# Optional features
|
langC
|
||||||
optional (isl != null) "--with-isl=${isl}" ++
|
langCC
|
||||||
|
langFortran
|
||||||
|
langGo
|
||||||
(import ../common/platform-flags.nix { inherit (stdenv) lib targetPlatform; }) ++
|
langObjC
|
||||||
optional (targetPlatform != hostPlatform) crossConfigureFlags ++
|
langObjCpp
|
||||||
optional (!bootstrap) "--disable-bootstrap" ++
|
;
|
||||||
|
};
|
||||||
# Platform-specific flags
|
|
||||||
optional (targetPlatform == hostPlatform && targetPlatform.isi686) "--with-arch=i686" ++
|
|
||||||
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"
|
|
||||||
]
|
|
||||||
;
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
buildFlags = if bootstrap then
|
buildFlags = optional
|
||||||
(if profiledCompiler then "profiledbootstrap" else "bootstrap")
|
(hostPlatform == buildPlatform)
|
||||||
else "";
|
(if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
||||||
|
|
||||||
dontStrip = !stripped;
|
dontStrip = !stripped;
|
||||||
NIX_STRIP_DEBUG = !stripped;
|
NIX_STRIP_DEBUG = !stripped;
|
||||||
|
Loading…
Reference in New Issue
Block a user