1{
2 lib,
3 runCommand,
4 glibc,
5 glibc32,
6}:
7
8let
9 nameVersion = builtins.parseDrvName glibc.name;
10 glibc64 = glibc;
11in
12runCommand "${nameVersion.name}-multi-${nameVersion.version}"
13 # out as the first output is an exception exclusive to glibc
14 {
15 outputs = [
16 "out"
17 "bin"
18 "dev"
19 "static"
20 ];
21 passthru = {
22 libgcc = lib.lists.filter (x: x != null) [
23 (glibc64.libgcc or null)
24 (glibc32.libgcc or null)
25 ];
26 };
27 }
28 ''
29 mkdir -p "$out/lib"
30 ln -s '${glibc64.out}'/lib/* "$out/lib"
31 ln -s '${glibc32.out}/lib' "$out/lib/32"
32 ln -s lib "$out/lib64"
33
34 # fixing ldd RLTDLIST
35 mkdir -p "$bin/bin"
36 cp -s '${glibc64.bin}'/bin/* "$bin/bin/"
37 rm "$bin/bin/ldd"
38 sed -e "s|^RTLDLIST=.*$|RTLDLIST=\"$out/lib/ld-linux-x86-64.so.2 $out/lib/32/ld-linux.so.2\"|g" \
39 '${glibc64.bin}/bin/ldd' > "$bin/bin/ldd"
40 chmod +x "$bin/bin/ldd"
41
42 mkdir "$dev"
43 cp -rs '${glibc32.dev}'/include "$dev/"
44 chmod +w -R "$dev"
45 cp -rsf '${glibc64.dev}'/include "$dev/"
46
47 mkdir -p "$static/lib" "$static/lib64"
48 # create symlinks for files used for dynamic linking
49 # -> removing this will cause dynamically linked programs to segfault
50 cp -rs '${glibc32.out}'/lib/* "$static/lib"
51 cp -rs '${glibc64.out}'/lib/* "$static/lib64"
52 # create symlinks for files used for static linking
53 cp -rs '${glibc32.static}'/lib/* "$static/lib"
54 cp -rs '${glibc64.static}'/lib/* "$static/lib64"
55 ''