{ lib, stdenv, version, buildPackages, targetPackages, texinfo, which, gettext, gnused, patchelf, gmp, mpfr, libmpc, libucontext ? null, libxcrypt ? null, darwin ? null, isl ? null, zlib ? null, gnat-bootstrap ? null, flex ? null, perl ? null, langAda ? false, langGo ? false, langRust ? false, cargo, 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 (with stdenv.targetPlatform; isVc4 || isRedox && flex != null) [ flex ] ++ optionals langAda [ gnat-bootstrap ] ++ optionals langRust [ cargo ] # 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 (isl != null) [ isl ] ++ optionals (zlib != null) [ zlib ] ++ optionals (langGo && stdenv.hostPlatform.isMusl) [ libucontext ] ++ optionals (lib.versionAtLeast version "14" && stdenv.hostPlatform.isDarwin) [ darwin.apple_sdk.frameworks.CoreServices ]; depsTargetTarget = optionals ( !withoutTargetLibc && threadsCross != { } && threadsCross.package != null ) [ threadsCross.package ]; }