Merge pull request #31292 from bgamari/gcc-refactor
gcc: Refactor treatment of configure flags
This commit is contained in:
commit
cbc346f1f7
@ -67,55 +67,54 @@ let version = "4.5.4";
|
|||||||
gccArch = stdenv.lib.attrByPath [ "gcc" "arch" ] null targetPlatform;
|
gccArch = stdenv.lib.attrByPath [ "gcc" "arch" ] null targetPlatform;
|
||||||
gccCpu = stdenv.lib.attrByPath [ "gcc" "cpu" ] null targetPlatform;
|
gccCpu = stdenv.lib.attrByPath [ "gcc" "cpu" ] null targetPlatform;
|
||||||
gccAbi = stdenv.lib.attrByPath [ "gcc" "abi" ] null targetPlatform;
|
gccAbi = stdenv.lib.attrByPath [ "gcc" "abi" ] null targetPlatform;
|
||||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else "";
|
|
||||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else "";
|
|
||||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else "";
|
|
||||||
crossMingw = (targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt");
|
crossMingw = (targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt");
|
||||||
|
|
||||||
crossConfigureFlags =
|
crossConfigureFlags =
|
||||||
withArch +
|
optional (gccArch != null) "--with-arch=${gccArch}" ++
|
||||||
withCpu +
|
optional (gccCpu != null) "--with-cpu=${gccCpu}" ++
|
||||||
withAbi +
|
optional (gccAbi != null) "--with-abi=${gccAbi}" ++
|
||||||
# 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 crossMingw && crossStageStatic then [
|
||||||
" --with-headers=${libcCross}/include" +
|
"--with-headers=${libcCross}/include"
|
||||||
" --with-gcc" +
|
"--with-gcc"
|
||||||
" --with-gnu-as" +
|
"--with-gnu-as"
|
||||||
" --with-gnu-ld" +
|
"--with-gnu-ld"
|
||||||
" --with-gnu-ld" +
|
"--with-gnu-ld"
|
||||||
" --disable-shared" +
|
"--disable-shared"
|
||||||
" --disable-nls" +
|
"--disable-nls"
|
||||||
" --disable-debug" +
|
"--disable-debug"
|
||||||
" --enable-sjlj-exceptions" +
|
"--enable-sjlj-exceptions"
|
||||||
" --enable-threads=win32" +
|
"--enable-threads=win32"
|
||||||
" --disable-win32-registry"
|
"--disable-win32-registry"
|
||||||
else if crossStageStatic then
|
] else if crossStageStatic then [
|
||||||
" --disable-libssp --disable-nls" +
|
"--disable-libssp"
|
||||||
" --without-headers" +
|
"--disable-nls"
|
||||||
" --disable-threads " +
|
"--without-headers"
|
||||||
" --disable-libmudflap " +
|
"--disable-threads"
|
||||||
" --disable-libgomp " +
|
"--disable-libmudflap"
|
||||||
" --disable-shared" +
|
"--disable-libgomp"
|
||||||
" --disable-decimal-float" # libdecnumber requires libc
|
"--disable-shared"
|
||||||
else
|
"--disable-decimal-float" # libdecnumber requires libc
|
||||||
" --with-headers=${libcCross}/include" +
|
] else [
|
||||||
" --enable-__cxa_atexit" +
|
"--with-headers=${libcCross}/include"
|
||||||
" --enable-long-long" +
|
"--enable-__cxa_atexit"
|
||||||
(if crossMingw then
|
"--enable-long-long"
|
||||||
" --enable-threads=win32" +
|
] ++
|
||||||
" --enable-sjlj-exceptions" +
|
(if crossMingw then [
|
||||||
" --enable-hash-synchronization" +
|
"--enable-threads=win32"
|
||||||
" --enable-version-specific-runtime-libs" +
|
"--enable-sjlj-exceptions"
|
||||||
" --disable-libssp" +
|
"--enable-hash-synchronization"
|
||||||
" --disable-nls" +
|
"--enable-version-specific-runtime-libs"
|
||||||
" --with-dwarf2"
|
"--disable-libssp"
|
||||||
else
|
"--disable-nls"
|
||||||
" --enable-threads=posix" +
|
"--with-dwarf2"
|
||||||
" --enable-nls" +
|
] else [
|
||||||
" --disable-decimal-float") # No final libdecnumber (it may work only in 386)
|
"--enable-threads=posix"
|
||||||
);
|
"--enable-nls"
|
||||||
|
"--disable-decimal-float" # No final libdecnumber (it may work only in 386)
|
||||||
|
]));
|
||||||
stageNameAddon = if crossStageStatic then "-stage-static" else
|
stageNameAddon = if crossStageStatic then "-stage-static" else
|
||||||
"-stage-final";
|
"-stage-final";
|
||||||
crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else "";
|
crossNameAddon = if targetPlatform != hostPlatform then "-${targetPlatform.config}" + stageNameAddon else "";
|
||||||
@ -241,44 +240,62 @@ stdenv.mkDerivation ({
|
|||||||
then []
|
then []
|
||||||
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags = "
|
configureFlags =
|
||||||
${if enableMultilib then "" else "--disable-multilib"}
|
# Basic dependencies
|
||||||
${if enableShared then "" else "--disable-shared"}
|
[
|
||||||
${if ppl != null then "--with-ppl=${ppl}" else ""}
|
"--with-gmp=${gmp.dev}"
|
||||||
${if cloogppl != null then "--with-cloog=${cloogppl}" else ""}
|
"--with-mpfr=${mpfr.dev}"
|
||||||
${if langJava then
|
"--with-mpc=${libmpc}"
|
||||||
"--with-ecj-jar=${javaEcj} " +
|
] ++
|
||||||
|
optional (libelf != null) "--with-libelf=${libelf}" ++
|
||||||
|
|
||||||
|
# Basic configuration
|
||||||
|
[
|
||||||
|
"--disable-libstdcxx-pch"
|
||||||
|
"--without-included-gettext"
|
||||||
|
"--with-system-zlib"
|
||||||
|
"--enable-languages=${
|
||||||
|
concatStrings (intersperse ","
|
||||||
|
( optional langC "c"
|
||||||
|
++ optional langCC "c++"
|
||||||
|
++ optional langFortran "fortran"
|
||||||
|
++ optional langJava "java"
|
||||||
|
++ optional langAda "ada"
|
||||||
|
++ optional langVhdl "vhdl"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}"
|
||||||
|
] ++
|
||||||
|
optional (!enableMultilib) "--disable-multilib" ++
|
||||||
|
optional (!enableShared) "--disable-shared" ++
|
||||||
|
|
||||||
|
# Optional features
|
||||||
|
optional (cloogppl != null) "--with-cloog=${cloogppl}" ++
|
||||||
|
optional (ppl != null) "--with-ppl=${ppl}" ++
|
||||||
|
|
||||||
|
# Java options
|
||||||
|
optionals langJava [
|
||||||
|
"--with-ecj-jar=${javaEcj}"
|
||||||
|
|
||||||
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
||||||
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
||||||
"--enable-java-home --with-java-home=\${prefix}/lib/jvm/jre "
|
"--enable-java-home"
|
||||||
else ""}
|
"--with-java-home=\${prefix}/lib/jvm/jre"
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
] ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr}" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
--with-gmp=${gmp.dev}
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}" ++
|
||||||
--with-mpfr=${mpfr.dev}
|
|
||||||
--with-mpc=${libmpc}
|
# Ada
|
||||||
${if libelf != null then "--with-libelf=${libelf}" else ""}
|
optional langAda "--enable-libada" ++
|
||||||
--disable-libstdcxx-pch
|
|
||||||
--without-included-gettext
|
# Cross-compilation
|
||||||
--with-system-zlib
|
optional (targetPlatform != hostPlatform) crossConfigureFlags ++
|
||||||
--enable-languages=${
|
|
||||||
concatStrings (intersperse ","
|
# Platform-specific flags
|
||||||
( optional langC "c"
|
optional (targetPlatform == hostPlatform && targetPlatform.isi686) "--with-arch=i686" ++
|
||||||
++ optional langCC "c++"
|
# Trick that should be taken out once we have a mips64el-linux not loongson2f
|
||||||
++ optional langFortran "fortran"
|
optional (targetPlatform == hostPlatform && stdenv.system == "mips64el-linux") "--with-arch=loongson2f"
|
||||||
++ optional langJava "java"
|
;
|
||||||
++ optional langAda "ada"
|
|
||||||
++ optional langVhdl "vhdl"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
${ # Trick that should be taken out once we have a mips64el-linux not loongson2f
|
|
||||||
if targetPlatform == hostPlatform && stdenv.system == "mips64el-linux" then "--with-arch=loongson2f" else ""}
|
|
||||||
${if langAda then " --enable-libada" else ""}
|
|
||||||
${if targetPlatform == hostPlatform && targetPlatform.isi686 then "--with-arch=i686" else ""}
|
|
||||||
${if targetPlatform != hostPlatform then crossConfigureFlags else ""}
|
|
||||||
";
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
@ -295,37 +312,41 @@ stdenv.mkDerivation ({
|
|||||||
# If we are making a cross compiler, cross != null
|
# If we are making a cross compiler, cross != null
|
||||||
NIX_CC_CROSS = optionalString (targetPlatform == hostPlatform) builtins.toString stdenv.cc;
|
NIX_CC_CROSS = optionalString (targetPlatform == hostPlatform) builtins.toString stdenv.cc;
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
configureFlags = ''
|
configureFlags =
|
||||||
${if enableMultilib then "" else "--disable-multilib"}
|
optional (!enableMultilib) "--disable-multilib" ++
|
||||||
${if enableShared then "" else "--disable-shared"}
|
optional (!enableShared) "--disable-shared" ++
|
||||||
${if ppl != null then "--with-ppl=${ppl.crossDrv}" else ""}
|
optional langJava "--with-ecj-jar=${javaEcj.crossDrv}" ++
|
||||||
${if cloogppl != null then "--with-cloog=${cloogppl.crossDrv}" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
${if langJava then "--with-ecj-jar=${javaEcj.crossDrv}" else ""}
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr.crossDrv}" ++
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
optional (ppl != null) "--with-ppl=${ppl.crossDrv}" ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr.crossDrv}" else ""}
|
optional (cloogppl != null) "--with-cloog=${cloogppl.crossDrv}" ++
|
||||||
--with-gmp=${gmp.crossDrv}
|
|
||||||
--with-mpfr=${mpfr.crossDrv}
|
[
|
||||||
--with-mpc=${libmpc.crossDrv}
|
"--with-gmp=${gmp.crossDrv}"
|
||||||
--disable-libstdcxx-pch
|
"--with-mpfr=${mpfr.crossDrv}"
|
||||||
--without-included-gettext
|
"--with-mpc=${libmpc.crossDrv}"
|
||||||
--with-system-zlib
|
"--disable-libstdcxx-pch"
|
||||||
--enable-languages=${
|
"--without-included-gettext"
|
||||||
concatStrings (intersperse ","
|
"--with-system-zlib"
|
||||||
( optional langC "c"
|
"--enable-languages=${
|
||||||
++ optional langCC "c++"
|
concatStrings (intersperse ","
|
||||||
++ optional langFortran "fortran"
|
( optional langC "c"
|
||||||
++ optional langJava "java"
|
++ optional langCC "c++"
|
||||||
++ optional langAda "ada"
|
++ optional langFortran "fortran"
|
||||||
++ optional langVhdl "vhdl"
|
++ optional langJava "java"
|
||||||
|
++ optional langAda "ada"
|
||||||
|
++ optional langVhdl "vhdl"
|
||||||
|
++ optional langGo "go"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
}"
|
||||||
}
|
] ++
|
||||||
${if langAda then " --enable-libada" else ""}
|
optional langAda "--enable-libada" ++
|
||||||
${if targetplatform == hostPlatform && targetPlatform.isi686 then "--with-arch=i686" else ""}
|
optional (targetPlatform == hostPlatform && targetPlatform.isi686) "--with-arch=i686" ++
|
||||||
${if targetPlatform != hostPlatform then crossConfigureFlags else ""}
|
optional (targetPlatform != hostPlatform) crossConfigureFlags
|
||||||
'';
|
;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
# Needed for the cross compilation to work
|
# Needed for the cross compilation to work
|
||||||
AR = "ar";
|
AR = "ar";
|
||||||
|
@ -108,102 +108,81 @@ let version = "4.8.5";
|
|||||||
javaAwtGtk = langJava && x11Support;
|
javaAwtGtk = langJava && x11Support;
|
||||||
|
|
||||||
/* Platform flags */
|
/* Platform flags */
|
||||||
platformFlags = let
|
mkPlatformFlags = platform: let
|
||||||
gccArch = stdenv.platform.gcc.arch or null;
|
gccArch = platform.gcc.arch or null;
|
||||||
gccCpu = stdenv.platform.gcc.cpu or null;
|
gccCpu = platform.gcc.cpu or null;
|
||||||
gccAbi = stdenv.platform.gcc.abi or null;
|
gccAbi = platform.gcc.abi or null;
|
||||||
gccFpu = stdenv.platform.gcc.fpu or null;
|
gccFpu = platform.gcc.fpu or null;
|
||||||
gccFloat = stdenv.platform.gcc.float or null;
|
gccFloat = platform.gcc.float or null;
|
||||||
gccMode = stdenv.platform.gcc.mode or null;
|
gccMode = platform.gcc.mode or null;
|
||||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else "";
|
in
|
||||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else "";
|
optional (gccArch != null) "--with-arch=${gccArch}" ++
|
||||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else "";
|
optional (gccCpu != null) "--with-cpu=${gccCpu}" ++
|
||||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else "";
|
optional (gccAbi != null) "--with-abi=${gccAbi}" ++
|
||||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else "";
|
optional (gccFpu != null) "--with-fpu=${gccFpu}" ++
|
||||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else "";
|
optional (gccFloat != null) "--with-float=${gccFloat}" ++
|
||||||
in
|
optional (gccMode != null) "--with-mode=${gccMode}";
|
||||||
withArch +
|
|
||||||
withCpu +
|
|
||||||
withAbi +
|
|
||||||
withFpu +
|
|
||||||
withFloat +
|
|
||||||
withMode;
|
|
||||||
|
|
||||||
/* Cross-gcc settings */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
||||||
crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem";
|
crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem";
|
||||||
crossConfigureFlags = let
|
crossConfigureFlags =
|
||||||
gccArch = targetPlatform.gcc.arch or null;
|
mkPlatformFlags targetPlatform ++
|
||||||
gccCpu = targetPlatform.gcc.cpu or null;
|
|
||||||
gccAbi = targetPlatform.gcc.abi or null;
|
# Ensure that -print-prog-name is able to find the correct programs.
|
||||||
gccFpu = targetPlatform.gcc.fpu or null;
|
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
|
||||||
gccFloat = targetPlatform.gcc.float or null;
|
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
|
||||||
gccMode = targetPlatform.gcc.mode or null;
|
(if crossMingw && crossStageStatic then [
|
||||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else "";
|
"--with-headers=${libcCross}/include"
|
||||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else "";
|
"--with-gcc"
|
||||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else "";
|
"--with-gnu-as"
|
||||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else "";
|
"--with-gnu-ld"
|
||||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else "";
|
"--with-gnu-ld"
|
||||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else "";
|
"--disable-shared"
|
||||||
in
|
"--disable-nls"
|
||||||
withArch +
|
"--disable-debug"
|
||||||
withCpu +
|
"--enable-sjlj-exceptions"
|
||||||
withAbi +
|
"--enable-threads=win32"
|
||||||
withFpu +
|
"--disable-win32-registry"
|
||||||
withFloat +
|
] else if crossStageStatic then [
|
||||||
withMode +
|
"--disable-libssp"
|
||||||
# Ensure that -print-prog-name is able to find the correct programs.
|
"--disable-nls"
|
||||||
" --with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" +
|
"--without-headers"
|
||||||
" --with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" +
|
"--disable-threads"
|
||||||
(if crossMingw && crossStageStatic then
|
"--disable-libgomp"
|
||||||
" --with-headers=${libcCross}/include" +
|
"--disable-libquadmath"
|
||||||
" --with-gcc" +
|
"--disable-shared"
|
||||||
" --with-gnu-as" +
|
"--disable-libatomic" # libatomic requires libc
|
||||||
" --with-gnu-ld" +
|
"--disable-decimal-float" # libdecnumber requires libc
|
||||||
" --with-gnu-ld" +
|
] else [
|
||||||
" --disable-shared" +
|
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
|
||||||
" --disable-nls" +
|
else "--with-headers=${getDev libcCross}/include")
|
||||||
" --disable-debug" +
|
"--enable-__cxa_atexit"
|
||||||
" --enable-sjlj-exceptions" +
|
"--enable-long-long"
|
||||||
" --enable-threads=win32" +
|
] ++
|
||||||
" --disable-win32-registry"
|
(if crossMingw then [
|
||||||
else if crossStageStatic then
|
"--enable-threads=win32"
|
||||||
" --disable-libssp --disable-nls" +
|
"--enable-sjlj-exceptions"
|
||||||
" --without-headers" +
|
"--enable-hash-synchronization"
|
||||||
" --disable-threads " +
|
"--disable-libssp"
|
||||||
" --disable-libmudflap " +
|
"--disable-nls"
|
||||||
" --disable-libgomp " +
|
"--with-dwarf2"
|
||||||
" --disable-libquadmath" +
|
# I think noone uses shared gcc libs in mingw, so we better do the same.
|
||||||
" --disable-shared" +
|
# In any case, mingw32 g++ linking is broken by default with shared libs,
|
||||||
" --disable-libatomic " + # libatomic requires libc
|
# unless adding "-lsupc++" to any linking command. I don't know why.
|
||||||
" --disable-decimal-float" # libdecnumber requires libc
|
"--disable-shared"
|
||||||
else
|
# To keep ABI compatibility with upstream mingw-w64
|
||||||
(if crossDarwin then " --with-sysroot=${libcCross.out}/share/sysroot"
|
"--enable-fully-dynamic-string"
|
||||||
else " --with-headers=${libcCross.dev}/include") +
|
] else
|
||||||
# Ensure that -print-prog-name is able to find the correct programs.
|
optionals (targetPlatform.libc == "uclibc") [
|
||||||
" --enable-__cxa_atexit" +
|
# In uclibc cases, libgomp needs an additional '-ldl'
|
||||||
" --enable-long-long" +
|
# and as I don't know how to pass it, I disable libgomp.
|
||||||
(if crossMingw then
|
"--disable-libgomp"
|
||||||
" --enable-threads=win32" +
|
] ++ [
|
||||||
" --enable-sjlj-exceptions" +
|
"--enable-threads=posix"
|
||||||
" --enable-hash-synchronization" +
|
"--enable-nls"
|
||||||
" --disable-libssp" +
|
"--disable-decimal-float" # No final libdecnumber (it may work only in 386)
|
||||||
" --disable-nls" +
|
]));
|
||||||
" --with-dwarf2" +
|
|
||||||
# I think noone uses shared gcc libs in mingw, so we better do the same.
|
|
||||||
# In any case, mingw32 g++ linking is broken by default with shared libs,
|
|
||||||
# unless adding "-lsupc++" to any linking command. I don't know why.
|
|
||||||
" --disable-shared" +
|
|
||||||
# To keep ABI compatibility with upstream mingw-w64
|
|
||||||
" --enable-fully-dynamic-string"
|
|
||||||
else (if targetPlatform.libc == "uclibc" then
|
|
||||||
# In uclibc cases, libgomp needs an additional '-ldl'
|
|
||||||
# and as I don't know how to pass it, I disable libgomp.
|
|
||||||
" --disable-libgomp" else "") +
|
|
||||||
" --enable-threads=posix" +
|
|
||||||
" --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 "";
|
||||||
|
|
||||||
@ -329,63 +308,92 @@ stdenv.mkDerivation ({
|
|||||||
then []
|
then []
|
||||||
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags = "
|
configureFlags =
|
||||||
${if hostPlatform.isSunOS then
|
# Basic dependencies
|
||||||
" --enable-long-long --enable-libssp --enable-threads=posix --disable-nls --enable-__cxa_atexit " +
|
[
|
||||||
# On Illumos/Solaris GNU as is preferred
|
"--with-gmp-include=${gmp.dev}/include"
|
||||||
" --with-gnu-as --without-gnu-ld "
|
"--with-gmp-lib=${gmp.out}/lib"
|
||||||
else ""}
|
"--with-mpfr-include=${mpfr.dev}/include"
|
||||||
--enable-lto
|
"--with-mpfr-lib=${mpfr.out}/lib"
|
||||||
${if enableMultilib then "--disable-libquadmath" else "--disable-multilib"}
|
"--with-mpc=${libmpc}"
|
||||||
${if enableShared then "" else "--disable-shared"}
|
] ++
|
||||||
${if enablePlugin then "--enable-plugin" else "--disable-plugin"}
|
optional (libelf != null) "--with-libelf=${libelf}" ++
|
||||||
${optionalString (isl != null) "--with-isl=${isl}"}
|
|
||||||
${optionalString (cloog != null) "--with-cloog=${cloog} --disable-cloog-version-check --enable-cloog-backend=isl"}
|
# Basic configuration
|
||||||
${if langJava then
|
[
|
||||||
"--with-ecj-jar=${javaEcj} " +
|
"--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 langAda "ada"
|
||||||
|
++ optional langVhdl "vhdl"
|
||||||
|
++ optional langGo "go"
|
||||||
|
++ optional langObjC "objc"
|
||||||
|
++ optional langObjCpp "obj-c++"
|
||||||
|
++ optionals crossDarwin [ "objc" "obj-c++" ]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}"
|
||||||
|
] ++
|
||||||
|
|
||||||
|
# Optional features
|
||||||
|
optional (isl != null) "--with-isl=${isl}" ++
|
||||||
|
optionals (cloog != null) [
|
||||||
|
"--with-cloog=${cloog}"
|
||||||
|
"--disable-cloog-version-check"
|
||||||
|
"--enable-cloog-backend=isl"
|
||||||
|
] ++
|
||||||
|
|
||||||
|
(if enableMultilib
|
||||||
|
then ["--enable-multilib" "--disable-libquadmath"]
|
||||||
|
else ["--disable-multilib"]) ++
|
||||||
|
optional (!enableShared) "--disable-shared" ++
|
||||||
|
(if enablePlugin
|
||||||
|
then ["--enable-plugin"]
|
||||||
|
else ["--disable-plugin"]) ++
|
||||||
|
|
||||||
|
# Java options
|
||||||
|
optionals langJava [
|
||||||
|
"--with-ecj-jar=${javaEcj}"
|
||||||
|
|
||||||
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
||||||
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
||||||
"--enable-java-home --with-java-home=\${prefix}/lib/jvm/jre "
|
"--enable-java-home"
|
||||||
else ""}
|
"--with-java-home=\${prefix}/lib/jvm/jre"
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
] ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr}" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
--with-gmp-include=${gmp.dev}/include
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}" ++
|
||||||
--with-gmp-lib=${gmp.out}/lib
|
|
||||||
--with-mpfr-include=${mpfr.dev}/include
|
# Ada
|
||||||
--with-mpfr-lib=${mpfr.out}/lib
|
optional langAda "--enable-libada" ++
|
||||||
--with-mpc=${libmpc}
|
|
||||||
${if libelf != null then "--with-libelf=${libelf}" else ""}
|
# Cross-compilation
|
||||||
--disable-libstdcxx-pch
|
optional (targetPlatform == hostPlatform) (
|
||||||
--without-included-gettext
|
let incDir = if hostPlatform.isDarwin
|
||||||
--with-system-zlib
|
then "${darwin.usr-include}"
|
||||||
--enable-static
|
else "${getDev stdenv.cc.libc}/include";
|
||||||
--enable-languages=${
|
in "--with-native-system-header-dir=${incDir}"
|
||||||
concatStrings (intersperse ","
|
) ++
|
||||||
( optional langC "c"
|
|
||||||
++ optional langCC "c++"
|
optional (targetPlatform == hostPlatform) (mkPlatformFlags stdenv.platform) ++
|
||||||
++ optional langFortran "fortran"
|
optional (targetPlatform != hostPlatform) crossConfigureFlags ++
|
||||||
++ optional langJava "java"
|
optional (!bootstrap) "--disable-bootstrap" ++
|
||||||
++ optional langAda "ada"
|
|
||||||
++ optional langVhdl "vhdl"
|
# Platform-specific flags
|
||||||
++ optional langGo "go"
|
optional (targetPlatform == hostPlatform && targetPlatform.isi686) "--with-arch=i686" ++
|
||||||
++ optional langObjC "objc"
|
optionals hostPlatform.isSunOS [
|
||||||
++ optional langObjCpp "obj-c++"
|
"--enable-long-long" "--enable-libssp" "--enable-threads=posix" "--disable-nls" "--enable-__cxa_atexit"
|
||||||
++ optionals crossDarwin [ "objc" "obj-c++" ]
|
# On Illumos/Solaris GNU as is preferred
|
||||||
)
|
"--with-gnu-as" "--without-gnu-ld"
|
||||||
)
|
]
|
||||||
}
|
;
|
||||||
${if targetPlatform == hostPlatform
|
|
||||||
then if hostPlatform.isDarwin
|
|
||||||
then " --with-native-system-header-dir=${darwin.usr-include}"
|
|
||||||
else " --with-native-system-header-dir=${getDev stdenv.cc.libc}/include"
|
|
||||||
else ""}
|
|
||||||
${if langAda then " --enable-libada" else ""}
|
|
||||||
${if targetPlatform == hostPlatform && targetPlatform.isi686 then "--with-arch=i686" else ""}
|
|
||||||
${if targetPlatform != hostPlatform then crossConfigureFlags else ""}
|
|
||||||
${if !bootstrap then "--disable-bootstrap" else ""}
|
|
||||||
${if targetPlatform == hostPlatform then platformFlags else ""}
|
|
||||||
";
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
@ -404,11 +412,6 @@ stdenv.mkDerivation ({
|
|||||||
xgccAbi = targetPlatform.gcc.abi or null;
|
xgccAbi = targetPlatform.gcc.abi or null;
|
||||||
xgccFpu = targetPlatform.gcc.fpu or null;
|
xgccFpu = targetPlatform.gcc.fpu or null;
|
||||||
xgccFloat = targetPlatform.gcc.float or null;
|
xgccFloat = targetPlatform.gcc.float or null;
|
||||||
xwithArch = if xgccArch != null then " --with-arch=${xgccArch}" else "";
|
|
||||||
xwithCpu = if xgccCpu != null then " --with-cpu=${xgccCpu}" else "";
|
|
||||||
xwithAbi = if xgccAbi != null then " --with-abi=${xgccAbi}" else "";
|
|
||||||
xwithFpu = if xgccFpu != null then " --with-fpu=${xgccFpu}" else "";
|
|
||||||
xwithFloat = if xgccFloat != null then " --with-float=${xgccFloat}" else "";
|
|
||||||
in {
|
in {
|
||||||
AR = "${targetPlatform.config}-ar";
|
AR = "${targetPlatform.config}-ar";
|
||||||
LD = "${targetPlatform.config}-ld";
|
LD = "${targetPlatform.config}-ld";
|
||||||
@ -422,38 +425,40 @@ stdenv.mkDerivation ({
|
|||||||
# If we are making a cross compiler, cross != null
|
# If we are making a cross compiler, cross != null
|
||||||
NIX_CC_CROSS = optionalString (targetPlatform == hostPlatform) builtins.toString stdenv.cc;
|
NIX_CC_CROSS = optionalString (targetPlatform == hostPlatform) builtins.toString stdenv.cc;
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
configureFlags = ''
|
configureFlags =
|
||||||
${if enableMultilib then "" else "--disable-multilib"}
|
optional (!enableMultilib) "--disable-multilib" ++
|
||||||
${if enableShared then "" else "--disable-shared"}
|
optional (!enableShared) "--disable-shared" ++
|
||||||
${if cloog != null then "--with-cloog=${cloog.crossDrv} --enable-cloog-backend=isl" else ""}
|
optional langJava "--with-ecj-jar=${javaEcj.crossDrv}" ++
|
||||||
${if langJava then "--with-ecj-jar=${javaEcj.crossDrv}" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr.crossDrv}" ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr.crossDrv}" else ""}
|
optional (cloog != null) "--with-cloog=${cloog.crossDrv} --enable-cloog-backend=isl" ++
|
||||||
--with-gmp=${gmp.crossDrv}
|
[
|
||||||
--with-mpfr=${mpfr.crossDrv}
|
"--with-gmp=${gmp.crossDrv}"
|
||||||
--with-mpc=${libmpc.crossDrv}
|
"--with-mpfr=${mpfr.crossDrv}"
|
||||||
--disable-libstdcxx-pch
|
"--with-mpc=${libmpc.crossDrv}"
|
||||||
--without-included-gettext
|
"--disable-libstdcxx-pch"
|
||||||
--with-system-zlib
|
"--without-included-gettext"
|
||||||
--enable-languages=${
|
"--with-system-zlib"
|
||||||
concatStrings (intersperse ","
|
"--enable-languages=${
|
||||||
( optional langC "c"
|
concatStrings (intersperse ","
|
||||||
++ optional langCC "c++"
|
( optional langC "c"
|
||||||
++ optional langFortran "fortran"
|
++ optional langCC "c++"
|
||||||
++ optional langJava "java"
|
++ optional langFortran "fortran"
|
||||||
++ optional langAda "ada"
|
++ optional langJava "java"
|
||||||
++ optional langVhdl "vhdl"
|
++ optional langAda "ada"
|
||||||
++ optional langGo "go"
|
++ optional langVhdl "vhdl"
|
||||||
|
++ optional langGo "go"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
}"
|
||||||
}
|
] ++
|
||||||
${if langAda then " --enable-libada" else ""}
|
optional langAda "--enable-libada" ++
|
||||||
${xwithArch}
|
optional (xgccArch != null) "--with-arch=${xgccArch}" ++
|
||||||
${xwithCpu}
|
optional (xgccCpu != null) "--with-cpu=${xgccCpu}" ++
|
||||||
${xwithAbi}
|
optional (xgccAbi != null) "--with-abi=${xgccAbi}" ++
|
||||||
${xwithFpu}
|
optional (xgccFpu != null) "--with-fpu=${xgccFpu}" ++
|
||||||
${xwithFloat}
|
optional (xgccFloat != null) "--with-float=${xgccFloat}"
|
||||||
'';
|
;
|
||||||
buildFlags = "";
|
buildFlags = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -99,107 +99,88 @@ let version = "4.9.4";
|
|||||||
javaAwtGtk = langJava && x11Support;
|
javaAwtGtk = langJava && x11Support;
|
||||||
|
|
||||||
/* Platform flags */
|
/* Platform flags */
|
||||||
platformFlags = let
|
mkPlatformFlags = platform: let
|
||||||
gccArch = stdenv.platform.gcc.arch or null;
|
gccArch = platform.gcc.arch or null;
|
||||||
gccCpu = stdenv.platform.gcc.cpu or null;
|
gccCpu = platform.gcc.cpu or null;
|
||||||
gccAbi = stdenv.platform.gcc.abi or null;
|
gccAbi = platform.gcc.abi or null;
|
||||||
gccFpu = stdenv.platform.gcc.fpu or null;
|
gccFpu = platform.gcc.fpu or null;
|
||||||
gccFloat = stdenv.platform.gcc.float or null;
|
gccFloat = platform.gcc.float or null;
|
||||||
gccMode = stdenv.platform.gcc.mode or null;
|
gccMode = platform.gcc.mode or null;
|
||||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else "";
|
in
|
||||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else "";
|
optional (gccArch != null) "--with-arch=${gccArch}" ++
|
||||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else "";
|
optional (gccCpu != null) "--with-cpu=${gccCpu}" ++
|
||||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else "";
|
optional (gccAbi != null) "--with-abi=${gccAbi}" ++
|
||||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else "";
|
optional (gccFpu != null) "--with-fpu=${gccFpu}" ++
|
||||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else "";
|
optional (gccFloat != null) "--with-float=${gccFloat}" ++
|
||||||
in
|
optional (gccMode != null) "--with-mode=${gccMode}";
|
||||||
withArch +
|
|
||||||
withCpu +
|
|
||||||
withAbi +
|
|
||||||
withFpu +
|
|
||||||
withFloat +
|
|
||||||
withMode;
|
|
||||||
|
|
||||||
/* Cross-gcc settings */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
||||||
crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem";
|
crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem";
|
||||||
crossConfigureFlags = let
|
crossConfigureFlags =
|
||||||
gccArch = targetPlatform.gcc.arch or null;
|
mkPlatformFlags targetPlatform ++
|
||||||
gccCpu = targetPlatform.gcc.cpu or null;
|
|
||||||
gccAbi = targetPlatform.gcc.abi or null;
|
# Ensure that -print-prog-name is able to find the correct programs.
|
||||||
gccFpu = targetPlatform.gcc.fpu or null;
|
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
|
||||||
gccFloat = targetPlatform.gcc.float or null;
|
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
|
||||||
gccMode = targetPlatform.gcc.mode or null;
|
(if crossMingw && crossStageStatic then [
|
||||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else "";
|
"--with-headers=${libcCross}/include"
|
||||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else "";
|
"--with-gcc"
|
||||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else "";
|
"--with-gnu-as"
|
||||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else "";
|
"--with-gnu-ld"
|
||||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else "";
|
"--with-gnu-ld"
|
||||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else "";
|
"--disable-shared"
|
||||||
in
|
"--disable-nls"
|
||||||
withArch +
|
"--disable-debug"
|
||||||
withCpu +
|
"--enable-sjlj-exceptions"
|
||||||
withAbi +
|
"--enable-threads=win32"
|
||||||
withFpu +
|
"--disable-win32-registry"
|
||||||
withFloat +
|
] else if crossStageStatic then [
|
||||||
withMode +
|
"--disable-libssp"
|
||||||
# Ensure that -print-prog-name is able to find the correct programs.
|
"--disable-nls"
|
||||||
" --with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" +
|
"--without-headers"
|
||||||
" --with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" +
|
"--disable-threads"
|
||||||
(if crossMingw && crossStageStatic then
|
"--disable-libgomp"
|
||||||
" --with-headers=${libcCross}/include" +
|
"--disable-libquadmath"
|
||||||
" --with-gcc" +
|
"--disable-shared"
|
||||||
" --with-gnu-as" +
|
"--disable-libatomic" # libatomic requires libc
|
||||||
" --with-gnu-ld" +
|
"--disable-decimal-float" # libdecnumber requires libc
|
||||||
" --with-gnu-ld" +
|
] else [
|
||||||
" --disable-shared" +
|
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
|
||||||
" --disable-nls" +
|
else "--with-headers=${getDev libcCross}/include")
|
||||||
" --disable-debug" +
|
"--enable-__cxa_atexit"
|
||||||
" --enable-sjlj-exceptions" +
|
"--enable-long-long"
|
||||||
" --enable-threads=win32" +
|
] ++
|
||||||
" --disable-win32-registry"
|
(if crossMingw then [
|
||||||
else if crossStageStatic then
|
"--enable-threads=win32"
|
||||||
" --disable-libssp --disable-nls" +
|
"--enable-sjlj-exceptions"
|
||||||
" --without-headers" +
|
"--enable-hash-synchronization"
|
||||||
" --disable-threads " +
|
"--disable-libssp"
|
||||||
" --disable-libgomp " +
|
"--disable-nls"
|
||||||
" --disable-libquadmath" +
|
"--with-dwarf2"
|
||||||
" --disable-shared" +
|
# I think noone uses shared gcc libs in mingw, so we better do the same.
|
||||||
" --disable-libatomic " + # libatomic requires libc
|
# In any case, mingw32 g++ linking is broken by default with shared libs,
|
||||||
" --disable-decimal-float" # libdecnumber requires libc
|
# unless adding "-lsupc++" to any linking command. I don't know why.
|
||||||
else
|
"--disable-shared"
|
||||||
(if crossDarwin then " --with-sysroot=${libcCross.out}/share/sysroot"
|
# To keep ABI compatibility with upstream mingw-w64
|
||||||
else " --with-headers=${libcCross.dev}/include") +
|
"--enable-fully-dynamic-string"
|
||||||
" --enable-__cxa_atexit" +
|
] else
|
||||||
" --enable-long-long" +
|
optionals (targetPlatform.libc == "uclibc") [
|
||||||
(if crossMingw then
|
# libsanitizer requires netrom/netrom.h which is not
|
||||||
" --enable-threads=win32" +
|
# available in uclibc.
|
||||||
" --enable-sjlj-exceptions" +
|
"--disable-libsanitizer"
|
||||||
" --enable-hash-synchronization" +
|
# In uclibc cases, libgomp needs an additional '-ldl'
|
||||||
" --disable-libssp" +
|
# and as I don't know how to pass it, I disable libgomp.
|
||||||
" --disable-nls" +
|
"--disable-libgomp"
|
||||||
" --with-dwarf2" +
|
] ++ [
|
||||||
# I think noone uses shared gcc libs in mingw, so we better do the same.
|
"--enable-threads=posix"
|
||||||
# In any case, mingw32 g++ linking is broken by default with shared libs,
|
"--enable-nls"
|
||||||
# unless adding "-lsupc++" to any linking command. I don't know why.
|
"--disable-decimal-float" # No final libdecnumber (it may work only in 386)
|
||||||
" --disable-shared" +
|
]));
|
||||||
# To keep ABI compatibility with upstream mingw-w64
|
|
||||||
" --enable-fully-dynamic-string"
|
|
||||||
else (if targetPlatform.libc == "uclibc" then
|
|
||||||
# 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" else "") +
|
|
||||||
" --enable-threads=posix" +
|
|
||||||
" --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;
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
@ -326,61 +307,91 @@ stdenv.mkDerivation ({
|
|||||||
then []
|
then []
|
||||||
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags = "
|
configureFlags =
|
||||||
${if hostPlatform.isSunOS then
|
# Basic dependencies
|
||||||
" --enable-long-long --enable-libssp --enable-threads=posix --disable-nls --enable-__cxa_atexit " +
|
[
|
||||||
# On Illumos/Solaris GNU as is preferred
|
"--with-gmp-include=${gmp.dev}/include"
|
||||||
" --with-gnu-as --without-gnu-ld "
|
"--with-gmp-lib=${gmp.out}/lib"
|
||||||
else ""}
|
"--with-mpfr=${mpfr.dev}"
|
||||||
--enable-lto
|
"--with-mpc=${libmpc}"
|
||||||
${if enableMultilib then "--enable-multilib --disable-libquadmath" else "--disable-multilib"}
|
] ++
|
||||||
${if enableShared then "" else "--disable-shared"}
|
optional (libelf != null) "--with-libelf=${libelf}" ++
|
||||||
${if enablePlugin then "--enable-plugin" else "--disable-plugin"}
|
|
||||||
${optionalString (isl != null) "--with-isl=${isl}"}
|
# Basic configuration
|
||||||
${optionalString (cloog != null) "--with-cloog=${cloog} --disable-cloog-version-check --enable-cloog-backend=isl"}
|
[
|
||||||
${if langJava then
|
"--enable-lto"
|
||||||
"--with-ecj-jar=${javaEcj} " +
|
"--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 langAda "ada"
|
||||||
|
++ optional langVhdl "vhdl"
|
||||||
|
++ optional langGo "go"
|
||||||
|
++ optional langObjC "objc"
|
||||||
|
++ optional langObjCpp "obj-c++"
|
||||||
|
++ optionals crossDarwin [ "objc" "obj-c++" ]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}"
|
||||||
|
] ++
|
||||||
|
|
||||||
|
(if enableMultilib
|
||||||
|
then ["--enable-multilib" "--disable-libquadmath"]
|
||||||
|
else ["--disable-multilib"]) ++
|
||||||
|
optional (!enableShared) "--disable-shared" ++
|
||||||
|
(if enablePlugin
|
||||||
|
then ["--enable-plugin"]
|
||||||
|
else ["--disable-plugin"]) ++
|
||||||
|
|
||||||
|
# Optional features
|
||||||
|
optional (isl != null) "--with-isl=${isl}" ++
|
||||||
|
optionals (cloog != null) [
|
||||||
|
"--with-cloog=${cloog}"
|
||||||
|
"--disable-cloog-version-check"
|
||||||
|
"--enable-cloog-backend=isl"
|
||||||
|
] ++
|
||||||
|
|
||||||
|
# Java options
|
||||||
|
optionals langJava [
|
||||||
|
"--with-ecj-jar=${javaEcj}"
|
||||||
|
|
||||||
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
||||||
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
||||||
"--enable-java-home --with-java-home=\${prefix}/lib/jvm/jre "
|
"--enable-java-home"
|
||||||
else ""}
|
"--with-java-home=\${prefix}/lib/jvm/jre"
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
] ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr}" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
--with-gmp=${gmp.dev}
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}" ++
|
||||||
--with-mpfr=${mpfr.dev}
|
|
||||||
--with-mpc=${libmpc}
|
# Ada
|
||||||
${if libelf != null then "--with-libelf=${libelf}" else ""}
|
optional langAda "--enable-libada" ++
|
||||||
--disable-libstdcxx-pch
|
|
||||||
--without-included-gettext
|
# Cross-compilation
|
||||||
--with-system-zlib
|
optional (targetPlatform == hostPlatform) (
|
||||||
--enable-static
|
let incDir = if hostPlatform.isDarwin
|
||||||
--enable-languages=${
|
then "${darwin.usr-include}"
|
||||||
concatStrings (intersperse ","
|
else "${getDev stdenv.cc.libc}/include";
|
||||||
( optional langC "c"
|
in "--with-native-system-header-dir=${incDir}"
|
||||||
++ optional langCC "c++"
|
) ++
|
||||||
++ optional langFortran "fortran"
|
|
||||||
++ optional langJava "java"
|
optional (targetPlatform == hostPlatform) (mkPlatformFlags stdenv.platform) ++
|
||||||
++ optional langAda "ada"
|
optional (targetPlatform != hostPlatform) crossConfigureFlags ++
|
||||||
++ optional langVhdl "vhdl"
|
optional (!bootstrap) "--disable-bootstrap" ++
|
||||||
++ optional langGo "go"
|
|
||||||
++ optional langObjC "objc"
|
# Platform-specific flags
|
||||||
++ optional langObjCpp "obj-c++"
|
optional (targetPlatform == hostPlatform && targetPlatform.isi686) "--with-arch=i686" ++
|
||||||
++ optionals crossDarwin [ "objc" "obj-c++" ]
|
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"
|
||||||
${if targetPlatform == hostPlatform
|
]
|
||||||
then if hostPlatform.isDarwin
|
;
|
||||||
then " --with-native-system-header-dir=${darwin.usr-include}"
|
|
||||||
else " --with-native-system-header-dir=${getDev stdenv.cc.libc}/include"
|
|
||||||
else ""}
|
|
||||||
${if langAda then " --enable-libada" else ""}
|
|
||||||
${if targetPlatform == hostPlatform && targetPlatform.isi686 then "--with-arch=i686" else ""}
|
|
||||||
${if targetPlatform != hostPlatform then crossConfigureFlags else ""}
|
|
||||||
${if !bootstrap then "--disable-bootstrap" else ""}
|
|
||||||
${if targetPlatform == hostPlatform then platformFlags else ""}
|
|
||||||
";
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
@ -393,17 +404,13 @@ stdenv.mkDerivation ({
|
|||||||
then "install-strip"
|
then "install-strip"
|
||||||
else "install";
|
else "install";
|
||||||
|
|
||||||
|
/* For cross-built gcc (build != host == target) */
|
||||||
crossAttrs = let
|
crossAttrs = let
|
||||||
xgccArch = targetPlatform.gcc.arch or null;
|
xgccArch = targetPlatform.gcc.arch or null;
|
||||||
xgccCpu = targetPlatform.gcc.cpu or null;
|
xgccCpu = targetPlatform.gcc.cpu or null;
|
||||||
xgccAbi = targetPlatform.gcc.abi or null;
|
xgccAbi = targetPlatform.gcc.abi or null;
|
||||||
xgccFpu = targetPlatform.gcc.fpu or null;
|
xgccFpu = targetPlatform.gcc.fpu or null;
|
||||||
xgccFloat = targetPlatform.gcc.float or null;
|
xgccFloat = targetPlatform.gcc.float or null;
|
||||||
xwithArch = if xgccArch != null then " --with-arch=${xgccArch}" else "";
|
|
||||||
xwithCpu = if xgccCpu != null then " --with-cpu=${xgccCpu}" else "";
|
|
||||||
xwithAbi = if xgccAbi != null then " --with-abi=${xgccAbi}" else "";
|
|
||||||
xwithFpu = if xgccFpu != null then " --with-fpu=${xgccFpu}" else "";
|
|
||||||
xwithFloat = if xgccFloat != null then " --with-float=${xgccFloat}" else "";
|
|
||||||
in {
|
in {
|
||||||
AR = "${targetPlatform.config}-ar";
|
AR = "${targetPlatform.config}-ar";
|
||||||
LD = "${targetPlatform.config}-ld";
|
LD = "${targetPlatform.config}-ld";
|
||||||
@ -417,38 +424,40 @@ stdenv.mkDerivation ({
|
|||||||
# If we are making a cross compiler, cross != null
|
# If we are making a cross compiler, cross != null
|
||||||
NIX_CC_CROSS = optionalString (targetPlatform == hostPlatform) builtins.toString stdenv.cc;
|
NIX_CC_CROSS = optionalString (targetPlatform == hostPlatform) builtins.toString stdenv.cc;
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
configureFlags = ''
|
configureFlags =
|
||||||
${if enableMultilib then "" else "--disable-multilib"}
|
optional (!enableMultilib) "--disable-multilib" ++
|
||||||
${if enableShared then "" else "--disable-shared"}
|
optional (!enableShared) "--disable-shared" ++
|
||||||
${if cloog != null then "--with-cloog=${cloog.crossDrv} --enable-cloog-backend=isl" else ""}
|
optional langJava "--with-ecj-jar=${javaEcj.crossDrv}" ++
|
||||||
${if langJava then "--with-ecj-jar=${javaEcj.crossDrv}" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr.crossDrv}" ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr.crossDrv}" else ""}
|
optional (cloog != null) "--with-cloog=${cloog.crossDrv}" "--enable-cloog-backend=isl" ++
|
||||||
--with-gmp=${gmp.crossDrv}
|
[
|
||||||
--with-mpfr=${mpfr.crossDrv}
|
"--with-gmp=${gmp.crossDrv}"
|
||||||
--with-mpc=${libmpc.crossDrv}
|
"--with-mpfr=${mpfr.crossDrv}"
|
||||||
--disable-libstdcxx-pch
|
"--with-mpc=${libmpc.crossDrv}"
|
||||||
--without-included-gettext
|
"--disable-libstdcxx-pch"
|
||||||
--with-system-zlib
|
"--without-included-gettext"
|
||||||
--enable-languages=${
|
"--with-system-zlib"
|
||||||
concatStrings (intersperse ","
|
"--enable-languages=${
|
||||||
( optional langC "c"
|
concatStrings (intersperse ","
|
||||||
++ optional langCC "c++"
|
( optional langC "c"
|
||||||
++ optional langFortran "fortran"
|
++ optional langCC "c++"
|
||||||
++ optional langJava "java"
|
++ optional langFortran "fortran"
|
||||||
++ optional langAda "ada"
|
++ optional langJava "java"
|
||||||
++ optional langVhdl "vhdl"
|
++ optional langAda "ada"
|
||||||
++ optional langGo "go"
|
++ optional langVhdl "vhdl"
|
||||||
|
++ optional langGo "go"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
}"
|
||||||
}
|
] ++
|
||||||
${if langAda then " --enable-libada" else ""}
|
optional langAda "--enable-libada" ++
|
||||||
${xwithArch}
|
optional (xgccArch != null) "--with-arch=${xgccArch}" ++
|
||||||
${xwithCpu}
|
optional (xgccCpu != null) "--with-cpu=${xgccCpu}" ++
|
||||||
${xwithAbi}
|
optional (xgccAbi != null) "--with-abi=${xgccAbi}" ++
|
||||||
${xwithFpu}
|
optional (xgccFpu != null) "--with-fpu=${xgccFpu}" ++
|
||||||
${xwithFloat}
|
optional (xgccFloat != null) "--with-float=${xgccFloat}"
|
||||||
'';
|
;
|
||||||
buildFlags = "";
|
buildFlags = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -103,107 +103,88 @@ let version = "5.5.0";
|
|||||||
javaAwtGtk = langJava && x11Support;
|
javaAwtGtk = langJava && x11Support;
|
||||||
|
|
||||||
/* Platform flags */
|
/* Platform flags */
|
||||||
platformFlags = let
|
mkPlatformFlags = platform: let
|
||||||
gccArch = stdenv.platform.gcc.arch or null;
|
gccArch = platform.gcc.arch or null;
|
||||||
gccCpu = stdenv.platform.gcc.cpu or null;
|
gccCpu = platform.gcc.cpu or null;
|
||||||
gccAbi = stdenv.platform.gcc.abi or null;
|
gccAbi = platform.gcc.abi or null;
|
||||||
gccFpu = stdenv.platform.gcc.fpu or null;
|
gccFpu = platform.gcc.fpu or null;
|
||||||
gccFloat = stdenv.platform.gcc.float or null;
|
gccFloat = platform.gcc.float or null;
|
||||||
gccMode = stdenv.platform.gcc.mode or null;
|
gccMode = platform.gcc.mode or null;
|
||||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else "";
|
in
|
||||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else "";
|
optional (gccArch != null) "--with-arch=${gccArch}" ++
|
||||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else "";
|
optional (gccCpu != null) "--with-cpu=${gccCpu}" ++
|
||||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else "";
|
optional (gccAbi != null) "--with-abi=${gccAbi}" ++
|
||||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else "";
|
optional (gccFpu != null) "--with-fpu=${gccFpu}" ++
|
||||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else "";
|
optional (gccFloat != null) "--with-float=${gccFloat}" ++
|
||||||
in
|
optional (gccMode != null) "--with-mode=${gccMode}";
|
||||||
withArch +
|
|
||||||
withCpu +
|
|
||||||
withAbi +
|
|
||||||
withFpu +
|
|
||||||
withFloat +
|
|
||||||
withMode;
|
|
||||||
|
|
||||||
/* Cross-gcc settings */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
||||||
crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem";
|
crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem";
|
||||||
crossConfigureFlags = let
|
crossConfigureFlags =
|
||||||
gccArch = targetPlatform.gcc.arch or null;
|
mkPlatformFlags targetPlatform ++
|
||||||
gccCpu = targetPlatform.gcc.cpu or null;
|
|
||||||
gccAbi = targetPlatform.gcc.abi or null;
|
# Ensure that -print-prog-name is able to find the correct programs.
|
||||||
gccFpu = targetPlatform.gcc.fpu or null;
|
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
|
||||||
gccFloat = targetPlatform.gcc.float or null;
|
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
|
||||||
gccMode = targetPlatform.gcc.mode or null;
|
(if crossMingw && crossStageStatic then [
|
||||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else "";
|
"--with-headers=${libcCross}/include"
|
||||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else "";
|
"--with-gcc"
|
||||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else "";
|
"--with-gnu-as"
|
||||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else "";
|
"--with-gnu-ld"
|
||||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else "";
|
"--with-gnu-ld"
|
||||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else "";
|
"--disable-shared"
|
||||||
in
|
"--disable-nls"
|
||||||
withArch +
|
"--disable-debug"
|
||||||
withCpu +
|
"--enable-sjlj-exceptions"
|
||||||
withAbi +
|
"--enable-threads=win32"
|
||||||
withFpu +
|
"--disable-win32-registry"
|
||||||
withFloat +
|
] else if crossStageStatic then [
|
||||||
withMode +
|
"--disable-libssp"
|
||||||
# Ensure that -print-prog-name is able to find the correct programs.
|
"--disable-nls"
|
||||||
" --with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" +
|
"--without-headers"
|
||||||
" --with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" +
|
"--disable-threads"
|
||||||
(if crossMingw && crossStageStatic then
|
"--disable-libgomp"
|
||||||
" --with-headers=${libcCross}/include" +
|
"--disable-libquadmath"
|
||||||
" --with-gcc" +
|
"--disable-shared"
|
||||||
" --with-gnu-as" +
|
"--disable-libatomic" # libatomic requires libc
|
||||||
" --with-gnu-ld" +
|
"--disable-decimal-float" # libdecnumber requires libc
|
||||||
" --with-gnu-ld" +
|
] else [
|
||||||
" --disable-shared" +
|
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
|
||||||
" --disable-nls" +
|
else "--with-headers=${getDev libcCross}/include")
|
||||||
" --disable-debug" +
|
"--enable-__cxa_atexit"
|
||||||
" --enable-sjlj-exceptions" +
|
"--enable-long-long"
|
||||||
" --enable-threads=win32" +
|
] ++
|
||||||
" --disable-win32-registry"
|
(if crossMingw then [
|
||||||
else if crossStageStatic then
|
"--enable-threads=win32"
|
||||||
" --disable-libssp --disable-nls" +
|
"--enable-sjlj-exceptions"
|
||||||
" --without-headers" +
|
"--enable-hash-synchronization"
|
||||||
" --disable-threads " +
|
"--disable-libssp"
|
||||||
" --disable-libgomp " +
|
"--disable-nls"
|
||||||
" --disable-libquadmath" +
|
"--with-dwarf2"
|
||||||
" --disable-shared" +
|
# I think noone uses shared gcc libs in mingw, so we better do the same.
|
||||||
" --disable-libatomic " + # libatomic requires libc
|
# In any case, mingw32 g++ linking is broken by default with shared libs,
|
||||||
" --disable-decimal-float" # libdecnumber requires libc
|
# unless adding "-lsupc++" to any linking command. I don't know why.
|
||||||
else
|
"--disable-shared"
|
||||||
(if crossDarwin then " --with-sysroot=${getLib libcCross}/share/sysroot"
|
# To keep ABI compatibility with upstream mingw-w64
|
||||||
else " --with-headers=${getDev libcCross}/include") +
|
"--enable-fully-dynamic-string"
|
||||||
" --enable-__cxa_atexit" +
|
] else
|
||||||
" --enable-long-long" +
|
optionals (targetPlatform.libc == "uclibc") [
|
||||||
(if crossMingw then
|
# libsanitizer requires netrom/netrom.h which is not
|
||||||
" --enable-threads=win32" +
|
# available in uclibc.
|
||||||
" --enable-sjlj-exceptions" +
|
"--disable-libsanitizer"
|
||||||
" --enable-hash-synchronization" +
|
# In uclibc cases, libgomp needs an additional '-ldl'
|
||||||
" --disable-libssp" +
|
# and as I don't know how to pass it, I disable libgomp.
|
||||||
" --disable-nls" +
|
"--disable-libgomp"
|
||||||
" --with-dwarf2" +
|
] ++ [
|
||||||
# I think noone uses shared gcc libs in mingw, so we better do the same.
|
"--enable-threads=posix"
|
||||||
# In any case, mingw32 g++ linking is broken by default with shared libs,
|
"--enable-nls"
|
||||||
# unless adding "-lsupc++" to any linking command. I don't know why.
|
"--disable-decimal-float" # No final libdecnumber (it may work only in 386)
|
||||||
" --disable-shared" +
|
]));
|
||||||
# To keep ABI compatibility with upstream mingw-w64
|
|
||||||
" --enable-fully-dynamic-string"
|
|
||||||
else (if targetPlatform.libc == "uclibc" then
|
|
||||||
# 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" else "") +
|
|
||||||
" --enable-threads=posix" +
|
|
||||||
" --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;
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
@ -340,62 +321,87 @@ stdenv.mkDerivation ({
|
|||||||
then []
|
then []
|
||||||
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags = "
|
configureFlags =
|
||||||
${if hostPlatform.isSunOS then
|
# Basic dependencies
|
||||||
" --enable-long-long --enable-libssp --enable-threads=posix --disable-nls --enable-__cxa_atexit " +
|
[
|
||||||
# On Illumos/Solaris GNU as is preferred
|
"--with-gmp-include=${gmp.dev}/include"
|
||||||
" --with-gnu-as --without-gnu-ld "
|
"--with-gmp-lib=${gmp.out}/lib"
|
||||||
else ""}
|
"--with-mpfr-include=${mpfr.dev}/include"
|
||||||
--enable-lto
|
"--with-mpfr-lib=${mpfr.out}/lib"
|
||||||
${if enableMultilib then "--enable-multilib --disable-libquadmath" else "--disable-multilib"}
|
"--with-mpc=${libmpc}"
|
||||||
${if enableShared then "" else "--disable-shared"}
|
] ++
|
||||||
${if enablePlugin then "--enable-plugin" else "--disable-plugin"}
|
optional (libelf != null) "--with-libelf=${libelf}" ++
|
||||||
${optionalString (isl != null) "--with-isl=${isl}"}
|
|
||||||
${if langJava then
|
# Basic configuration
|
||||||
"--with-ecj-jar=${javaEcj} " +
|
[
|
||||||
|
"--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 langAda "ada"
|
||||||
|
++ optional langVhdl "vhdl"
|
||||||
|
++ optional langGo "go"
|
||||||
|
++ optional langObjC "objc"
|
||||||
|
++ optional langObjCpp "obj-c++"
|
||||||
|
++ optionals crossDarwin [ "objc" "obj-c++" ]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}"
|
||||||
|
] ++
|
||||||
|
|
||||||
|
# Optional features
|
||||||
|
optional (isl != null) "--with-isl=${isl}" ++
|
||||||
|
|
||||||
|
(if enableMultilib
|
||||||
|
then ["--enable-multilib" "--disable-libquadmath"]
|
||||||
|
else ["--disable-multilib"]) ++
|
||||||
|
optional (!enableShared) "--disable-shared" ++
|
||||||
|
(if enablePlugin
|
||||||
|
then ["--enable-plugin"]
|
||||||
|
else ["--disable-plugin"]) ++
|
||||||
|
|
||||||
|
# Java options
|
||||||
|
optionals langJava [
|
||||||
|
"--with-ecj-jar=${javaEcj}"
|
||||||
|
|
||||||
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
||||||
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
||||||
"--enable-java-home --with-java-home=\${prefix}/lib/jvm/jre "
|
"--enable-java-home"
|
||||||
else ""}
|
"--with-java-home=\${prefix}/lib/jvm/jre"
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
] ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr}" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
--with-gmp-include=${gmp.dev}/include
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}" ++
|
||||||
--with-gmp-lib=${gmp.out}/lib
|
|
||||||
--with-mpfr-include=${mpfr.dev}/include
|
# Ada
|
||||||
--with-mpfr-lib=${mpfr.out}/lib
|
optional langAda "--enable-libada" ++
|
||||||
--with-mpc=${libmpc}
|
|
||||||
${if libelf != null then "--with-libelf=${libelf}" else ""}
|
# Cross-compilation
|
||||||
--disable-libstdcxx-pch
|
optional (targetPlatform == hostPlatform) (
|
||||||
--without-included-gettext
|
let incDir = if hostPlatform.isDarwin
|
||||||
--with-system-zlib
|
then "${darwin.usr-include}"
|
||||||
--enable-static
|
else "${getDev stdenv.cc.libc}/include";
|
||||||
--enable-languages=${
|
in "--with-native-system-header-dir=${incDir}"
|
||||||
concatStrings (intersperse ","
|
) ++
|
||||||
( optional langC "c"
|
|
||||||
++ optional langCC "c++"
|
optional (targetPlatform == hostPlatform) (mkPlatformFlags stdenv.platform) ++
|
||||||
++ optional langFortran "fortran"
|
optional (targetPlatform != hostPlatform) crossConfigureFlags ++
|
||||||
++ optional langJava "java"
|
optional (!bootstrap) "--disable-bootstrap" ++
|
||||||
++ optional langAda "ada"
|
|
||||||
++ optional langVhdl "vhdl"
|
# Platform-specific flags
|
||||||
++ optional langGo "go"
|
optional (targetPlatform == hostPlatform && targetPlatform.isi686) "--with-arch=i686" ++
|
||||||
++ optional langObjC "objc"
|
optionals hostPlatform.isSunOS [
|
||||||
++ optional langObjCpp "obj-c++"
|
"--enable-long-long" "--enable-libssp" "--enable-threads=posix" "--disable-nls" "--enable-__cxa_atexit"
|
||||||
++ optionals crossDarwin [ "objc" "obj-c++" ]
|
# On Illumos/Solaris GNU as is preferred
|
||||||
)
|
"--with-gnu-as" "--without-gnu-ld"
|
||||||
)
|
]
|
||||||
}
|
;
|
||||||
${if targetPlatform == hostPlatform
|
|
||||||
then if hostPlatform.isDarwin
|
|
||||||
then " --with-native-system-header-dir=${darwin.usr-include}"
|
|
||||||
else " --with-native-system-header-dir=${getDev stdenv.cc.libc}/include"
|
|
||||||
else ""}
|
|
||||||
${if langAda then " --enable-libada" else ""}
|
|
||||||
${if targetPlatform == hostPlatform && targetPlatform.isi686 then "--with-arch=i686" else ""}
|
|
||||||
${if targetPlatform != hostPlatform then crossConfigureFlags else ""}
|
|
||||||
${if !bootstrap then "--disable-bootstrap" else ""}
|
|
||||||
${if targetPlatform == hostPlatform then platformFlags else ""}
|
|
||||||
";
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
@ -408,17 +414,13 @@ stdenv.mkDerivation ({
|
|||||||
then "install-strip"
|
then "install-strip"
|
||||||
else "install";
|
else "install";
|
||||||
|
|
||||||
|
/* For cross-built gcc (build != host == target) */
|
||||||
crossAttrs = let
|
crossAttrs = let
|
||||||
xgccArch = targetPlatform.gcc.arch or null;
|
xgccArch = targetPlatform.gcc.arch or null;
|
||||||
xgccCpu = targetPlatform.gcc.cpu or null;
|
xgccCpu = targetPlatform.gcc.cpu or null;
|
||||||
xgccAbi = targetPlatform.gcc.abi or null;
|
xgccAbi = targetPlatform.gcc.abi or null;
|
||||||
xgccFpu = targetPlatform.gcc.fpu or null;
|
xgccFpu = targetPlatform.gcc.fpu or null;
|
||||||
xgccFloat = targetPlatform.gcc.float or null;
|
xgccFloat = targetPlatform.gcc.float or null;
|
||||||
xwithArch = if xgccArch != null then " --with-arch=${xgccArch}" else "";
|
|
||||||
xwithCpu = if xgccCpu != null then " --with-cpu=${xgccCpu}" else "";
|
|
||||||
xwithAbi = if xgccAbi != null then " --with-abi=${xgccAbi}" else "";
|
|
||||||
xwithFpu = if xgccFpu != null then " --with-fpu=${xgccFpu}" else "";
|
|
||||||
xwithFloat = if xgccFloat != null then " --with-float=${xgccFloat}" else "";
|
|
||||||
in {
|
in {
|
||||||
AR = "${targetPlatform.config}-ar";
|
AR = "${targetPlatform.config}-ar";
|
||||||
LD = "${targetPlatform.config}-ld";
|
LD = "${targetPlatform.config}-ld";
|
||||||
@ -432,37 +434,39 @@ stdenv.mkDerivation ({
|
|||||||
# If we are making a cross compiler, cross != null
|
# If we are making a cross compiler, cross != null
|
||||||
NIX_CC_CROSS = optionalString (targetPlatform == hostPlatform) builtins.toString stdenv.cc;
|
NIX_CC_CROSS = optionalString (targetPlatform == hostPlatform) builtins.toString stdenv.cc;
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
configureFlags = ''
|
configureFlags =
|
||||||
${if enableMultilib then "" else "--disable-multilib"}
|
optional (!enableMultilib) "--disable-multilib" ++
|
||||||
${if enableShared then "" else "--disable-shared"}
|
optional (!enableShared) "--disable-shared" ++
|
||||||
${if langJava then "--with-ecj-jar=${javaEcj.crossDrv}" else ""}
|
optional langJava "--with-ecj-jar=${javaEcj.crossDrv}" ++
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr.crossDrv}" else ""}
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr.crossDrv}" ++
|
||||||
--with-gmp=${gmp.crossDrv}
|
[
|
||||||
--with-mpfr=${mpfr.crossDrv}
|
"--with-gmp=${gmp.crossDrv}"
|
||||||
--with-mpc=${libmpc.crossDrv}
|
"--with-mpfr=${mpfr.crossDrv}"
|
||||||
--disable-libstdcxx-pch
|
"--with-mpc=${libmpc.crossDrv}"
|
||||||
--without-included-gettext
|
"--disable-libstdcxx-pch"
|
||||||
--with-system-zlib
|
"--without-included-gettext"
|
||||||
--enable-languages=${
|
"--with-system-zlib"
|
||||||
concatStrings (intersperse ","
|
"--enable-languages=${
|
||||||
( optional langC "c"
|
concatStrings (intersperse ","
|
||||||
++ optional langCC "c++"
|
( optional langC "c"
|
||||||
++ optional langFortran "fortran"
|
++ optional langCC "c++"
|
||||||
++ optional langJava "java"
|
++ optional langFortran "fortran"
|
||||||
++ optional langAda "ada"
|
++ optional langJava "java"
|
||||||
++ optional langVhdl "vhdl"
|
++ optional langAda "ada"
|
||||||
++ optional langGo "go"
|
++ optional langVhdl "vhdl"
|
||||||
|
++ optional langGo "go"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
}"
|
||||||
}
|
] ++
|
||||||
${if langAda then " --enable-libada" else ""}
|
optional langAda "--enable-libada" ++
|
||||||
${xwithArch}
|
optional (xgccArch != null) "--with-arch=${xgccArch}" ++
|
||||||
${xwithCpu}
|
optional (xgccCpu != null) "--with-cpu=${xgccCpu}" ++
|
||||||
${xwithAbi}
|
optional (xgccAbi != null) "--with-abi=${xgccAbi}" ++
|
||||||
${xwithFpu}
|
optional (xgccFpu != null) "--with-fpu=${xgccFpu}" ++
|
||||||
${xwithFloat}
|
optional (xgccFloat != null) "--with-float=${xgccFloat}"
|
||||||
'';
|
;
|
||||||
buildFlags = "";
|
buildFlags = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -100,103 +100,84 @@ let version = "6.4.0";
|
|||||||
javaAwtGtk = langJava && x11Support;
|
javaAwtGtk = langJava && x11Support;
|
||||||
|
|
||||||
/* Platform flags */
|
/* Platform flags */
|
||||||
platformFlags = let
|
mkPlatformFlags = platform: let
|
||||||
gccArch = stdenv.platform.gcc.arch or null;
|
gccArch = platform.gcc.arch or null;
|
||||||
gccCpu = stdenv.platform.gcc.cpu or null;
|
gccCpu = platform.gcc.cpu or null;
|
||||||
gccAbi = stdenv.platform.gcc.abi or null;
|
gccAbi = platform.gcc.abi or null;
|
||||||
gccFpu = stdenv.platform.gcc.fpu or null;
|
gccFpu = platform.gcc.fpu or null;
|
||||||
gccFloat = stdenv.platform.gcc.float or null;
|
gccFloat = platform.gcc.float or null;
|
||||||
gccMode = stdenv.platform.gcc.mode or null;
|
gccMode = platform.gcc.mode or null;
|
||||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else "";
|
|
||||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else "";
|
|
||||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else "";
|
|
||||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else "";
|
|
||||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else "";
|
|
||||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else "";
|
|
||||||
in
|
in
|
||||||
withArch +
|
optional (gccArch != null) "--with-arch=${gccArch}" ++
|
||||||
withCpu +
|
optional (gccCpu != null) "--with-cpu=${gccCpu}" ++
|
||||||
withAbi +
|
optional (gccAbi != null) "--with-abi=${gccAbi}" ++
|
||||||
withFpu +
|
optional (gccFpu != null) "--with-fpu=${gccFpu}" ++
|
||||||
withFloat +
|
optional (gccFloat != null) "--with-float=${gccFloat}" ++
|
||||||
withMode;
|
optional (gccMode != null) "--with-mode=${gccMode}";
|
||||||
|
|
||||||
/* Cross-gcc settings */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
||||||
crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem";
|
crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem";
|
||||||
crossConfigureFlags = let
|
crossConfigureFlags =
|
||||||
gccArch = targetPlatform.gcc.arch or null;
|
mkPlatformFlags targetPlatform ++
|
||||||
gccCpu = targetPlatform.gcc.cpu or null;
|
|
||||||
gccAbi = targetPlatform.gcc.abi or null;
|
# Ensure that -print-prog-name is able to find the correct programs.
|
||||||
gccFpu = targetPlatform.gcc.fpu or null;
|
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
|
||||||
gccFloat = targetPlatform.gcc.float or null;
|
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
|
||||||
gccMode = targetPlatform.gcc.mode or null;
|
(if crossMingw && crossStageStatic then [
|
||||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else "";
|
"--with-headers=${libcCross}/include"
|
||||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else "";
|
"--with-gcc"
|
||||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else "";
|
"--with-gnu-as"
|
||||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else "";
|
"--with-gnu-ld"
|
||||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else "";
|
"--with-gnu-ld"
|
||||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else "";
|
"--disable-shared"
|
||||||
in
|
"--disable-nls"
|
||||||
withArch +
|
"--disable-debug"
|
||||||
withCpu +
|
"--enable-sjlj-exceptions"
|
||||||
withAbi +
|
"--enable-threads=win32"
|
||||||
withFpu +
|
"--disable-win32-registry"
|
||||||
withFloat +
|
] else if crossStageStatic then [
|
||||||
withMode +
|
"--disable-libssp"
|
||||||
# Ensure that -print-prog-name is able to find the correct programs.
|
"--disable-nls"
|
||||||
" --with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" +
|
"--without-headers"
|
||||||
" --with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" +
|
"--disable-threads"
|
||||||
(if crossMingw && crossStageStatic then
|
"--disable-libgomp"
|
||||||
" --with-headers=${libcCross}/include" +
|
"--disable-libquadmath"
|
||||||
" --with-gcc" +
|
"--disable-shared"
|
||||||
" --with-gnu-as" +
|
"--disable-libatomic" # libatomic requires libc
|
||||||
" --with-gnu-ld" +
|
"--disable-decimal-float" # libdecnumber requires libc
|
||||||
" --with-gnu-ld" +
|
] else [
|
||||||
" --disable-shared" +
|
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
|
||||||
" --disable-nls" +
|
else "--with-headers=${getDev libcCross}/include")
|
||||||
" --disable-debug" +
|
"--enable-__cxa_atexit"
|
||||||
" --enable-sjlj-exceptions" +
|
"--enable-long-long"
|
||||||
" --enable-threads=win32" +
|
] ++
|
||||||
" --disable-win32-registry"
|
(if crossMingw then [
|
||||||
else if crossStageStatic then
|
"--enable-threads=win32"
|
||||||
" --disable-libssp --disable-nls" +
|
"--enable-sjlj-exceptions"
|
||||||
" --without-headers" +
|
"--enable-hash-synchronization"
|
||||||
" --disable-threads " +
|
"--disable-libssp"
|
||||||
" --disable-libgomp " +
|
"--disable-nls"
|
||||||
" --disable-libquadmath" +
|
"--with-dwarf2"
|
||||||
" --disable-shared" +
|
# I think noone uses shared gcc libs in mingw, so we better do the same.
|
||||||
" --disable-libatomic " + # libatomic requires libc
|
# In any case, mingw32 g++ linking is broken by default with shared libs,
|
||||||
" --disable-decimal-float" # libdecnumber requires libc
|
# unless adding "-lsupc++" to any linking command. I don't know why.
|
||||||
else
|
"--disable-shared"
|
||||||
(if crossDarwin then " --with-sysroot=${getLib libcCross}/share/sysroot"
|
# To keep ABI compatibility with upstream mingw-w64
|
||||||
else " --with-headers=${getDev libcCross}/include") +
|
"--enable-fully-dynamic-string"
|
||||||
" --enable-__cxa_atexit" +
|
] else
|
||||||
" --enable-long-long" +
|
optionals (targetPlatform.libc == "uclibc") [
|
||||||
(if crossMingw then
|
# libsanitizer requires netrom/netrom.h which is not
|
||||||
" --enable-threads=win32" +
|
# available in uclibc.
|
||||||
" --enable-sjlj-exceptions" +
|
"--disable-libsanitizer"
|
||||||
" --enable-hash-synchronization" +
|
# In uclibc cases, libgomp needs an additional '-ldl'
|
||||||
" --disable-libssp" +
|
# and as I don't know how to pass it, I disable libgomp.
|
||||||
" --disable-nls" +
|
"--disable-libgomp"
|
||||||
" --with-dwarf2" +
|
] ++ [
|
||||||
# I think noone uses shared gcc libs in mingw, so we better do the same.
|
"--enable-threads=posix"
|
||||||
# In any case, mingw32 g++ linking is broken by default with shared libs,
|
"--enable-nls"
|
||||||
# unless adding "-lsupc++" to any linking command. I don't know why.
|
"--disable-decimal-float" # No final libdecnumber (it may work only in 386)
|
||||||
" --disable-shared" +
|
]));
|
||||||
# To keep ABI compatibility with upstream mingw-w64
|
|
||||||
" --enable-fully-dynamic-string"
|
|
||||||
else (if targetPlatform.libc == "uclibc" then
|
|
||||||
# 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" else "") +
|
|
||||||
" --enable-threads=posix" +
|
|
||||||
" --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 "";
|
||||||
|
|
||||||
@ -341,85 +322,104 @@ stdenv.mkDerivation ({
|
|||||||
then []
|
then []
|
||||||
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags = "
|
configureFlags =
|
||||||
${if hostPlatform.isSunOS then
|
# Basic dependencies
|
||||||
" --enable-long-long --enable-libssp --enable-threads=posix --disable-nls --enable-__cxa_atexit " +
|
[
|
||||||
# On Illumos/Solaris GNU as is preferred
|
"--with-gmp-include=${gmp.dev}/include"
|
||||||
" --with-gnu-as --without-gnu-ld "
|
"--with-gmp-lib=${gmp.out}/lib"
|
||||||
else ""}
|
"--with-mpfr-include=${mpfr.dev}/include"
|
||||||
--enable-lto
|
"--with-mpfr-lib=${mpfr.out}/lib"
|
||||||
${if enableMultilib then "--enable-multilib --disable-libquadmath" else "--disable-multilib"}
|
"--with-mpc=${libmpc}"
|
||||||
${if enableShared then "" else "--disable-shared"}
|
] ++
|
||||||
${if enablePlugin then "--enable-plugin" else "--disable-plugin"}
|
optional (libelf != null) "--with-libelf=${libelf}" ++
|
||||||
${optionalString (isl != null) "--with-isl=${isl}"}
|
|
||||||
${if langJava then
|
# Basic configuration
|
||||||
"--with-ecj-jar=${javaEcj} " +
|
[
|
||||||
|
"--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 langAda "ada"
|
||||||
|
++ optional langVhdl "vhdl"
|
||||||
|
++ optional langGo "go"
|
||||||
|
++ optional langObjC "objc"
|
||||||
|
++ optional langObjCpp "obj-c++"
|
||||||
|
++ optionals crossDarwin [ "objc" "obj-c++" ]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}"
|
||||||
|
] ++
|
||||||
|
|
||||||
|
(if enableMultilib
|
||||||
|
then ["--enable-multilib" "--disable-libquadmath"]
|
||||||
|
else ["--disable-multilib"]) ++
|
||||||
|
optional (!enableShared) "--disable-shared" ++
|
||||||
|
(if enablePlugin
|
||||||
|
then ["--enable-plugin"]
|
||||||
|
else ["--disable-plugin"]) ++
|
||||||
|
|
||||||
|
# Optional features
|
||||||
|
optional (isl != null) "--with-isl=${isl}" ++
|
||||||
|
|
||||||
|
# Java options
|
||||||
|
optionals langJava [
|
||||||
|
"--with-ecj-jar=${javaEcj}"
|
||||||
|
|
||||||
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
||||||
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
||||||
"--enable-java-home --with-java-home=\${prefix}/lib/jvm/jre "
|
"--enable-java-home"
|
||||||
else ""}
|
"--with-java-home=\${prefix}/lib/jvm/jre"
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
] ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr}" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
--with-gmp-include=${gmp.dev}/include
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}" ++
|
||||||
--with-gmp-lib=${gmp.out}/lib
|
|
||||||
--with-mpfr-include=${mpfr.dev}/include
|
# Ada
|
||||||
--with-mpfr-lib=${mpfr.out}/lib
|
optional langAda "--enable-libada" ++
|
||||||
--with-mpc=${libmpc}
|
|
||||||
${if libelf != null then "--with-libelf=${libelf}" else ""}
|
# Cross compilation
|
||||||
--disable-libstdcxx-pch
|
optional (targetPlatform == hostPlatform) (
|
||||||
--without-included-gettext
|
let incDir = if hostPlatform.isDarwin
|
||||||
--with-system-zlib
|
then "${darwin.usr-include}"
|
||||||
--enable-static
|
else "${getDev stdenv.cc.libc}/include";
|
||||||
--enable-languages=${
|
in "--with-native-system-header-dir=${incDir}"
|
||||||
concatStrings (intersperse ","
|
) ++
|
||||||
( optional langC "c"
|
|
||||||
++ optional langCC "c++"
|
optional (targetPlatform != hostPlatform) crossConfigureFlags ++
|
||||||
++ optional langFortran "fortran"
|
optional (!bootstrap) "--disable-bootstrap" ++
|
||||||
++ optional langJava "java"
|
|
||||||
++ optional langAda "ada"
|
# Platform-specific flags
|
||||||
++ optional langVhdl "vhdl"
|
optional (targetPlatform == hostPlatform && targetPlatform.isi686) "--with-arch=i686" ++
|
||||||
++ optional langGo "go"
|
optionals (hostPlatform.isSunOS) [
|
||||||
++ optional langObjC "objc"
|
"--enable-long-long" "--enable-libssp" "--enable-threads=posix" "--disable-nls" "--enable-__cxa_atexit"
|
||||||
++ optional langObjCpp "obj-c++"
|
# On Illumos/Solaris GNU as is preferred
|
||||||
++ optionals crossDarwin [ "objc" "obj-c++" ]
|
"--with-gnu-as" "--without-gnu-ld"
|
||||||
)
|
]
|
||||||
)
|
;
|
||||||
}
|
|
||||||
${if targetPlatform == hostPlatform
|
|
||||||
then if hostPlatform.isDarwin
|
|
||||||
then " --with-native-system-header-dir=${darwin.usr-include}"
|
|
||||||
else " --with-native-system-header-dir=${getDev stdenv.cc.libc}/include"
|
|
||||||
else ""}
|
|
||||||
${if langAda then " --enable-libada" else ""}
|
|
||||||
${if targetPlatform == hostPlatform && targetPlatform.isi686 then "--with-arch=i686" else ""}
|
|
||||||
${if targetPlatform != hostPlatform then crossConfigureFlags else ""}
|
|
||||||
${if !bootstrap then "--disable-bootstrap" else ""}
|
|
||||||
${if targetPlatform == hostPlatform then platformFlags else ""}
|
|
||||||
";
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
buildFlags = if bootstrap then
|
buildFlags =
|
||||||
(if profiledCompiler then "profiledbootstrap" else "bootstrap")
|
optional bootstrap (if profiledCompiler then "profiledbootstrap" else "bootstrap");
|
||||||
else "";
|
|
||||||
|
|
||||||
installTargets =
|
installTargets =
|
||||||
if stripped
|
if stripped
|
||||||
then "install-strip"
|
then "install-strip"
|
||||||
else "install";
|
else "install";
|
||||||
|
|
||||||
|
/* For cross-built gcc (build != host == target) */
|
||||||
crossAttrs = let
|
crossAttrs = let
|
||||||
xgccArch = targetPlatform.gcc.arch or null;
|
xgccArch = targetPlatform.gcc.arch or null;
|
||||||
xgccCpu = targetPlatform.gcc.cpu or null;
|
xgccCpu = targetPlatform.gcc.cpu or null;
|
||||||
xgccAbi = targetPlatform.gcc.abi or null;
|
xgccAbi = targetPlatform.gcc.abi or null;
|
||||||
xgccFpu = targetPlatform.gcc.fpu or null;
|
xgccFpu = targetPlatform.gcc.fpu or null;
|
||||||
xgccFloat = targetPlatform.gcc.float or null;
|
xgccFloat = targetPlatform.gcc.float or null;
|
||||||
xwithArch = if xgccArch != null then " --with-arch=${xgccArch}" else "";
|
|
||||||
xwithCpu = if xgccCpu != null then " --with-cpu=${xgccCpu}" else "";
|
|
||||||
xwithAbi = if xgccAbi != null then " --with-abi=${xgccAbi}" else "";
|
|
||||||
xwithFpu = if xgccFpu != null then " --with-fpu=${xgccFpu}" else "";
|
|
||||||
xwithFloat = if xgccFloat != null then " --with-float=${xgccFloat}" else "";
|
|
||||||
in {
|
in {
|
||||||
AR = "${targetPlatform.config}-ar";
|
AR = "${targetPlatform.config}-ar";
|
||||||
LD = "${targetPlatform.config}-ld";
|
LD = "${targetPlatform.config}-ld";
|
||||||
@ -433,37 +433,39 @@ stdenv.mkDerivation ({
|
|||||||
# If we are making a cross compiler, cross != null
|
# If we are making a cross compiler, cross != null
|
||||||
NIX_CC_CROSS = optionalString (targetPlatform == hostPlatform) builtins.toString stdenv.cc;
|
NIX_CC_CROSS = optionalString (targetPlatform == hostPlatform) builtins.toString stdenv.cc;
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
configureFlags = ''
|
configureFlags =
|
||||||
${if enableMultilib then "" else "--disable-multilib"}
|
optional (!enableMultilib) "--disable-multilib" ++
|
||||||
${if enableShared then "" else "--disable-shared"}
|
optional (!enableShared) "--disable-shared" ++
|
||||||
${if langJava then "--with-ecj-jar=${javaEcj.crossDrv}" else ""}
|
optional langJava "--with-ecj-jar=${javaEcj.crossDrv}" ++
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr.crossDrv}" else ""}
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr.crossDrv}" ++
|
||||||
--with-gmp=${gmp.crossDrv}
|
[
|
||||||
--with-mpfr=${mpfr.crossDrv}
|
"--with-gmp=${gmp.crossDrv}"
|
||||||
--with-mpc=${libmpc.crossDrv}
|
"--with-mpfr=${mpfr.crossDrv}"
|
||||||
--disable-libstdcxx-pch
|
"--with-mpc=${libmpc.crossDrv}"
|
||||||
--without-included-gettext
|
"--disable-libstdcxx-pch"
|
||||||
--with-system-zlib
|
"--without-included-gettext"
|
||||||
--enable-languages=${
|
"--with-system-zlib"
|
||||||
concatStrings (intersperse ","
|
"--enable-languages=${
|
||||||
( optional langC "c"
|
concatStrings (intersperse ","
|
||||||
++ optional langCC "c++"
|
( optional langC "c"
|
||||||
++ optional langFortran "fortran"
|
++ optional langCC "c++"
|
||||||
++ optional langJava "java"
|
++ optional langFortran "fortran"
|
||||||
++ optional langAda "ada"
|
++ optional langJava "java"
|
||||||
++ optional langVhdl "vhdl"
|
++ optional langAda "ada"
|
||||||
++ optional langGo "go"
|
++ optional langVhdl "vhdl"
|
||||||
|
++ optional langGo "go"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
}"
|
||||||
}
|
] ++
|
||||||
${if langAda then " --enable-libada" else ""}
|
optional langAda "--enable-libada" ++
|
||||||
${xwithArch}
|
optional (xgccArch != null) "--with-arch=${xgccArch}" ++
|
||||||
${xwithCpu}
|
optional (xgccCpu != null) "--with-cpu=${xgccCpu}" ++
|
||||||
${xwithAbi}
|
optional (xgccAbi != null) "--with-abi=${xgccAbi}" ++
|
||||||
${xwithFpu}
|
optional (xgccFpu != null) "--with-fpu=${xgccFpu}" ++
|
||||||
${xwithFloat}
|
optional (xgccFloat != null) "--with-float=${xgccFloat}"
|
||||||
'';
|
;
|
||||||
buildFlags = "";
|
buildFlags = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -98,108 +98,88 @@ let version = "7.2.0";
|
|||||||
javaAwtGtk = langJava && x11Support;
|
javaAwtGtk = langJava && x11Support;
|
||||||
|
|
||||||
/* Platform flags */
|
/* Platform flags */
|
||||||
platformFlags = let
|
mkPlatformFlags = platform: let
|
||||||
gccArch = stdenv.platform.gcc.arch or null;
|
gccArch = platform.gcc.arch or null;
|
||||||
gccCpu = stdenv.platform.gcc.cpu or null;
|
gccCpu = platform.gcc.cpu or null;
|
||||||
gccAbi = stdenv.platform.gcc.abi or null;
|
gccAbi = platform.gcc.abi or null;
|
||||||
gccFpu = stdenv.platform.gcc.fpu or null;
|
gccFpu = platform.gcc.fpu or null;
|
||||||
gccFloat = stdenv.platform.gcc.float or null;
|
gccFloat = platform.gcc.float or null;
|
||||||
gccMode = stdenv.platform.gcc.mode or null;
|
gccMode = platform.gcc.mode or null;
|
||||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else "";
|
in
|
||||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else "";
|
optional (gccArch != null) "--with-arch=${gccArch}" ++
|
||||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else "";
|
optional (gccCpu != null) "--with-cpu=${gccCpu}" ++
|
||||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else "";
|
optional (gccAbi != null) "--with-abi=${gccAbi}" ++
|
||||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else "";
|
optional (gccFpu != null) "--with-fpu=${gccFpu}" ++
|
||||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else "";
|
optional (gccFloat != null) "--with-float=${gccFloat}" ++
|
||||||
in
|
optional (gccMode != null) "--with-mode=${gccMode}";
|
||||||
withArch +
|
|
||||||
withCpu +
|
|
||||||
withAbi +
|
|
||||||
withFpu +
|
|
||||||
withFloat +
|
|
||||||
withMode;
|
|
||||||
|
|
||||||
/* Cross-gcc settings */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
||||||
crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem";
|
crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem";
|
||||||
crossConfigureFlags = let
|
crossConfigureFlags =
|
||||||
gccArch = targetPlatform.gcc.arch or null;
|
mkPlatformFlags targetPlatform ++
|
||||||
gccCpu = targetPlatform.gcc.cpu or null;
|
|
||||||
gccAbi = targetPlatform.gcc.abi or null;
|
# Ensure that -print-prog-name is able to find the correct programs.
|
||||||
gccFpu = targetPlatform.gcc.fpu or null;
|
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
|
||||||
gccFloat = targetPlatform.gcc.float or null;
|
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
|
||||||
gccMode = targetPlatform.gcc.mode or null;
|
(if crossMingw && crossStageStatic then [
|
||||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else "";
|
"--with-headers=${libcCross}/include"
|
||||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else "";
|
"--with-gcc"
|
||||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else "";
|
"--with-gnu-as"
|
||||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else "";
|
"--with-gnu-ld"
|
||||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else "";
|
"--with-gnu-ld"
|
||||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else "";
|
"--disable-shared"
|
||||||
in
|
"--disable-nls"
|
||||||
withArch +
|
"--disable-debug"
|
||||||
withCpu +
|
"--enable-sjlj-exceptions"
|
||||||
withAbi +
|
"--enable-threads=win32"
|
||||||
withFpu +
|
"--disable-win32-registry"
|
||||||
withFloat +
|
] else if crossStageStatic then [
|
||||||
withMode +
|
"--disable-libssp"
|
||||||
# Ensure that -print-prog-name is able to find the correct programs.
|
"--disable-nls"
|
||||||
" --with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" +
|
"--without-headers"
|
||||||
" --with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" +
|
"--disable-threads"
|
||||||
(if crossMingw && crossStageStatic then
|
"--disable-libgomp"
|
||||||
" --with-headers=${libcCross}/include" +
|
"--disable-libquadmath"
|
||||||
" --with-gcc" +
|
"--disable-shared"
|
||||||
" --with-gnu-as" +
|
"--disable-libatomic" # libatomic requires libc
|
||||||
" --with-gnu-ld" +
|
"--disable-decimal-float" # libdecnumber requires libc
|
||||||
" --with-gnu-ld" +
|
] else [
|
||||||
" --disable-shared" +
|
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
|
||||||
" --disable-nls" +
|
else "--with-headers=${getDev libcCross}/include")
|
||||||
" --disable-debug" +
|
"--enable-__cxa_atexit"
|
||||||
" --enable-sjlj-exceptions" +
|
"--enable-long-long"
|
||||||
" --enable-threads=win32" +
|
] ++
|
||||||
" --disable-win32-registry"
|
(if crossMingw then [
|
||||||
else if crossStageStatic then
|
"--enable-threads=win32"
|
||||||
" --disable-libssp --disable-nls" +
|
"--enable-sjlj-exceptions"
|
||||||
" --without-headers" +
|
"--enable-hash-synchronization"
|
||||||
" --disable-threads " +
|
"--disable-libssp"
|
||||||
" --disable-libgomp " +
|
"--disable-nls"
|
||||||
" --disable-libquadmath" +
|
"--with-dwarf2"
|
||||||
" --disable-shared" +
|
# I think noone uses shared gcc libs in mingw, so we better do the same.
|
||||||
" --disable-libatomic " + # libatomic requires libc
|
# In any case, mingw32 g++ linking is broken by default with shared libs,
|
||||||
" --disable-decimal-float" # libdecnumber requires libc
|
# unless adding "-lsupc++" to any linking command. I don't know why.
|
||||||
else
|
"--disable-shared"
|
||||||
(if crossDarwin then " --with-sysroot=${getLib libcCross}/share/sysroot"
|
# To keep ABI compatibility with upstream mingw-w64
|
||||||
else " --with-headers=${getDev libcCross}/include") +
|
"--enable-fully-dynamic-string"
|
||||||
# Ensure that -print-prog-name is able to find the correct programs.
|
] else
|
||||||
" --enable-__cxa_atexit" +
|
optionals (targetPlatform.libc == "uclibc") [
|
||||||
" --enable-long-long" +
|
# libsanitizer requires netrom/netrom.h which is not
|
||||||
(if crossMingw then
|
# available in uclibc.
|
||||||
" --enable-threads=win32" +
|
"--disable-libsanitizer"
|
||||||
" --enable-sjlj-exceptions" +
|
# In uclibc cases, libgomp needs an additional '-ldl'
|
||||||
" --enable-hash-synchronization" +
|
# and as I don't know how to pass it, I disable libgomp.
|
||||||
" --disable-libssp" +
|
"--disable-libgomp"
|
||||||
" --disable-nls" +
|
] ++ [
|
||||||
" --with-dwarf2" +
|
"--enable-threads=posix"
|
||||||
# I think noone uses shared gcc libs in mingw, so we better do the same.
|
"--enable-nls"
|
||||||
# In any case, mingw32 g++ linking is broken by default with shared libs,
|
"--disable-decimal-float" # No final libdecnumber (it may work only in 386)
|
||||||
# unless adding "-lsupc++" to any linking command. I don't know why.
|
]));
|
||||||
" --disable-shared" +
|
|
||||||
# To keep ABI compatibility with upstream mingw-w64
|
|
||||||
" --enable-fully-dynamic-string"
|
|
||||||
else (if targetPlatform.libc == "uclibc" then
|
|
||||||
# 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" else "") +
|
|
||||||
" --enable-threads=posix" +
|
|
||||||
" --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;
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
@ -335,62 +315,87 @@ stdenv.mkDerivation ({
|
|||||||
then []
|
then []
|
||||||
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags = "
|
configureFlags =
|
||||||
${if hostPlatform.isSunOS then
|
# Basic dependencies
|
||||||
" --enable-long-long --enable-libssp --enable-threads=posix --disable-nls --enable-__cxa_atexit " +
|
[
|
||||||
# On Illumos/Solaris GNU as is preferred
|
"--with-gmp-include=${gmp.dev}/include"
|
||||||
" --with-gnu-as --without-gnu-ld "
|
"--with-gmp-lib=${gmp.out}/lib"
|
||||||
else ""}
|
"--with-mpfr-include=${mpfr.dev}/include"
|
||||||
--enable-lto
|
"--with-mpfr-lib=${mpfr.out}/lib"
|
||||||
${if enableMultilib then "--enable-multilib --disable-libquadmath" else "--disable-multilib"}
|
"--with-mpc=${libmpc}"
|
||||||
${if enableShared then "" else "--disable-shared"}
|
] ++
|
||||||
${if enablePlugin then "--enable-plugin" else "--disable-plugin"}
|
optional (libelf != null) "--with-libelf=${libelf}" ++
|
||||||
${optionalString (isl != null) "--with-isl=${isl}"}
|
|
||||||
${if langJava then
|
# Basic configuration
|
||||||
"--with-ecj-jar=${javaEcj} " +
|
[
|
||||||
|
"--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 langAda "ada"
|
||||||
|
++ optional langVhdl "vhdl"
|
||||||
|
++ optional langGo "go"
|
||||||
|
++ optional langObjC "objc"
|
||||||
|
++ optional langObjCpp "obj-c++"
|
||||||
|
++ optionals crossDarwin [ "objc" "obj-c++" ]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}"
|
||||||
|
] ++
|
||||||
|
|
||||||
|
(if enableMultilib
|
||||||
|
then ["--enable-multilib" "--disable-libquadmath"]
|
||||||
|
else ["--disable-multilib"]) ++
|
||||||
|
optional (!enableShared) "--disable-shared" ++
|
||||||
|
(if enablePlugin
|
||||||
|
then ["--enable-plugin"]
|
||||||
|
else ["--disable-plugin"]) ++
|
||||||
|
|
||||||
|
# Optional features
|
||||||
|
optional (isl != null) "--with-isl=${isl}" ++
|
||||||
|
|
||||||
|
# Java options
|
||||||
|
optionals langJava [
|
||||||
|
"--with-ecj-jar=${javaEcj}"
|
||||||
|
|
||||||
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
||||||
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
||||||
"--enable-java-home --with-java-home=\${prefix}/lib/jvm/jre "
|
"--enable-java-home"
|
||||||
else ""}
|
"--with-java-home=\${prefix}/lib/jvm/jre"
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
] ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr}" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
--with-gmp-include=${gmp.dev}/include
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}" ++
|
||||||
--with-gmp-lib=${gmp.out}/lib
|
|
||||||
--with-mpfr-include=${mpfr.dev}/include
|
# Ada
|
||||||
--with-mpfr-lib=${mpfr.out}/lib
|
optional langAda "--enable-libada" ++
|
||||||
--with-mpc=${libmpc}
|
|
||||||
${if libelf != null then "--with-libelf=${libelf}" else ""}
|
# Cross-compilation
|
||||||
--disable-libstdcxx-pch
|
optional (targetPlatform == hostPlatform) (
|
||||||
--without-included-gettext
|
let incDir = if hostPlatform.isDarwin
|
||||||
--with-system-zlib
|
then "${darwin.usr-include}"
|
||||||
--enable-static
|
else "${getDev stdenv.cc.libc}/include";
|
||||||
--enable-languages=${
|
in "--with-native-system-header-dir=${incDir}"
|
||||||
concatStrings (intersperse ","
|
) ++
|
||||||
( optional langC "c"
|
|
||||||
++ optional langCC "c++"
|
optional (targetPlatform == hostPlatform) (mkPlatformFlags stdenv.platform) ++
|
||||||
++ optional langFortran "fortran"
|
optional (targetPlatform != hostPlatform) crossConfigureFlags ++
|
||||||
++ optional langJava "java"
|
optional (!bootstrap) "--disable-bootstrap" ++
|
||||||
++ optional langAda "ada"
|
|
||||||
++ optional langVhdl "vhdl"
|
# Platform-specific flags
|
||||||
++ optional langGo "go"
|
optional (targetPlatform == hostPlatform && targetPlatform.isi686) "--with-arch=i686" ++
|
||||||
++ optional langObjC "objc"
|
optionals hostPlatform.isSunOS [
|
||||||
++ optional langObjCpp "obj-c++"
|
"--enable-long-long" "--enable-libssp" "--enable-threads=posix" "--disable-nls" "--enable-__cxa_atexit"
|
||||||
++ optionals crossDarwin [ "objc" "obj-c++" ]
|
# On Illumos/Solaris GNU as is preferred
|
||||||
)
|
"--with-gnu-as" "--without-gnu-ld"
|
||||||
)
|
]
|
||||||
}
|
;
|
||||||
${if targetPlatform == hostPlatform
|
|
||||||
then if hostPlatform.isDarwin
|
|
||||||
then " --with-native-system-header-dir=${darwin.usr-include}"
|
|
||||||
else " --with-native-system-header-dir=${getDev stdenv.cc.libc}/include"
|
|
||||||
else ""}
|
|
||||||
${if langAda then " --enable-libada" else ""}
|
|
||||||
${if targetPlatform == hostPlatform && targetPlatform.isi686 then "--with-arch=i686" else ""}
|
|
||||||
${if targetPlatform != hostPlatform then crossConfigureFlags else ""}
|
|
||||||
${if !bootstrap then "--disable-bootstrap" else ""}
|
|
||||||
${if targetPlatform == hostPlatform then platformFlags else ""}
|
|
||||||
";
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
@ -403,17 +408,13 @@ stdenv.mkDerivation ({
|
|||||||
then "install-strip"
|
then "install-strip"
|
||||||
else "install";
|
else "install";
|
||||||
|
|
||||||
|
/* For cross-built gcc (build != host == target) */
|
||||||
crossAttrs = let
|
crossAttrs = let
|
||||||
xgccArch = targetPlatform.gcc.arch or null;
|
xgccArch = targetPlatform.gcc.arch or null;
|
||||||
xgccCpu = targetPlatform.gcc.cpu or null;
|
xgccCpu = targetPlatform.gcc.cpu or null;
|
||||||
xgccAbi = targetPlatform.gcc.abi or null;
|
xgccAbi = targetPlatform.gcc.abi or null;
|
||||||
xgccFpu = targetPlatform.gcc.fpu or null;
|
xgccFpu = targetPlatform.gcc.fpu or null;
|
||||||
xgccFloat = targetPlatform.gcc.float or null;
|
xgccFloat = targetPlatform.gcc.float or null;
|
||||||
xwithArch = if xgccArch != null then " --with-arch=${xgccArch}" else "";
|
|
||||||
xwithCpu = if xgccCpu != null then " --with-cpu=${xgccCpu}" else "";
|
|
||||||
xwithAbi = if xgccAbi != null then " --with-abi=${xgccAbi}" else "";
|
|
||||||
xwithFpu = if xgccFpu != null then " --with-fpu=${xgccFpu}" else "";
|
|
||||||
xwithFloat = if xgccFloat != null then " --with-float=${xgccFloat}" else "";
|
|
||||||
in {
|
in {
|
||||||
AR = "${targetPlatform.config}-ar";
|
AR = "${targetPlatform.config}-ar";
|
||||||
LD = "${targetPlatform.config}-ld";
|
LD = "${targetPlatform.config}-ld";
|
||||||
@ -427,37 +428,39 @@ stdenv.mkDerivation ({
|
|||||||
# If we are making a cross compiler, targetPlatform != hostPlatform
|
# If we are making a cross compiler, targetPlatform != hostPlatform
|
||||||
NIX_CC_CROSS = if targetPlatform == hostPlatform then "${stdenv.ccCross}" else "";
|
NIX_CC_CROSS = if targetPlatform == hostPlatform then "${stdenv.ccCross}" else "";
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
configureFlags = ''
|
configureFlags =
|
||||||
${if enableMultilib then "" else "--disable-multilib"}
|
optional (!enableMultilib) "--disable-multilib" ++
|
||||||
${if enableShared then "" else "--disable-shared"}
|
optional (!enableShared) "--disable-shared" ++
|
||||||
${if langJava then "--with-ecj-jar=${javaEcj.crossDrv}" else ""}
|
optional langJava "--with-ecj-jar=${javaEcj.crossDrv}" ++
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr.crossDrv}" else ""}
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr.crossDrv}" ++
|
||||||
--with-gmp=${gmp.crossDrv}
|
[
|
||||||
--with-mpfr=${mpfr.crossDrv}
|
"--with-gmp=${gmp.crossDrv}"
|
||||||
--with-mpc=${libmpc.crossDrv}
|
"--with-mpfr=${mpfr.crossDrv}"
|
||||||
--disable-libstdcxx-pch
|
"--with-mpc=${libmpc.crossDrv}"
|
||||||
--without-included-gettext
|
"--disable-libstdcxx-pch"
|
||||||
--with-system-zlib
|
"--without-included-gettext"
|
||||||
--enable-languages=${
|
"--with-system-zlib"
|
||||||
concatStrings (intersperse ","
|
"--enable-languages=${
|
||||||
( optional langC "c"
|
concatStrings (intersperse ","
|
||||||
++ optional langCC "c++"
|
( optional langC "c"
|
||||||
++ optional langFortran "fortran"
|
++ optional langCC "c++"
|
||||||
++ optional langJava "java"
|
++ optional langFortran "fortran"
|
||||||
++ optional langAda "ada"
|
++ optional langJava "java"
|
||||||
++ optional langVhdl "vhdl"
|
++ optional langAda "ada"
|
||||||
++ optional langGo "go"
|
++ optional langVhdl "vhdl"
|
||||||
|
++ optional langGo "go"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
}"
|
||||||
}
|
] ++
|
||||||
${if langAda then " --enable-libada" else ""}
|
optional langAda "--enable-libada" ++
|
||||||
${xwithArch}
|
optional (xgccArch != null) "--with-arch=${xgccArch}" ++
|
||||||
${xwithCpu}
|
optional (xgccCpu != null) "--with-cpu=${xgccCpu}" ++
|
||||||
${xwithAbi}
|
optional (xgccAbi != null) "--with-abi=${xgccAbi}" ++
|
||||||
${xwithFpu}
|
optional (xgccFpu != null) "--with-fpu=${xgccFpu}" ++
|
||||||
${xwithFloat}
|
optional (xgccFloat != null) "--with-float=${xgccFloat}"
|
||||||
'';
|
;
|
||||||
buildFlags = "";
|
buildFlags = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -98,108 +98,88 @@ let version = "7-20170409";
|
|||||||
javaAwtGtk = langJava && x11Support;
|
javaAwtGtk = langJava && x11Support;
|
||||||
|
|
||||||
/* Platform flags */
|
/* Platform flags */
|
||||||
platformFlags = let
|
mkPlatformFlags = platform: let
|
||||||
gccArch = stdenv.platform.gcc.arch or null;
|
gccArch = platform.gcc.arch or null;
|
||||||
gccCpu = stdenv.platform.gcc.cpu or null;
|
gccCpu = platform.gcc.cpu or null;
|
||||||
gccAbi = stdenv.platform.gcc.abi or null;
|
gccAbi = platform.gcc.abi or null;
|
||||||
gccFpu = stdenv.platform.gcc.fpu or null;
|
gccFpu = platform.gcc.fpu or null;
|
||||||
gccFloat = stdenv.platform.gcc.float or null;
|
gccFloat = platform.gcc.float or null;
|
||||||
gccMode = stdenv.platform.gcc.mode or null;
|
gccMode = platform.gcc.mode or null;
|
||||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else "";
|
in
|
||||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else "";
|
optional (gccArch != null) "--with-arch=${gccArch}" ++
|
||||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else "";
|
optional (gccCpu != null) "--with-cpu=${gccCpu}" ++
|
||||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else "";
|
optional (gccAbi != null) "--with-abi=${gccAbi}" ++
|
||||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else "";
|
optional (gccFpu != null) "--with-fpu=${gccFpu}" ++
|
||||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else "";
|
optional (gccFloat != null) "--with-float=${gccFloat}" ++
|
||||||
in
|
optional (gccMode != null) "--with-mode=${gccMode}";
|
||||||
withArch +
|
|
||||||
withCpu +
|
|
||||||
withAbi +
|
|
||||||
withFpu +
|
|
||||||
withFloat +
|
|
||||||
withMode;
|
|
||||||
|
|
||||||
/* Cross-gcc settings */
|
/* Cross-gcc settings (build == host != target) */
|
||||||
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
|
||||||
crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem";
|
crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem";
|
||||||
crossConfigureFlags = let
|
crossConfigureFlags =
|
||||||
gccArch = targetPlatform.gcc.arch or null;
|
mkPlatformFlags targetPlatform ++
|
||||||
gccCpu = targetPlatform.gcc.cpu or null;
|
|
||||||
gccAbi = targetPlatform.gcc.abi or null;
|
# Ensure that -print-prog-name is able to find the correct programs.
|
||||||
gccFpu = targetPlatform.gcc.fpu or null;
|
[ "--with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as"
|
||||||
gccFloat = targetPlatform.gcc.float or null;
|
"--with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" ] ++
|
||||||
gccMode = targetPlatform.gcc.mode or null;
|
(if crossMingw && crossStageStatic then [
|
||||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else "";
|
"--with-headers=${libcCross}/include"
|
||||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else "";
|
"--with-gcc"
|
||||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else "";
|
"--with-gnu-as"
|
||||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else "";
|
"--with-gnu-ld"
|
||||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else "";
|
"--with-gnu-ld"
|
||||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else "";
|
"--disable-shared"
|
||||||
in
|
"--disable-nls"
|
||||||
withArch +
|
"--disable-debug"
|
||||||
withCpu +
|
"--enable-sjlj-exceptions"
|
||||||
withAbi +
|
"--enable-threads=win32"
|
||||||
withFpu +
|
"--disable-win32-registry"
|
||||||
withFloat +
|
] else if crossStageStatic then [
|
||||||
withMode +
|
"--disable-libssp"
|
||||||
# Ensure that -print-prog-name is able to find the correct programs.
|
"--disable-nls"
|
||||||
" --with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" +
|
"--without-headers"
|
||||||
" --with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" +
|
"--disable-threads"
|
||||||
(if crossMingw && crossStageStatic then
|
"--disable-libgomp"
|
||||||
" --with-headers=${libcCross}/include" +
|
"--disable-libquadmath"
|
||||||
" --with-gcc" +
|
"--disable-shared"
|
||||||
" --with-gnu-as" +
|
"--disable-libatomic" # libatomic requires libc
|
||||||
" --with-gnu-ld" +
|
"--disable-decimal-float" # libdecnumber requires libc
|
||||||
" --with-gnu-ld" +
|
] else [
|
||||||
" --disable-shared" +
|
(if crossDarwin then "--with-sysroot=${getLib libcCross}/share/sysroot"
|
||||||
" --disable-nls" +
|
else "--with-headers=${getDev libcCross}/include")
|
||||||
" --disable-debug" +
|
"--enable-__cxa_atexit"
|
||||||
" --enable-sjlj-exceptions" +
|
"--enable-long-long"
|
||||||
" --enable-threads=win32" +
|
] ++
|
||||||
" --disable-win32-registry"
|
(if crossMingw then [
|
||||||
else if crossStageStatic then
|
"--enable-threads=win32"
|
||||||
" --disable-libssp --disable-nls" +
|
"--enable-sjlj-exceptions"
|
||||||
" --without-headers" +
|
"--enable-hash-synchronization"
|
||||||
" --disable-threads " +
|
"--disable-libssp"
|
||||||
" --disable-libgomp " +
|
"--disable-nls"
|
||||||
" --disable-libquadmath" +
|
"--with-dwarf2"
|
||||||
" --disable-shared" +
|
# I think noone uses shared gcc libs in mingw, so we better do the same.
|
||||||
" --disable-libatomic " + # libatomic requires libc
|
# In any case, mingw32 g++ linking is broken by default with shared libs,
|
||||||
" --disable-decimal-float" # libdecnumber requires libc
|
# unless adding "-lsupc++" to any linking command. I don't know why.
|
||||||
else
|
"--disable-shared"
|
||||||
(if crossDarwin then " --with-sysroot=${getLib libcCross}/share/sysroot"
|
# To keep ABI compatibility with upstream mingw-w64
|
||||||
else " --with-headers=${getDev libcCross}/include") +
|
"--enable-fully-dynamic-string"
|
||||||
# Ensure that -print-prog-name is able to find the correct programs.
|
] else
|
||||||
" --enable-__cxa_atexit" +
|
optionals (targetPlatform.libc == "uclibc") [
|
||||||
" --enable-long-long" +
|
# libsanitizer requires netrom/netrom.h which is not
|
||||||
(if crossMingw then
|
# available in uclibc.
|
||||||
" --enable-threads=win32" +
|
"--disable-libsanitizer"
|
||||||
" --enable-sjlj-exceptions" +
|
# In uclibc cases, libgomp needs an additional '-ldl'
|
||||||
" --enable-hash-synchronization" +
|
# and as I don't know how to pass it, I disable libgomp.
|
||||||
" --disable-libssp" +
|
"--disable-libgomp"
|
||||||
" --disable-nls" +
|
] ++ [
|
||||||
" --with-dwarf2" +
|
"--enable-threads=posix"
|
||||||
# I think noone uses shared gcc libs in mingw, so we better do the same.
|
"--enable-nls"
|
||||||
# In any case, mingw32 g++ linking is broken by default with shared libs,
|
"--disable-decimal-float" # No final libdecnumber (it may work only in 386)
|
||||||
# unless adding "-lsupc++" to any linking command. I don't know why.
|
]));
|
||||||
" --disable-shared" +
|
|
||||||
# To keep ABI compatibility with upstream mingw-w64
|
|
||||||
" --enable-fully-dynamic-string"
|
|
||||||
else (if targetPlatform.libc == "uclibc" then
|
|
||||||
# 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" else "") +
|
|
||||||
" --enable-threads=posix" +
|
|
||||||
" --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;
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
@ -322,62 +302,87 @@ stdenv.mkDerivation ({
|
|||||||
then []
|
then []
|
||||||
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
|
||||||
|
|
||||||
configureFlags = "
|
configureFlags =
|
||||||
${if hostPlatform.isSunOS then
|
# Basic dependencies
|
||||||
" --enable-long-long --enable-libssp --enable-threads=posix --disable-nls --enable-__cxa_atexit " +
|
[
|
||||||
# On Illumos/Solaris GNU as is preferred
|
"--with-gmp-include=${gmp.dev}/include"
|
||||||
" --with-gnu-as --without-gnu-ld "
|
"--with-gmp-lib=${gmp.out}/lib"
|
||||||
else ""}
|
"--with-mpfr-include=${mpfr.dev}/include"
|
||||||
--enable-lto
|
"--with-mpfr-lib=${mpfr.out}/lib"
|
||||||
${if enableMultilib then "--enable-multilib --disable-libquadmath" else "--disable-multilib"}
|
"--with-mpc=${libmpc}"
|
||||||
${if enableShared then "" else "--disable-shared"}
|
] ++
|
||||||
${if enablePlugin then "--enable-plugin" else "--disable-plugin"}
|
optional (libelf != null) "--with-libelf=${libelf}" ++
|
||||||
${optionalString (isl != null) "--with-isl=${isl}"}
|
|
||||||
${if langJava then
|
# Basic configuration
|
||||||
"--with-ecj-jar=${javaEcj} " +
|
[
|
||||||
|
"--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 langAda "ada"
|
||||||
|
++ optional langVhdl "vhdl"
|
||||||
|
++ optional langGo "go"
|
||||||
|
++ optional langObjC "objc"
|
||||||
|
++ optional langObjCpp "obj-c++"
|
||||||
|
++ optionals crossDarwin [ "objc" "obj-c++" ]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}"
|
||||||
|
] ++
|
||||||
|
|
||||||
|
(if enableMultilib
|
||||||
|
then ["--enable-multilib" "--disable-libquadmath"]
|
||||||
|
else ["--disable-multilib"]) ++
|
||||||
|
optional (!enableShared) "--disable-shared" ++
|
||||||
|
(if enablePlugin
|
||||||
|
then ["--enable-plugin"]
|
||||||
|
else ["--disable-plugin"]) ++
|
||||||
|
|
||||||
|
# Optional features
|
||||||
|
optional (isl != null) "--with-isl=${isl}" ++
|
||||||
|
|
||||||
|
# Java options
|
||||||
|
optionals langJava [
|
||||||
|
"--with-ecj-jar=${javaEcj}"
|
||||||
|
|
||||||
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See
|
||||||
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>.
|
||||||
"--enable-java-home --with-java-home=\${prefix}/lib/jvm/jre "
|
"--enable-java-home"
|
||||||
else ""}
|
"--with-java-home=\${prefix}/lib/jvm/jre"
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
] ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr}" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
--with-gmp-include=${gmp.dev}/include
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}" ++
|
||||||
--with-gmp-lib=${gmp.out}/lib
|
|
||||||
--with-mpfr-include=${mpfr.dev}/include
|
# Ada
|
||||||
--with-mpfr-lib=${mpfr.out}/lib
|
optional langAda "--enable-libada" ++
|
||||||
--with-mpc=${libmpc}
|
|
||||||
${if libelf != null then "--with-libelf=${libelf}" else ""}
|
# Cross-compilation
|
||||||
--disable-libstdcxx-pch
|
optional (targetPlatform == hostPlatform) (
|
||||||
--without-included-gettext
|
let incDir = if hostPlatform.isDarwin
|
||||||
--with-system-zlib
|
then "${darwin.usr-include}"
|
||||||
--enable-static
|
else "${getDev stdenv.cc.libc}/include";
|
||||||
--enable-languages=${
|
in "--with-native-system-header-dir=${incDir}"
|
||||||
concatStrings (intersperse ","
|
) ++
|
||||||
( optional langC "c"
|
|
||||||
++ optional langCC "c++"
|
optional (targetPlatform == hostPlatform) (mkPlatformFlags stdenv.platform) ++
|
||||||
++ optional langFortran "fortran"
|
optional (targetPlatform != hostPlatform) crossConfigureFlags ++
|
||||||
++ optional langJava "java"
|
optional (!bootstrap) "--disable-bootstrap" ++
|
||||||
++ optional langAda "ada"
|
|
||||||
++ optional langVhdl "vhdl"
|
# Platform-specific flags
|
||||||
++ optional langGo "go"
|
optional (targetPlatform == hostPlatform && targetPlatform.isi686) "--with-arch=i686" ++
|
||||||
++ optional langObjC "objc"
|
optionals hostPlatform.isSunOS [
|
||||||
++ optional langObjCpp "obj-c++"
|
"--enable-long-long" "--enable-libssp" "--enable-threads=posix" "--disable-nls" "--enable-__cxa_atexit"
|
||||||
++ optionals crossDarwin [ "objc" "obj-c++" ]
|
# On Illumos/Solaris GNU as is preferred
|
||||||
)
|
"--with-gnu-as" "--without-gnu-ld"
|
||||||
)
|
]
|
||||||
}
|
;
|
||||||
${if targetPlatform == hostPlatform
|
|
||||||
then if hostPlatform.isDarwin
|
|
||||||
then " --with-native-system-header-dir=${darwin.usr-include}"
|
|
||||||
else " --with-native-system-header-dir=${getDev stdenv.cc.libc}/include"
|
|
||||||
else ""}
|
|
||||||
${if langAda then " --enable-libada" else ""}
|
|
||||||
${if targetPlatform == hostPlatform && targetPlatform.isi686 then "--with-arch=i686" else ""}
|
|
||||||
${if targetPlatform != hostPlatform then crossConfigureFlags else ""}
|
|
||||||
${if !bootstrap then "--disable-bootstrap" else ""}
|
|
||||||
${if targetPlatform == hostPlatform then platformFlags else ""}
|
|
||||||
";
|
|
||||||
|
|
||||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||||
|
|
||||||
@ -390,17 +395,13 @@ stdenv.mkDerivation ({
|
|||||||
then "install-strip"
|
then "install-strip"
|
||||||
else "install";
|
else "install";
|
||||||
|
|
||||||
|
/* For cross-built gcc (build != host == target) */
|
||||||
crossAttrs = let
|
crossAttrs = let
|
||||||
xgccArch = targetPlatform.gcc.arch or null;
|
xgccArch = targetPlatform.gcc.arch or null;
|
||||||
xgccCpu = targetPlatform.gcc.cpu or null;
|
xgccCpu = targetPlatform.gcc.cpu or null;
|
||||||
xgccAbi = targetPlatform.gcc.abi or null;
|
xgccAbi = targetPlatform.gcc.abi or null;
|
||||||
xgccFpu = targetPlatform.gcc.fpu or null;
|
xgccFpu = targetPlatform.gcc.fpu or null;
|
||||||
xgccFloat = targetPlatform.gcc.float or null;
|
xgccFloat = targetPlatform.gcc.float or null;
|
||||||
xwithArch = if xgccArch != null then " --with-arch=${xgccArch}" else "";
|
|
||||||
xwithCpu = if xgccCpu != null then " --with-cpu=${xgccCpu}" else "";
|
|
||||||
xwithAbi = if xgccAbi != null then " --with-abi=${xgccAbi}" else "";
|
|
||||||
xwithFpu = if xgccFpu != null then " --with-fpu=${xgccFpu}" else "";
|
|
||||||
xwithFloat = if xgccFloat != null then " --with-float=${xgccFloat}" else "";
|
|
||||||
in {
|
in {
|
||||||
AR = "${targetPlatform.config}-ar";
|
AR = "${targetPlatform.config}-ar";
|
||||||
LD = "${targetPlatform.config}-ld";
|
LD = "${targetPlatform.config}-ld";
|
||||||
@ -414,37 +415,39 @@ stdenv.mkDerivation ({
|
|||||||
# If we are making a cross compiler, cross != null
|
# If we are making a cross compiler, cross != null
|
||||||
NIX_CC_CROSS = optionalString (targetPlatform == hostPlatform) builtins.toString stdenv.cc;
|
NIX_CC_CROSS = optionalString (targetPlatform == hostPlatform) builtins.toString stdenv.cc;
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
configureFlags = ''
|
configureFlags =
|
||||||
${if enableMultilib then "" else "--disable-multilib"}
|
optional (!enableMultilib) "--disable-multilib" ++
|
||||||
${if enableShared then "" else "--disable-shared"}
|
optional (!enableShared) "--disable-shared" ++
|
||||||
${if langJava then "--with-ecj-jar=${javaEcj.crossDrv}" else ""}
|
optional langJava "--with-ecj-jar=${javaEcj.crossDrv}" ++
|
||||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""}
|
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr.crossDrv}" else ""}
|
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr.crossDrv}" ++
|
||||||
--with-gmp=${gmp.crossDrv}
|
[
|
||||||
--with-mpfr=${mpfr.crossDrv}
|
"--with-gmp=${gmp.crossDrv}"
|
||||||
--with-mpc=${libmpc.crossDrv}
|
"--with-mpfr=${mpfr.crossDrv}"
|
||||||
--disable-libstdcxx-pch
|
"--with-mpc=${libmpc.crossDrv}"
|
||||||
--without-included-gettext
|
"--disable-libstdcxx-pch"
|
||||||
--with-system-zlib
|
"--without-included-gettext"
|
||||||
--enable-languages=${
|
"--with-system-zlib"
|
||||||
concatStrings (intersperse ","
|
"--enable-languages=${
|
||||||
( optional langC "c"
|
concatStrings (intersperse ","
|
||||||
++ optional langCC "c++"
|
( optional langC "c"
|
||||||
++ optional langFortran "fortran"
|
++ optional langCC "c++"
|
||||||
++ optional langJava "java"
|
++ optional langFortran "fortran"
|
||||||
++ optional langAda "ada"
|
++ optional langJava "java"
|
||||||
++ optional langVhdl "vhdl"
|
++ optional langAda "ada"
|
||||||
++ optional langGo "go"
|
++ optional langVhdl "vhdl"
|
||||||
|
++ optional langGo "go"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
}"
|
||||||
}
|
] ++
|
||||||
${if langAda then " --enable-libada" else ""}
|
optional langAda "--enable-libada" ++
|
||||||
${xwithArch}
|
optional (xgccArch != null) "--with-arch=${xgccArch}" ++
|
||||||
${xwithCpu}
|
optional (xgccCpu != null) "--with-cpu=${xgccCpu}" ++
|
||||||
${xwithAbi}
|
optional (xgccAbi != null) "--with-abi=${xgccAbi}" ++
|
||||||
${xwithFpu}
|
optional (xgccFpu != null) "--with-fpu=${xgccFpu}" ++
|
||||||
${xwithFloat}
|
optional (xgccFloat != null) "--with-float=${xgccFloat}"
|
||||||
'';
|
;
|
||||||
buildFlags = "";
|
buildFlags = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user