229 lines
6.8 KiB
Nix
229 lines
6.8 KiB
Nix
{
|
|
description = "A simple rust flake using rust-overlay and craneLib";
|
|
|
|
inputs = {
|
|
self = {
|
|
lfs = true;
|
|
};
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
crane.url = "github:ipetkov/crane";
|
|
nix-github-actions = {
|
|
url = "github:nix-community/nix-github-actions";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
rust-overlay = {
|
|
url = "github:oxalica/rust-overlay";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
advisory-db = {
|
|
url = "github:rustsec/advisory-db";
|
|
flake = false;
|
|
};
|
|
mnn-overlay = {
|
|
url = "github:uttarayan21/mnn-nix-overlay";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
mnn-src = {
|
|
url = "github:alibaba/MNN/3.2.2";
|
|
flake = false;
|
|
};
|
|
};
|
|
|
|
outputs = {
|
|
self,
|
|
crane,
|
|
flake-utils,
|
|
nixpkgs,
|
|
rust-overlay,
|
|
advisory-db,
|
|
nix-github-actions,
|
|
mnn-overlay,
|
|
mnn-src,
|
|
...
|
|
}:
|
|
flake-utils.lib.eachDefaultSystem (
|
|
system: let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
overlays = [
|
|
rust-overlay.overlays.default
|
|
(final: prev: {
|
|
mnn = mnn-overlay.packages.${system}.mnn.override {
|
|
src = mnn-src;
|
|
buildConverter = true;
|
|
enableMetal = pkgs.stdenv.isDarwin;
|
|
enableOpencl = true;
|
|
};
|
|
})
|
|
];
|
|
};
|
|
inherit (pkgs) lib;
|
|
cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml);
|
|
name = cargoToml.package.name;
|
|
|
|
stableToolchain = pkgs.rust-bin.stable.latest.default;
|
|
stableToolchainWithLLvmTools = stableToolchain.override {
|
|
extensions = [
|
|
"rust-src"
|
|
"llvm-tools"
|
|
];
|
|
};
|
|
stableToolchainWithRustAnalyzer = stableToolchain.override {
|
|
extensions = [
|
|
"rust-src"
|
|
"rust-analyzer"
|
|
];
|
|
};
|
|
craneLib = (crane.mkLib pkgs).overrideToolchain stableToolchain;
|
|
craneLibLLvmTools = (crane.mkLib pkgs).overrideToolchain stableToolchainWithLLvmTools;
|
|
|
|
ort_static = pkgs.onnxruntime.overrideAttrs (old: {
|
|
cmakeFlags =
|
|
old.cmakeFlags
|
|
++ [
|
|
"-Donnxruntime_BUILD_SHARED_LIB=OFF"
|
|
"-Donnxruntime_BUILD_STATIC_LIB=ON"
|
|
];
|
|
});
|
|
patchedOnnxruntime = pkgs.onnxruntime.overrideAttrs (old: {
|
|
patches = [./patches/ort_env_global_mutex.patch];
|
|
});
|
|
src = let
|
|
filterBySuffix = path: exts: lib.any (ext: lib.hasSuffix ext path) exts;
|
|
sourceFilters = path: type:
|
|
(craneLib.filterCargoSources path type)
|
|
|| filterBySuffix path [
|
|
".c"
|
|
".h"
|
|
".hpp"
|
|
".cpp"
|
|
".cc"
|
|
".mnn"
|
|
".onnx"
|
|
];
|
|
in
|
|
lib.cleanSourceWith {
|
|
filter = sourceFilters;
|
|
src = ./.;
|
|
};
|
|
commonArgs =
|
|
{
|
|
inherit src;
|
|
pname = name;
|
|
stdenv = p: p.clangStdenv;
|
|
doCheck = false;
|
|
LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib";
|
|
ORT_LIB_LOCATION = "${patchedOnnxruntime}";
|
|
ORT_ENV_SYSTEM_LIB_LOCATION = "${patchedOnnxruntime}/lib";
|
|
ORT_ENV_PREFER_DYNAMIC_LINK = true;
|
|
nativeBuildInputs = with pkgs; [
|
|
cmake
|
|
pkg-config
|
|
];
|
|
buildInputs = with pkgs;
|
|
[
|
|
# onnxruntime
|
|
]
|
|
++ (lib.optionals pkgs.stdenv.isDarwin [
|
|
libiconv
|
|
apple-sdk_13
|
|
]);
|
|
}
|
|
// (lib.optionalAttrs pkgs.stdenv.isLinux {
|
|
# BINDGEN_EXTRA_CLANG_ARGS = "-I${pkgs.llvmPackages.libclang.lib}/lib/clang/18/include";
|
|
});
|
|
cargoArtifacts = craneLib.buildPackage commonArgs;
|
|
in {
|
|
checks =
|
|
{
|
|
"${name}-clippy" = craneLib.cargoClippy (
|
|
commonArgs
|
|
// {
|
|
inherit cargoArtifacts;
|
|
cargoClippyExtraArgs = "--all-targets -- --deny warnings";
|
|
}
|
|
);
|
|
"${name}-docs" = craneLib.cargoDoc (commonArgs // {inherit cargoArtifacts;});
|
|
"${name}-fmt" = craneLib.cargoFmt {inherit src;};
|
|
"${name}-toml-fmt" = craneLib.taploFmt {
|
|
src = pkgs.lib.sources.sourceFilesBySuffices src [".toml"];
|
|
};
|
|
# Audit dependencies
|
|
"${name}-audit" = craneLib.cargoAudit {
|
|
inherit src advisory-db;
|
|
};
|
|
|
|
# Audit licenses
|
|
"${name}-deny" = craneLib.cargoDeny {
|
|
inherit src;
|
|
};
|
|
"${name}-nextest" = craneLib.cargoNextest (
|
|
commonArgs
|
|
// {
|
|
inherit cargoArtifacts;
|
|
partitions = 1;
|
|
partitionType = "count";
|
|
}
|
|
);
|
|
}
|
|
// lib.optionalAttrs (!pkgs.stdenv.isDarwin) {
|
|
"${name}-llvm-cov" = craneLibLLvmTools.cargoLlvmCov (commonArgs // {inherit cargoArtifacts;});
|
|
};
|
|
|
|
packages = let
|
|
pkg = craneLib.buildPackage (
|
|
commonArgs
|
|
// {
|
|
inherit cargoArtifacts;
|
|
}
|
|
// {
|
|
nativeBuildInputs = with pkgs;
|
|
commonArgs.nativeBuildInputs
|
|
++ [
|
|
installShellFiles
|
|
];
|
|
postInstall = ''
|
|
installShellCompletion --cmd ${name} \
|
|
--bash <($out/bin/${name} completions bash) \
|
|
--fish <($out/bin/${name} completions fish) \
|
|
--zsh <($out/bin/${name} completions zsh)
|
|
'';
|
|
}
|
|
);
|
|
in {
|
|
"${name}" = pkg;
|
|
default = pkg;
|
|
onnxruntime = ort_static;
|
|
};
|
|
|
|
devShells = {
|
|
default = pkgs.mkShell.override {stdenv = pkgs.clangStdenv;} (
|
|
commonArgs
|
|
// {
|
|
LLDB_DEBUGSERVER_PATH = "/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/Resources/debugserver";
|
|
packages = with pkgs;
|
|
[
|
|
stableToolchainWithRustAnalyzer
|
|
cargo-nextest
|
|
cargo-deny
|
|
cmake
|
|
mnn
|
|
cargo-make
|
|
hyperfine
|
|
]
|
|
++ (lib.optionals pkgs.stdenv.isDarwin [
|
|
apple-sdk_13
|
|
]);
|
|
}
|
|
);
|
|
};
|
|
}
|
|
)
|
|
// {
|
|
githubActions = nix-github-actions.lib.mkGithubMatrix {
|
|
checks = nixpkgs.lib.getAttrs ["x86_64-linux"] self.checks;
|
|
};
|
|
};
|
|
}
|