2004-02-19 17:33:10 +01:00
|
|
|
# This file defines the various standard build environments.
|
|
|
|
#
|
|
|
|
# On Linux systems, the standard build environment consists of
|
|
|
|
# Nix-built instances glibc and the `standard' Unix tools, i.e., the
|
|
|
|
# Posix utilities, the GNU C compiler, and so on. On other systems,
|
|
|
|
# we use the native C library.
|
|
|
|
|
2006-08-23 17:58:54 +02:00
|
|
|
|
|
|
|
# stdenvType exists to support multiple kinds of stdenvs on the same
|
|
|
|
# system, e.g., cygwin and mingw builds on i686-cygwin. Most people
|
|
|
|
# can ignore it.
|
|
|
|
|
My first attempt at getting cross compilers in nixpkgs.
My idea is to provide special stdenv expressions that will contain in the path
additional cross compilers. As most expressions for programs accept a stdenv parameter,
we could substitute this parameter with the special stdenv, which will have a
generic builder that attempts the usual "--target=..." and can additionally
have an env variable like "cross" with the target architecture set.
So, finally we could have additional expressions like this:
bashRealArm = makeOverridable (import ../shells/bash) {
inherit fetchurl bison;
stdenv = stdenvCross "armv5tel-unknown-linux-gnueabi";
};
Meanwhile it does not work - I still cannot get the cross-gcc to build.
I think it does not fill the previous expressions with a lot of noise, so I
think it may be a good path to follow.
I only touched some files of the current stdenv: gcc-4.3, kernel headers
2.6.28, glibc 2.9, ...
I tried to use the gcc-cross-wrapper, that may be very outdated. Maybe I will
update it, or update the gcc-wrapper expression to make it fit the cross tools,
but meanwhile I even cannot build gcc, so I have not tested the wrapper.
This new idea on cross compiling is not similar to that of the
nixpkgs/branches/cross-compilation, which mostly added bare new expressions for
anything to be cross compiled, if I understood it correctly.
I cared not to break anything of the usual stdenv in all this work.
svn path=/nixpkgs/branches/stdenv-updates/; revision=18343
2009-11-14 09:11:30 +01:00
|
|
|
{system, stdenvType ? system, allPackages ? import ../.., cross ? null}:
|
2006-08-23 17:58:54 +02:00
|
|
|
|
|
|
|
assert system != "i686-cygwin" -> system == stdenvType;
|
|
|
|
|
2006-02-08 18:37:45 +01:00
|
|
|
|
|
|
|
rec {
|
2004-02-19 17:33:10 +01:00
|
|
|
|
|
|
|
|
|
|
|
# The native (i.e., impure) build environment. This one uses the
|
|
|
|
# tools installed on the system outside of the Nix environment,
|
|
|
|
# i.e., the stuff in /bin, /usr/bin, etc. This environment should
|
|
|
|
# be used with care, since many Nix packages will not build properly
|
|
|
|
# with it (e.g., because they require GNU Make).
|
2009-02-02 16:03:38 +01:00
|
|
|
stdenvNative = (import ./native {
|
|
|
|
inherit system allPackages;
|
|
|
|
}).stdenv;
|
2004-02-19 17:33:10 +01:00
|
|
|
|
2004-11-04 13:19:32 +01:00
|
|
|
stdenvNativePkgs = allPackages {
|
2006-02-08 18:37:45 +01:00
|
|
|
bootStdenv = stdenvNative;
|
* The stdenv setup script now defines a generic builder that allows
builders for typical Autoconf-style to be much shorten, e.g.,
. $stdenv/setup
genericBuild
The generic builder does lots of stuff automatically:
- Unpacks source archives specified by $src or $srcs (it knows about
gzip, bzip2, tar, zip, and unpacked source trees).
- Determines the source tree.
- Applies patches specified by $patches.
- Fixes libtool not to search for libraries in /lib etc.
- Runs `configure'.
- Runs `make'.
- Runs `make install'.
- Strips debug information from static libraries.
- Writes nested log information (in the format accepted by
`log2xml').
There are also lots of hooks and variables to customise the generic
builder. See `stdenv/generic/docs.txt'.
* Adapted the base packages (i.e., the ones used by stdenv) to use the
generic builder.
* We now use `curl' instead of `wget' to download files in `fetchurl'.
* Neither `curl' nor `wget' are part of stdenv. We shouldn't
encourage people to download stuff in builders (impure!).
* Updated some packages.
* `buildinputs' is now `buildInputs' (but the old name also works).
* `findInputs' in the setup script now prevents inputs from being
processed multiple times (which could happen, e.g., if an input was
a propagated input of several other inputs; this caused the size
variables like $PATH to blow up exponentially in the worst case).
* Patched GNU Make to write nested log information in the format
accepted by `log2xml'. Also, prior to writing the build command,
Make now writes a line `building X' to indicate what is being
built. This is unfortunately often obscured by the gigantic tool
invocations in many Makefiles. The actual build commands are marked
`unimportant' so that they don't clutter pages generated by
`log2html'.
svn path=/nixpkgs/trunk/; revision=845
2004-03-19 17:53:04 +01:00
|
|
|
noSysDirs = false;
|
|
|
|
};
|
2004-02-19 17:33:10 +01:00
|
|
|
|
|
|
|
|
|
|
|
# The Nix build environment.
|
2009-02-02 16:03:38 +01:00
|
|
|
stdenvNix = import ./nix {
|
2008-06-18 17:09:13 +02:00
|
|
|
stdenv = stdenvNative;
|
|
|
|
pkgs = stdenvNativePkgs;
|
2009-02-02 16:03:38 +01:00
|
|
|
};
|
2004-03-29 19:23:01 +02:00
|
|
|
|
2004-02-19 17:33:10 +01:00
|
|
|
|
2005-02-21 21:42:07 +01:00
|
|
|
# Linux standard environment.
|
My first attempt at getting cross compilers in nixpkgs.
My idea is to provide special stdenv expressions that will contain in the path
additional cross compilers. As most expressions for programs accept a stdenv parameter,
we could substitute this parameter with the special stdenv, which will have a
generic builder that attempts the usual "--target=..." and can additionally
have an env variable like "cross" with the target architecture set.
So, finally we could have additional expressions like this:
bashRealArm = makeOverridable (import ../shells/bash) {
inherit fetchurl bison;
stdenv = stdenvCross "armv5tel-unknown-linux-gnueabi";
};
Meanwhile it does not work - I still cannot get the cross-gcc to build.
I think it does not fill the previous expressions with a lot of noise, so I
think it may be a good path to follow.
I only touched some files of the current stdenv: gcc-4.3, kernel headers
2.6.28, glibc 2.9, ...
I tried to use the gcc-cross-wrapper, that may be very outdated. Maybe I will
update it, or update the gcc-wrapper expression to make it fit the cross tools,
but meanwhile I even cannot build gcc, so I have not tested the wrapper.
This new idea on cross compiling is not similar to that of the
nixpkgs/branches/cross-compilation, which mostly added bare new expressions for
anything to be cross compiled, if I understood it correctly.
I cared not to break anything of the usual stdenv in all this work.
svn path=/nixpkgs/branches/stdenv-updates/; revision=18343
2009-11-14 09:11:30 +01:00
|
|
|
stdenvLinux = (import ./linux {inherit system allPackages cross;}).stdenvLinux;
|
2004-05-18 12:59:18 +02:00
|
|
|
|
2005-02-21 21:54:34 +01:00
|
|
|
|
2006-08-15 16:46:41 +02:00
|
|
|
# MinGW/MSYS standard environment.
|
2008-06-18 17:09:13 +02:00
|
|
|
stdenvMinGW = import ./mingw {
|
2006-08-15 16:46:41 +02:00
|
|
|
inherit system;
|
|
|
|
};
|
2005-05-10 14:59:28 +02:00
|
|
|
|
2006-08-23 17:58:54 +02:00
|
|
|
|
2006-02-08 18:37:45 +01:00
|
|
|
# Select the appropriate stdenv for the platform `system'.
|
|
|
|
stdenv =
|
2006-10-25 15:27:43 +02:00
|
|
|
if stdenvType == "i686-linux" then stdenvLinux else
|
|
|
|
if stdenvType == "x86_64-linux" then stdenvLinux else
|
2009-11-08 01:32:12 +01:00
|
|
|
if stdenvType == "armv5tel-linux" then stdenvLinux else
|
2009-02-03 10:59:03 +01:00
|
|
|
if stdenvType == "powerpc-linux" then /* stdenvLinux */ stdenvNative else
|
2006-10-25 15:27:43 +02:00
|
|
|
if stdenvType == "i686-mingw" then stdenvMinGW else
|
|
|
|
if stdenvType == "i686-darwin" then stdenvNix else
|
|
|
|
stdenvNative;
|
2004-02-19 17:33:10 +01:00
|
|
|
}
|