/* 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;}; }