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 ''
27 mkdir -p $out/bin
28 for prog in ${lld}/bin/*; do
29 ln -s $prog $out/bin/${targetPrefix}$(basename $prog)
30 done
31 for prog in ${llvm}/bin/*; do
32 ln -sf $prog $out/bin/${targetPrefix}$(basename $prog)
33 done
34
35 llvmBin="${llvm}/bin"
36
37 ln -s $llvmBin/llvm-ar $out/bin/${targetPrefix}ar
38 ln -s $llvmBin/llvm-ar $out/bin/${targetPrefix}dlltool
39 ln -s $llvmBin/llvm-ar $out/bin/${targetPrefix}ranlib
40 ln -s $llvmBin/llvm-cxxfilt $out/bin/${targetPrefix}c++filt
41 ln -s $llvmBin/llvm-dwp $out/bin/${targetPrefix}dwp
42 ln -s $llvmBin/llvm-nm $out/bin/${targetPrefix}nm
43 ln -s $llvmBin/llvm-objcopy $out/bin/${targetPrefix}objcopy
44 ln -s $llvmBin/llvm-objcopy $out/bin/${targetPrefix}strip
45 ln -s $llvmBin/llvm-objdump $out/bin/${targetPrefix}objdump
46 ln -s $llvmBin/llvm-readobj $out/bin/${targetPrefix}readelf
47 ln -s $llvmBin/llvm-size $out/bin/${targetPrefix}size
48 ln -s $llvmBin/llvm-strings $out/bin/${targetPrefix}strings
49 ln -s $llvmBin/llvm-symbolizer $out/bin/${targetPrefix}addr2line
50
51 if [ -e "$llvmBin/llvm-debuginfod" ]; then
52 ln -s $llvmBin/llvm-debuginfod $out/bin/${targetPrefix}debuginfod
53 ln -s $llvmBin/llvm-debuginfod-find $out/bin/${targetPrefix}debuginfod-find
54 fi
55
56 ln -s ${lld}/bin/lld $out/bin/${targetPrefix}ld
57
58 # Only >=13 show GNU windres compatible in help
59 ''
60 + lib.optionalString (lib.versionAtLeast release_version "13") ''
61 ln -s $llvmBin/llvm-rc $out/bin/${targetPrefix}windres
62 ''
63 )