depot/third_party/nixpkgs/pkgs/development/compilers/circt/circt-llvm.nix
Default email 5c370c0b2a Project import generated by Copybara.
GitOrigin-RevId: 33d1e753c82ffc557b4a585c77de43d4c922ebb5
2024-05-15 17:35:15 +02:00

61 lines
1.8 KiB
Nix

{ stdenv
, cmake
, ninja
, circt
, llvm
, python3
}: stdenv.mkDerivation {
pname = circt.pname + "-llvm";
inherit (circt) version src;
requiredSystemFeatures = [ "big-parallel" ];
nativeBuildInputs = [ cmake ninja python3 ];
preConfigure = ''
cd llvm/llvm
'';
cmakeFlags = [
"-DBUILD_SHARED_LIBS=ON"
"-DLLVM_ENABLE_BINDINGS=OFF"
"-DLLVM_ENABLE_OCAMLDOC=OFF"
"-DLLVM_BUILD_EXAMPLES=OFF"
"-DLLVM_OPTIMIZED_TABLEGEN=ON"
"-DLLVM_ENABLE_PROJECTS=mlir"
"-DLLVM_TARGETS_TO_BUILD=Native"
# This option is needed to install llvm-config
"-DLLVM_INSTALL_UTILS=ON"
];
outputs = [ "out" "lib" "dev" ];
postInstall = ''
# move llvm-config to $dev to resolve a circular dependency
moveToOutput "bin/llvm-config*" "$dev"
# move all lib files to $lib except lib/cmake
moveToOutput "lib" "$lib"
moveToOutput "lib/cmake" "$dev"
# patch configuration files so each path points to the new $lib or $dev paths
substituteInPlace "$dev/lib/cmake/llvm/LLVMConfig.cmake" \
--replace 'set(LLVM_BINARY_DIR "''${LLVM_INSTALL_PREFIX}")' 'set(LLVM_BINARY_DIR "'"$lib"'")'
substituteInPlace \
"$dev/lib/cmake/llvm/LLVMExports-release.cmake" \
"$dev/lib/cmake/mlir/MLIRTargets-release.cmake" \
--replace "\''${_IMPORT_PREFIX}/lib/lib" "$lib/lib/lib" \
--replace "\''${_IMPORT_PREFIX}/lib/objects-Release" "$lib/lib/objects-Release" \
--replace "$out/bin/llvm-config" "$dev/bin/llvm-config" # patch path for llvm-config
'';
# circt only use the mlir part of llvm, occasionally there are some unrelated failure from llvm,
# disable the llvm check, but keep the circt check enabled.
doCheck = false;
checkTarget = "check-mlir";
meta = llvm.meta // {
inherit (circt.meta) maintainers;
};
}