Merge pull request #119126 from fabaff/pycomfoconnect
[NixPkgs.git] / pkgs / development / compilers / llvm / multi.nix
blob60db622a73ab5f55b173d24ae6fcf866ca9092ce
1 { runCommand,
2 clang,
3 gcc64,
4 gcc32,
5 glibc_multi
6 }:
8 let
9   combine = basegcc: runCommand "combine-gcc-libc" {} ''
10     mkdir -p $out
11     cp -r ${basegcc.cc}/lib $out/lib
13     chmod u+rw -R $out/lib
14     cp -r ${basegcc.libc}/lib/* $(ls -d $out/lib/gcc/*/*)
15   '';
16   gcc_multi_sysroot = runCommand "gcc-multi-sysroot" {
17     passthru = {
18       inherit (gcc64) version;
19       lib = gcc_multi_sysroot;
20     };
21   } ''
22     mkdir -p $out/lib/gcc
24     ln -s ${combine gcc64}/lib/gcc/* $out/lib/gcc/
25     ln -s ${combine gcc32}/lib/gcc/* $out/lib/gcc/
26     # XXX: This shouldn't be needed, clang just doesn't look for "i686-unknown"
27     ln -s $out/lib/gcc/i686-unknown-linux-gnu $out/lib/gcc/i686-pc-linux-gnu
30     # includes
31     ln -s ${glibc_multi.dev}/include $out/
33     # dynamic linkers
34     mkdir -p $out/lib/32
35     ln -s ${glibc_multi.out}/lib/ld-linux* $out/lib
36     ln -s ${glibc_multi.out}/lib/32/ld-linux* $out/lib/32/
37   '';
39   clangMulti = clang.override {
40     # Only used for providing expected structure re:dynamic linkers, AFAIK Most
41     # of the magic is done by setting the --gcc-toolchain option via
42     # `gccForLibs`.
43     libc = gcc_multi_sysroot;
45     bintools = clang.bintools.override {
46       libc = gcc_multi_sysroot;
47     };
49     gccForLibs = gcc_multi_sysroot;
50   };
52 in clangMulti