93 lines
1.9 KiB
Nix
93 lines
1.9 KiB
Nix
{
|
|
lib,
|
|
stdenv,
|
|
llvm_meta,
|
|
monorepoSrc,
|
|
release_version,
|
|
runCommand,
|
|
cmake,
|
|
libxml2,
|
|
libllvm,
|
|
ninja,
|
|
libclang,
|
|
version,
|
|
python3,
|
|
buildLlvmPackages,
|
|
patches ? [ ],
|
|
devExtraCmakeFlags ? [ ],
|
|
fetchpatch,
|
|
}:
|
|
|
|
stdenv.mkDerivation (finalAttrs: {
|
|
pname = "bolt";
|
|
inherit version;
|
|
|
|
# Blank llvm dir just so relative path works
|
|
src = runCommand "bolt-src-${finalAttrs.version}" { inherit (monorepoSrc) passthru; } ''
|
|
mkdir $out
|
|
cp -r ${monorepoSrc}/cmake "$out"
|
|
cp -r ${monorepoSrc}/${finalAttrs.pname} "$out"
|
|
cp -r ${monorepoSrc}/third-party "$out"
|
|
|
|
# BOLT re-runs tablegen against LLVM sources, so needs them available.
|
|
cp -r ${monorepoSrc}/llvm/ "$out"
|
|
chmod -R +w $out/llvm
|
|
'';
|
|
|
|
sourceRoot = "${finalAttrs.src.name}/bolt";
|
|
|
|
patches = lib.optionals (lib.versions.major release_version == "19") [
|
|
(fetchpatch {
|
|
url = "https://github.com/llvm/llvm-project/commit/abc2eae68290c453e1899a94eccc4ed5ea3b69c1.patch";
|
|
hash = "sha256-oxCxOjhi5BhNBEraWalEwa1rS3Mx9CuQgRVZ2hrbd7M=";
|
|
})
|
|
(fetchpatch {
|
|
url = "https://github.com/llvm/llvm-project/commit/5909979869edca359bcbca74042c2939d900680e.patch";
|
|
hash = "sha256-l4rQHYbblEADBXaZIdqTG0sZzH4fEQvYiqhLYNZDMa8=";
|
|
})
|
|
];
|
|
|
|
nativeBuildInputs = [
|
|
cmake
|
|
ninja
|
|
python3
|
|
];
|
|
|
|
buildInputs = [
|
|
libllvm
|
|
libxml2
|
|
];
|
|
|
|
cmakeFlags = [
|
|
(lib.cmakeFeature "LLVM_TABLEGEN_EXE" "${buildLlvmPackages.tblgen}/bin/llvm-tblgen")
|
|
]
|
|
++ devExtraCmakeFlags;
|
|
|
|
postUnpack = ''
|
|
chmod -R u+w -- $sourceRoot/..
|
|
'';
|
|
|
|
prePatch = ''
|
|
cd ..
|
|
'';
|
|
|
|
postPatch = ''
|
|
cd bolt
|
|
'';
|
|
|
|
postInstall = ''
|
|
mkdir -p $dev/lib
|
|
mv $out/lib/libLLVMBOLT*.a $dev/lib
|
|
'';
|
|
|
|
outputs = [
|
|
"out"
|
|
"dev"
|
|
];
|
|
|
|
meta = llvm_meta // {
|
|
homepage = "https://github.com/llvm/llvm-project/tree/main/bolt";
|
|
description = "LLVM post-link optimizer";
|
|
};
|
|
})
|