Merge sublime4: 4189 -> 4192; sublime4-dev: 4188 -> 4191 (#378651)
[NixPkgs.git] / pkgs / development / compilers / llvm / multi.nix
blob448ee461ad699a05bfd3c93a9908a063ce05b64e
2   runCommand,
3   clang,
4   gcc64,
5   gcc32,
6   glibc_multi,
7 }:
9 let
10   combine =
11     basegcc:
12     runCommand "combine-gcc-libc" { } ''
13       mkdir -p $out
14       cp -r ${basegcc.cc}/lib $out/lib
16       chmod u+rw -R $out/lib
17       cp -r ${basegcc.libc}/lib/* $(ls -d $out/lib/gcc/*/*)
18     '';
19   gcc_multi_sysroot =
20     runCommand "gcc-multi-sysroot"
21       {
22         passthru = {
23           inherit (gcc64) version;
24           lib = gcc_multi_sysroot;
25         };
26       }
27       ''
28         mkdir -p $out/lib{,64}/gcc
30         ln -s ${combine gcc64}/lib/gcc/* $out/lib64/gcc/
31         ln -s ${combine gcc32}/lib/gcc/* $out/lib/gcc/
32         # XXX: This shouldn't be needed, clang just doesn't look for "i686-unknown"
33         ln -s $out/lib/gcc/i686-unknown-linux-gnu $out/lib/gcc/i686-pc-linux-gnu
36         # includes
37         mkdir -p $out/include
38         ln -s ${glibc_multi.dev}/include/* $out/include
39         ln -s ${gcc64.cc}/include/c++ $out/include/c++
41         # dynamic linkers
42         mkdir -p $out/lib/32
43         ln -s ${glibc_multi.out}/lib/ld-linux* $out/lib
44         ln -s ${glibc_multi.out}/lib/32/ld-linux* $out/lib/32/
45       '';
47   clangMulti = clang.override {
48     # Only used for providing expected structure re:dynamic linkers, AFAIK Most
49     # of the magic is done by setting the --gcc-toolchain option via
50     # `gccForLibs`.
51     libc = gcc_multi_sysroot;
53     bintools = clang.bintools.override {
54       libc = gcc_multi_sysroot;
55     };
57     gccForLibs = gcc_multi_sysroot // {
58       inherit (glibc_multi) libgcc;
59       langCC =
60         assert
61           (gcc64.cc.langCC != gcc32.cc.langCC)
62           -> throw "(gcc64.cc.langCC=${gcc64.cc.langCC}) != (gcc32.cc.langCC=${gcc32.cc.langCC})";
63         gcc64.cc.langCC;
64     };
65   };
68 clangMulti