1{
2 lib,
3 runCommand,
4 stdenv,
5 llvm,
6 lld,
7 version,
8 release_version,
9}:
10
11let
12 targetPrefix = lib.optionalString (
13 stdenv.hostPlatform != stdenv.targetPlatform
14 ) "${stdenv.targetPlatform.config}-";
15in
16runCommand "llvm-binutils-${version}"
17 {
18 preferLocalBuild = true;
19 passthru = {
20 isLLVM = true;
21 inherit targetPrefix;
22 inherit llvm lld;
23 };
24 }
25 ''
26 mkdir -p $out/bin
27 for prog in ${lld}/bin/*; do
28 ln -s $prog $out/bin/${targetPrefix}$(basename $prog)
29 done
30 for prog in ${llvm}/bin/*; do
31 ln -sf $prog $out/bin/${targetPrefix}$(basename $prog)
32 done
33
34 llvmBin="${llvm}/bin"
35
36 ln -s $llvmBin/llvm-ar $out/bin/${targetPrefix}ar
37 ln -s $llvmBin/llvm-ar $out/bin/${targetPrefix}dlltool
38 ln -s $llvmBin/llvm-ar $out/bin/${targetPrefix}ranlib
39 ln -s $llvmBin/llvm-cxxfilt $out/bin/${targetPrefix}c++filt
40 ln -s $llvmBin/llvm-dwp $out/bin/${targetPrefix}dwp
41 ln -s $llvmBin/llvm-nm $out/bin/${targetPrefix}nm
42 ln -s $llvmBin/llvm-objcopy $out/bin/${targetPrefix}objcopy
43 ln -s $llvmBin/llvm-objcopy $out/bin/${targetPrefix}strip
44 ln -s $llvmBin/llvm-objdump $out/bin/${targetPrefix}objdump
45 ln -s $llvmBin/llvm-readobj $out/bin/${targetPrefix}readelf
46 ln -s $llvmBin/llvm-size $out/bin/${targetPrefix}size
47 ln -s $llvmBin/llvm-strings $out/bin/${targetPrefix}strings
48 ln -s $llvmBin/llvm-symbolizer $out/bin/${targetPrefix}addr2line
49
50 if [ -e "$llvmBin/llvm-debuginfod" ]; then
51 ln -s $llvmBin/llvm-debuginfod $out/bin/${targetPrefix}debuginfod
52 ln -s $llvmBin/llvm-debuginfod-find $out/bin/${targetPrefix}debuginfod-find
53 fi
54
55 ln -s ${lld}/bin/lld $out/bin/${targetPrefix}ld
56
57 # Only >=13 show GNU windres compatible in help
58 ln -s $llvmBin/llvm-rc $out/bin/${targetPrefix}windres
59 ''