nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 stdenv,
4 llvm_meta,
5 monorepoSrc,
6 release_version,
7 runCommand,
8 cmake,
9 libxml2,
10 libllvm,
11 ninja,
12 libclang,
13 version,
14 python3,
15 buildLlvmPackages,
16 patches ? [ ],
17 devExtraCmakeFlags ? [ ],
18 fetchpatch,
19}:
20
21stdenv.mkDerivation (finalAttrs: {
22 pname = "bolt";
23 inherit version;
24
25 # Blank llvm dir just so relative path works
26 src = runCommand "bolt-src-${finalAttrs.version}" { inherit (monorepoSrc) passthru; } ''
27 mkdir $out
28 cp -r ${monorepoSrc}/cmake "$out"
29 cp -r ${monorepoSrc}/${finalAttrs.pname} "$out"
30 cp -r ${monorepoSrc}/third-party "$out"
31
32 # BOLT re-runs tablegen against LLVM sources, so needs them available.
33 cp -r ${monorepoSrc}/llvm/ "$out"
34 chmod -R +w $out/llvm
35 '';
36
37 sourceRoot = "${finalAttrs.src.name}/bolt";
38
39 patches = lib.optionals (lib.versions.major release_version == "19") [
40 (fetchpatch {
41 url = "https://github.com/llvm/llvm-project/commit/abc2eae68290c453e1899a94eccc4ed5ea3b69c1.patch";
42 hash = "sha256-oxCxOjhi5BhNBEraWalEwa1rS3Mx9CuQgRVZ2hrbd7M=";
43 })
44 (fetchpatch {
45 url = "https://github.com/llvm/llvm-project/commit/5909979869edca359bcbca74042c2939d900680e.patch";
46 hash = "sha256-l4rQHYbblEADBXaZIdqTG0sZzH4fEQvYiqhLYNZDMa8=";
47 })
48 ];
49
50 nativeBuildInputs = [
51 cmake
52 ninja
53 python3
54 ];
55
56 buildInputs = [
57 libllvm
58 libxml2
59 ];
60
61 cmakeFlags = [
62 (lib.cmakeFeature "LLVM_TABLEGEN_EXE" "${buildLlvmPackages.tblgen}/bin/llvm-tblgen")
63 ]
64 ++ devExtraCmakeFlags;
65
66 postUnpack = ''
67 chmod -R u+w -- $sourceRoot/..
68 '';
69
70 prePatch = ''
71 cd ..
72 '';
73
74 postPatch = ''
75 cd bolt
76 '';
77
78 postInstall = ''
79 mkdir -p $dev/lib
80 mv $out/lib/libLLVMBOLT*.a $dev/lib
81 '';
82
83 outputs = [
84 "out"
85 "dev"
86 ];
87
88 meta = llvm_meta // {
89 homepage = "https://github.com/llvm/llvm-project/tree/main/bolt";
90 description = "LLVM post-link optimizer";
91 };
92})