urbit/nix/nixcrpkgs/top.nix

73 lines
2.6 KiB
Nix
Raw Normal View History

{ osx_sdk, nixpkgs }:
rec {
inherit nixpkgs;
# Some native build tools.
native = import ./native { inherit nixpkgs; };
# Cross-compiling environments for each target system.
crossenvs = {
i686-w64-mingw32 = import ./mingw-w64 { inherit native; arch = "i686"; };
x86_64-w64-mingw32 = import ./mingw-w64 { inherit native; arch = "x86_64"; };
i686-linux-musl = import ./linux { inherit native; arch = "i686"; };
x86_64-linux-musl = import ./linux { inherit native; arch = "x86_64"; };
armv6-linux-musl = import ./linux {
inherit native;
arch = "armv6";
gcc_options = "--with-fpu=vfp --with-float=hard ";
};
macos = import ./macos { inherit osx_sdk native; };
};
pkgFun = crossenv: import ./pkgs.nix { inherit crossenv; } // crossenv;
# Sets of packages for each target system.
i686-w64-mingw32 = pkgFun crossenvs.i686-w64-mingw32;
x86_64-w64-mingw32 = pkgFun crossenvs.x86_64-w64-mingw32;
i686-linux-musl = pkgFun crossenvs.i686-linux-musl;
x86_64-linux-musl = pkgFun crossenvs.x86_64-linux-musl;
armv6-linux-musl = pkgFun crossenvs.armv6-linux-musl;
macos = pkgFun crossenvs.macos;
# omni is convenient name for packages that are used for cross-compiling but
# are actually the same on all platforms. You can just refer to it by
# 'omni.package_name' instead of 'some_platform.package_name'.
omni = pkgFun { inherit native nixpkgs; };
# Handy aliases.
win32 = i686-w64-mingw32;
win64 = x86_64-w64-mingw32;
linux32 = i686-linux-musl;
linux-x86 = i686-linux-musl;
linux-i686 = i686-linux-musl;
linux64 = x86_64-linux-musl;
linux-x86_64 = x86_64-linux-musl;
linux-rpi = armv6-linux-musl;
rpi = armv6-linux-musl;
mac = macos;
# filter is a function that can be applied to a local directory to filter out
# files that are likely to change frequently without affecting the build,
# causing unneeded rebuilds.
filter_func = name: type: let bn = baseNameOf (toString name); in !(
(type == "directory" && bn == ".git") ||
(type == "symlink" && nixpkgs.lib.hasPrefix "result" bn) ||
(type == "directory" && bn == "nix") ||
(type == "directory" && bn == "build") ||
nixpkgs.lib.hasSuffix ".nix" bn ||
nixpkgs.lib.hasSuffix "~" bn
);
filter = builtins.filterSource filter_func;
# bundle is a function that takes a set of derivations and makes a
# derivation for a bundle that has symbolic links in it to each of
# the input derivations.
bundle = drvs: native.make_derivation rec {
name = "bundle";
builder = ./bundle_builder.sh;
names = builtins.attrNames drvs;
dirs = builtins.attrValues drvs;
};
}