nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{ runCommand, toolchainName, fetchurl, stdenv
2, buildPackages, lib, writeText }:
3
4let
5
6 inherit (lib) getBin optionalString;
7 inherit (lib.generators) toPlist;
8
9 ToolchainInfo = {
10 Identifier = toolchainName;
11 };
12
13 # We could pull this out of developer_cmds but it adds an annoying
14 # loop if we want to bootstrap and this is just a tiny script so I'm
15 # not going to bother.
16 mkdep-darwin-src = fetchurl {
17 url = "https://opensource.apple.com/source/developer_cmds/developer_cmds-63/mkdep/mkdep.sh";
18 sha256 = "0n4wpqfslfjs5zbys5yri8pfi2awyhlmknsf6laa5jzqbzq9x541";
19 executable = true;
20 };
21in
22
23runCommand "Toolchains" {} (''
24 toolchain=$out/XcodeDefault.xctoolchain
25 mkdir -p $toolchain
26
27 install -D ${writeText "ToolchainInfo.plist" (toPlist {} ToolchainInfo)} $toolchain/ToolchainInfo.plist
28
29 ln -s $toolchain $toolchain/usr
30
31 mkdir -p $toolchain/include
32 mkdir -p $toolchain/lib
33 mkdir -p $toolchain/libexec
34 mkdir -p $toolchain/share
35 mkdir -p $toolchain/bin
36
37 for bin in ${getBin stdenv.cc}/bin/*; do
38 ln -s $bin $toolchain/bin
39 done
40
41 for bin in ${getBin stdenv.cc.bintools.bintools}/bin/*; do
42 if ! [ -e "$toolchain/bin/$(basename $bin)" ]; then
43 ln -s $bin $toolchain/bin
44 fi
45 done
46
47 ln -s ${buildPackages.bison}/bin/yacc $toolchain/bin/yacc
48 ln -s ${buildPackages.bison}/bin/bison $toolchain/bin/bison
49 ln -s ${buildPackages.flex}/bin/flex $toolchain/bin/flex
50 ln -s ${buildPackages.flex}/bin/flex++ $toolchain/bin/flex++
51 ln -s $toolchain/bin/flex $toolchain/bin/lex
52
53 ln -s ${buildPackages.m4}/bin/m4 $toolchain/bin/m4
54 ln -s $toolchain/bin/m4 $toolchain/bin/gm4
55
56 ln -s ${buildPackages.unifdef}/bin/unifdef $toolchain/bin/unifdef
57 ln -s ${buildPackages.unifdef}/bin/unifdefall $toolchain/bin/unifdefall
58
59 ln -s ${buildPackages.gperf}/bin/gperf $toolchain/bin/gperf
60 ln -s ${buildPackages.indent}/bin/indent $toolchain/bin/indent
61 ln -s ${buildPackages.ctags}/bin/ctags $toolchain/bin/ctags
62'' + optionalString stdenv.isDarwin ''
63 for bin in ${getBin buildPackages.darwin.cctools}/bin/*; do
64 if ! [ -e "$toolchain/bin/$(basename $bin)" ]; then
65 ln -s $bin $toolchain/bin
66 fi
67 done
68
69 ln -s ${buildPackages.darwin.bootstrap_cmds}/bin/mig $toolchain/bin
70 mkdir -p $toolchain/libexec
71 ln -s ${buildPackages.darwin.bootstrap_cmds}/libexec/migcom $toolchain/libexec
72 ln -s ${mkdep-darwin-src} $toolchain/bin/mkdep
73'')