cc-wrapper: Add support for no libc whatsoever

This commit is contained in:
John Ericson 2017-05-22 20:59:39 -04:00 committed by John Ericson
parent d70e7263f4
commit 04a3cad968

View File

@ -5,7 +5,7 @@
# script that sets up the right environment variables so that the
# compiler and the linker just "work".
{ name ? "", stdenv, nativeTools, nativeLibc, nativePrefix ? ""
{ name ? "", stdenv, nativeTools, noLibc ? false, nativeLibc, nativePrefix ? ""
, cc ? null, libc ? null, binutils ? null, coreutils ? null, shell ? stdenv.shell
, zlib ? null, extraPackages ? [], extraBuildCommands ? ""
, dyld ? null # TODO: should this be a setup-hook on dyld?
@ -18,7 +18,8 @@ with stdenv.lib;
assert nativeTools -> nativePrefix != "";
assert !nativeTools ->
cc != null && binutils != null && coreutils != null && gnugrep != null;
assert !nativeLibc -> libc != null;
assert !(nativeLibc && noLibc);
assert (noLibc || nativeLibc) == (libc == null);
# For ghdl (the vhdl language provider to gcc) we need zlib in the wrapper.
assert cc.langVhdl or false -> zlib != null;
@ -34,9 +35,9 @@ let
ccVersion = (builtins.parseDrvName cc.name).version;
ccName = (builtins.parseDrvName cc.name).name;
libc_bin = if nativeLibc then null else getBin libc;
libc_dev = if nativeLibc then null else getDev libc;
libc_lib = if nativeLibc then null else getLib libc;
libc_bin = if libc == null then null else getBin libc;
libc_dev = if libc == null then null else getDev libc;
libc_lib = if libc == null then null else getLib libc;
cc_solib = getLib cc;
binutils_bin = if nativeTools then "" else getBin binutils;
# The wrapper scripts use 'cat' and 'grep', so we may need coreutils.
@ -86,7 +87,7 @@ stdenv.mkDerivation {
}
''
+ optionalString (!nativeLibc) (if (!targetPlatform.isDarwin) then ''
+ optionalString (libc != null) (if (!targetPlatform.isDarwin) then ''
dynamicLinker="${libc_lib}/lib/$dynamicLinker"
echo $dynamicLinker > $out/nix-support/dynamic-linker
@ -104,7 +105,7 @@ stdenv.mkDerivation {
echo "export LD_DYLD_PATH=\"$dynamicLinker\"" >> $out/nix-support/setup-hook
'')
+ optionalString (!nativeLibc) ''
+ optionalString (libc != null) ''
# The "-B${libc_lib}/lib/" flag is a quick hack to force gcc to link
# against the crt1.o from our own glibc, rather than the one in
# /usr/lib. (This is only an issue when using an `impure'
@ -169,7 +170,7 @@ stdenv.mkDerivation {
# Propagate the wrapped cc so that if you install the wrapper,
# you get tools like gcov, the manpages, etc. as well (including
# for binutils and Glibc).
echo ${cc} ${cc.man or ""} ${binutils_bin} ${libc_bin} > $out/nix-support/propagated-user-env-packages
echo ${cc} ${cc.man or ""} ${binutils_bin} ${if libc == null then "" else libc_bin} > $out/nix-support/propagated-user-env-packages
echo ${toString extraPackages} > $out/nix-support/propagated-native-build-inputs
''