summary refs log tree commit diff
path: root/pkgs/development/compilers/llvm
diff options
context:
space:
mode:
authorWill Dietz <w@wdtz.org>2017-11-30 13:10:41 -0600
committerWill Dietz <w@wdtz.org>2017-12-05 07:17:14 -0600
commit9d8f9b2e531bf95a700a949d879927fb6996ffc9 (patch)
tree2496062d7832f418d939b5d1ce151ae3dff0889c /pkgs/development/compilers/llvm
parent115bf9d2cfae7400f4d69dc7fa02216a2c09ca32 (diff)
downloadnixlib-9d8f9b2e531bf95a700a949d879927fb6996ffc9.tar
nixlib-9d8f9b2e531bf95a700a949d879927fb6996ffc9.tar.gz
nixlib-9d8f9b2e531bf95a700a949d879927fb6996ffc9.tar.bz2
nixlib-9d8f9b2e531bf95a700a949d879927fb6996ffc9.tar.lz
nixlib-9d8f9b2e531bf95a700a949d879927fb6996ffc9.tar.xz
nixlib-9d8f9b2e531bf95a700a949d879927fb6996ffc9.tar.zst
nixlib-9d8f9b2e531bf95a700a949d879927fb6996ffc9.zip
Add clang multilib variants (x64_64-only, 64/32bit), basic multilib tests
Diffstat (limited to 'pkgs/development/compilers/llvm')
-rw-r--r--pkgs/development/compilers/llvm/multi.nix44
1 files changed, 44 insertions, 0 deletions
diff --git a/pkgs/development/compilers/llvm/multi.nix b/pkgs/development/compilers/llvm/multi.nix
new file mode 100644
index 000000000000..0fa0eb3404d8
--- /dev/null
+++ b/pkgs/development/compilers/llvm/multi.nix
@@ -0,0 +1,44 @@
+{ runCommand,
+clang,
+gcc64,
+gcc32,
+glibc_multi
+}:
+
+let
+  combine = basegcc: runCommand "combine-gcc-libc" {} ''
+    mkdir -p $out
+    cp -r ${basegcc.cc}/lib $out/lib
+
+    chmod u+rw -R $out/lib
+    cp -r ${basegcc.libc}/lib/* $(ls -d $out/lib/gcc/*/*)
+  '';
+  gcc_multi_sysroot = runCommand "gcc-multi-sysroot" {} ''
+    mkdir -p $out/lib/gcc
+
+    ln -s ${combine gcc64}/lib/gcc/* $out/lib/gcc/
+    ln -s ${combine gcc32}/lib/gcc/* $out/lib/gcc/
+    # XXX: This shouldn't be needed, clang just doesn't look for "i686-unknown"
+    ln -s $out/lib/gcc/i686-unknown-linux-gnu $out/lib/gcc/i686-pc-linux-gnu
+
+
+    # includes
+    ln -s ${glibc_multi.dev}/include $out/
+
+    # dynamic linkers
+    mkdir -p $out/lib/32
+    ln -s ${glibc_multi.out}/lib/ld-linux* $out/lib
+    ln -s ${glibc_multi.out}/lib/32/ld-linux* $out/lib/32/
+  '';
+
+  clangMulti = clang.override {
+    # Only used for providing expected structure re:dynamic linkers, AFAIK
+    # Most of the magic is done by setting the --gcc-toolchain option below
+    libc = gcc_multi_sysroot;
+
+    extraBuildCommands = ''
+      sed -e '$a --gcc-toolchain=${gcc_multi_sysroot}' -i $out/nix-support/libc-cflags
+    '';
+  };
+
+in clangMulti