core/pkgs/by-name/gc/gcc/common/dependencies.nix
2024-06-30 09:12:46 +01:00

110 lines
2.4 KiB
Nix

{
lib,
stdenv,
version,
buildPackages,
targetPackages,
texinfo,
which,
gettext,
pkg-config ? null,
gnused,
patchelf,
gmp,
mpfr,
libmpc,
libucontext ? null,
libxcrypt ? null,
cloog ? null,
isl ? null,
zlib ? null,
gnat-bootstrap ? null,
flex ? null,
boehmgc ? null,
zip ? null,
unzip ? null,
gtk2 ? null,
libart_lgpl ? null,
perl ? null,
xlibs ? null,
langJava ? false,
javaAwtGtk ? false,
langAda ? false,
langGo ? false,
withoutTargetLibc ? null,
threadsCross ? null,
}:
let
inherit (lib) optionals;
inherit (stdenv) buildPlatform hostPlatform targetPlatform;
in
{
# same for all gcc's
depsBuildBuild = [ buildPackages.stdenv.cc ];
nativeBuildInputs =
[
texinfo
which
gettext
]
++ optionals (perl != null) [ perl ]
++ optionals javaAwtGtk [ pkg-config ]
++ optionals (with stdenv.targetPlatform; isVc4 || isRedox && flex != null) [ flex ]
++ optionals langAda [ gnat-bootstrap ]
# The builder relies on GNU sed (for instance, Darwin's `sed' fails with
# "-i may not be used with stdin"), and `stdenvNative' doesn't provide it.
++ optionals buildPlatform.isDarwin [ gnused ];
# For building runtime libs
# same for all gcc's
depsBuildTarget =
(
if hostPlatform == buildPlatform then
[
targetPackages.stdenv.cc.bintools # newly-built gcc will be used
]
else
assert targetPlatform == hostPlatform;
[
# build != host == target
stdenv.cc
]
)
++ optionals targetPlatform.isLinux [ patchelf ];
buildInputs =
[
gmp
mpfr
libmpc
]
++ optionals (lib.versionAtLeast version "10") [ libxcrypt ]
++ [
targetPackages.stdenv.cc.bintools # For linking code at run-time
]
++ optionals (lib.versionOlder version "5" && cloog != null) [ cloog ]
++ optionals (isl != null) [ isl ]
++ optionals (zlib != null) [ zlib ]
++ optionals langJava [
boehmgc
zip
unzip
]
++ optionals javaAwtGtk (
[
gtk2
libart_lgpl
]
++ xlibs
)
++ optionals (langGo && stdenv.hostPlatform.isMusl) [ libucontext ];
# threadsCross.package after gcc6 so i assume its okay for 4.8 and 4.9 too
depsTargetTarget = optionals (
!withoutTargetLibc && threadsCross != { } && threadsCross.package != null
) [ threadsCross.package ];
}