mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 08:23:09 +00:00
* More refactoring: move all the stdenv adapter functions (like
useDietlibc) to a separate file. all-packages.nix should really only contain package composition stuff. svn path=/nixpkgs/trunk/; revision=14022
This commit is contained in:
parent
b2ccd56224
commit
0cf9849afd
111
pkgs/stdenv/adapters.nix
Normal file
111
pkgs/stdenv/adapters.nix
Normal file
@ -0,0 +1,111 @@
|
||||
/* 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;};
|
||||
|
||||
|
||||
}
|
@ -106,105 +106,11 @@ let
|
||||
|
||||
inherit lib config getConfig;
|
||||
|
||||
# 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; }
|
||||
);
|
||||
};
|
||||
|
||||
addAttrsToDerivation = extraAttrs: stdenv: stdenv //
|
||||
{ mkDerivation = args: stdenv.mkDerivation (args // extraAttrs); };
|
||||
|
||||
# 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;
|
||||
|
||||
stdenvNew = overrideSetup stdenv ../stdenv/generic/setup-new.sh;
|
||||
|
||||
# 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 (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;};
|
||||
|
||||
# Applying this to an attribute set will cause nix-env to look
|
||||
# inside the set for derivations.
|
||||
recurseIntoAttrs = attrs: attrs // {recurseForDerivations = true;};
|
||||
@ -322,6 +228,10 @@ let
|
||||
else
|
||||
stdenv;
|
||||
|
||||
inherit (import ../stdenv/adapters.nix {inherit (pkgs) dietlibc fetchurl runCommand;})
|
||||
overrideGCC overrideInStdenv overrideSetup
|
||||
useDietLibC useKlibc makeStaticBinaries;
|
||||
|
||||
|
||||
### BUILD SUPPORT
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user