mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-01 15:11:25 +00:00
111 lines
3.5 KiB
Nix
111 lines
3.5 KiB
Nix
|
/* This file contains various functions that take a stdenv and return
|
||
|
a new stdenv with different behaviour, e.g. using a different C
|
||
|
compiler. */
|
||
|
|
||
|
{dietlibc, fetchurl, runCommand}:
|
||
|
|
||
|
|
||
|
rec {
|
||
|
|
||
|
|
||
|
# Override the compiler in stdenv for specific packages.
|
||
|
overrideGCC = stdenv: gcc: stdenv //
|
||
|
{ mkDerivation = args: stdenv.mkDerivation (args // { NIX_GCC = gcc; });
|
||
|
};
|
||
|
|
||
|
|
||
|
# Add some arbitrary packages to buildInputs for specific packages.
|
||
|
# Used to override packages in stenv like Make. Should not be used
|
||
|
# for other dependencies.
|
||
|
overrideInStdenv = stdenv: pkgs: stdenv //
|
||
|
{ mkDerivation = args: stdenv.mkDerivation (args //
|
||
|
{ buildInputs = (if args ? buildInputs then args.buildInputs else []) ++ pkgs; }
|
||
|
);
|
||
|
};
|
||
|
|
||
|
|
||
|
# Override the setup script of stdenv. Useful for testing new
|
||
|
# versions of the setup script without causing a rebuild of
|
||
|
# everything.
|
||
|
#
|
||
|
# Example:
|
||
|
# randomPkg = import ../bla { ...
|
||
|
# stdenv = overrideSetup stdenv ../stdenv/generic/setup-latest.sh;
|
||
|
# };
|
||
|
overrideSetup = stdenv: setup: stdenv.regenerate setup;
|
||
|
|
||
|
|
||
|
# Return a modified stdenv that uses dietlibc to create small
|
||
|
# statically linked binaries.
|
||
|
useDietLibC = stdenv: stdenv //
|
||
|
{ mkDerivation = args: stdenv.mkDerivation (args // {
|
||
|
NIX_CFLAGS_LINK = "-static";
|
||
|
|
||
|
# libcompat.a contains some commonly used functions.
|
||
|
NIX_LDFLAGS = "-lcompat";
|
||
|
|
||
|
# These are added *after* the command-line flags, so we'll
|
||
|
# always optimise for size.
|
||
|
NIX_CFLAGS_COMPILE =
|
||
|
(if args ? NIX_CFLAGS_COMPILE then args.NIX_CFLAGS_COMPILE else "")
|
||
|
+ " -Os -s -D_BSD_SOURCE=1";
|
||
|
|
||
|
configureFlags =
|
||
|
(if args ? configureFlags then args.configureFlags else "")
|
||
|
+ " --disable-shared"; # brrr...
|
||
|
|
||
|
NIX_GCC = import ../build-support/gcc-wrapper {
|
||
|
inherit stdenv;
|
||
|
libc = dietlibc;
|
||
|
inherit (stdenv.gcc) gcc binutils name nativeTools nativePrefix;
|
||
|
nativeLibc = false;
|
||
|
};
|
||
|
});
|
||
|
isDietLibC = true;
|
||
|
} // {inherit fetchurl;};
|
||
|
|
||
|
|
||
|
# Return a modified stdenv that uses klibc to create small
|
||
|
# statically linked binaries.
|
||
|
useKlibc = stdenv: klibc: stdenv //
|
||
|
{ mkDerivation = args: stdenv.mkDerivation (args // {
|
||
|
NIX_CFLAGS_LINK = "-static";
|
||
|
|
||
|
# These are added *after* the command-line flags, so we'll
|
||
|
# always optimise for size.
|
||
|
NIX_CFLAGS_COMPILE =
|
||
|
(if args ? NIX_CFLAGS_COMPILE then args.NIX_CFLAGS_COMPILE else "")
|
||
|
+ " -Os -s";
|
||
|
|
||
|
configureFlags =
|
||
|
(if args ? configureFlags then args.configureFlags else "")
|
||
|
+ " --disable-shared"; # brrr...
|
||
|
|
||
|
NIX_GCC = runCommand "klibc-wrapper" {} ''
|
||
|
ensureDir $out/bin
|
||
|
ln -s ${klibc}/bin/klcc $out/bin/gcc
|
||
|
ln -s ${klibc}/bin/klcc $out/bin/cc
|
||
|
ensureDir $out/nix-support
|
||
|
echo 'PATH=$PATH:${stdenv.gcc.binutils}/bin' > $out/nix-support/setup-hook
|
||
|
'';
|
||
|
});
|
||
|
isKlibc = true;
|
||
|
isStatic = true;
|
||
|
} // {inherit fetchurl;};
|
||
|
|
||
|
|
||
|
# Return a modified stdenv that tries to build statically linked
|
||
|
# binaries.
|
||
|
makeStaticBinaries = stdenv: stdenv //
|
||
|
{ mkDerivation = args: stdenv.mkDerivation (args // {
|
||
|
NIX_CFLAGS_LINK = "-static";
|
||
|
|
||
|
configureFlags =
|
||
|
(if args ? configureFlags then args.configureFlags else "")
|
||
|
+ " --disable-shared"; # brrr...
|
||
|
});
|
||
|
isStatic = true;
|
||
|
} // {inherit fetchurl;};
|
||
|
|
||
|
|
||
|
}
|