mirror of
https://github.com/perstarkse/minne.git
synced 2026-07-16 17:51:14 +02:00
dev: toolchain harmonization, additional checks and formatters
This commit is contained in:
@@ -0,0 +1,220 @@
|
||||
{
|
||||
inputs,
|
||||
pkgs,
|
||||
system,
|
||||
src,
|
||||
ortVersion,
|
||||
versions,
|
||||
}:
|
||||
let
|
||||
inherit (pkgs) lib;
|
||||
inherit (inputs) crane fenix;
|
||||
inherit (versions)
|
||||
minneVersion
|
||||
mozjsRelease
|
||||
mozjsHashes
|
||||
rustVersion
|
||||
rustManifestSha256
|
||||
;
|
||||
|
||||
rustToolchain = import ../packages/rust-toolchain.nix {
|
||||
inherit fenix system rustVersion;
|
||||
manifestSha256 = rustManifestSha256;
|
||||
};
|
||||
|
||||
craneLib = rustToolchain.mkCraneLib pkgs (crane.mkLib pkgs);
|
||||
|
||||
libExt = if pkgs.stdenv.isDarwin then "dylib" else "so";
|
||||
|
||||
linuxRuntimeLibs = with pkgs; [
|
||||
libglvnd
|
||||
stdenv.cc.cc.lib
|
||||
zlib
|
||||
fontconfig.lib
|
||||
freetype
|
||||
openssl.out
|
||||
onnxruntime
|
||||
];
|
||||
|
||||
devGraphicsLibs = with pkgs; [
|
||||
wayland
|
||||
libxkbcommon
|
||||
pipewire
|
||||
libglvnd
|
||||
];
|
||||
|
||||
wrapLinuxBinary = libExt: ''
|
||||
wrapProgram $out/bin/main \
|
||||
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath linuxRuntimeLibs} \
|
||||
--set ORT_DYLIB_PATH ${pkgs.onnxruntime}/lib/libonnxruntime.${libExt}
|
||||
for b in worker server; do
|
||||
if [ -x "$out/bin/$b" ]; then
|
||||
wrapProgram $out/bin/$b \
|
||||
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath linuxRuntimeLibs} \
|
||||
--set ORT_DYLIB_PATH ${pkgs.onnxruntime}/lib/libonnxruntime.${libExt}
|
||||
fi
|
||||
done
|
||||
'';
|
||||
|
||||
mozjsTarget =
|
||||
{
|
||||
"x86_64-linux" = "x86_64-unknown-linux-gnu";
|
||||
"aarch64-linux" = "aarch64-unknown-linux-gnu";
|
||||
"aarch64-darwin" = "aarch64-apple-darwin";
|
||||
"x86_64-darwin" = "x86_64-apple-darwin";
|
||||
}
|
||||
.${system} or (throw "mozjs prebuilt archive not configured for system ${system}");
|
||||
|
||||
mozjsArchive = pkgs.fetchurl {
|
||||
url = "https://github.com/servo/mozjs/releases/download/${mozjsRelease}/libmozjs-${mozjsTarget}.tar.gz";
|
||||
hash = mozjsHashes.${mozjsTarget} or (throw "missing mozjs hash for ${mozjsTarget}");
|
||||
};
|
||||
|
||||
commonArgs = {
|
||||
version = minneVersion;
|
||||
src = lib.cleanSourceWith {
|
||||
inherit src;
|
||||
filter =
|
||||
path: type:
|
||||
craneLib.filterCargoSources path type
|
||||
|| lib.any (x: lib.hasPrefix (toString x) (toString path)) [
|
||||
(toString src + "/Cargo.lock")
|
||||
(toString src + "/common/db")
|
||||
(toString src + "/html-router/templates")
|
||||
(toString src + "/html-router/assets")
|
||||
];
|
||||
};
|
||||
strictDeps = true;
|
||||
|
||||
buildInputs = [
|
||||
pkgs.openssl
|
||||
pkgs.libglvnd
|
||||
pkgs.onnxruntime
|
||||
pkgs.fontconfig
|
||||
pkgs.libclang.lib
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkgs.pkg-config
|
||||
pkgs.rustfmt
|
||||
pkgs.makeWrapper
|
||||
pkgs.python3
|
||||
pkgs.llvmPackages.llvm
|
||||
pkgs.rustPlatform.bindgenHook
|
||||
pkgs.stdenv.cc.cc.lib
|
||||
];
|
||||
|
||||
MOZJS_ARCHIVE = "${mozjsArchive}";
|
||||
env.LD_LIBRARY_PATH = lib.makeLibraryPath linuxRuntimeLibs;
|
||||
};
|
||||
|
||||
cargoArtifacts = craneLib.buildDepsOnly (
|
||||
commonArgs
|
||||
// {
|
||||
pname = "minne";
|
||||
cargoExtraArgs = "--workspace";
|
||||
doCheck = false;
|
||||
}
|
||||
);
|
||||
|
||||
minne-pkg =
|
||||
if pkgs.onnxruntime.version == ortVersion then
|
||||
craneLib.buildPackage (
|
||||
commonArgs
|
||||
// {
|
||||
pname = "minne";
|
||||
version = minneVersion;
|
||||
inherit cargoArtifacts;
|
||||
doCheck = false;
|
||||
doInstallCargoArtifacts = true;
|
||||
|
||||
postInstall =
|
||||
lib.optionalString pkgs.stdenv.isLinux (wrapLinuxBinary libExt)
|
||||
+ lib.optionalString pkgs.stdenv.isDarwin ''
|
||||
for b in main worker server; do
|
||||
if [ -x "$out/bin/$b" ]; then
|
||||
wrapProgram $out/bin/$b \
|
||||
--set ORT_DYLIB_PATH ${pkgs.onnxruntime}/lib/libonnxruntime.${libExt}
|
||||
fi
|
||||
done
|
||||
'';
|
||||
}
|
||||
)
|
||||
else
|
||||
throw "pkgs.onnxruntime.version (${pkgs.onnxruntime.version}) must match ortVersion (${ortVersion})";
|
||||
|
||||
targetTriple = pkgs.stdenv.hostPlatform.config;
|
||||
|
||||
releaseCommonArgs = {
|
||||
inherit minneVersion targetTriple;
|
||||
bzip2 = pkgs.bzip2.out;
|
||||
brotli = pkgs.brotli.lib;
|
||||
srcRoot = src;
|
||||
};
|
||||
|
||||
minne-release =
|
||||
if pkgs.stdenv.isLinux then
|
||||
pkgs.callPackage ../packages/release.nix (
|
||||
releaseCommonArgs
|
||||
// {
|
||||
platform = "linux";
|
||||
inherit minne-pkg;
|
||||
}
|
||||
)
|
||||
else if pkgs.stdenv.isDarwin then
|
||||
pkgs.callPackage ../packages/release.nix (
|
||||
releaseCommonArgs
|
||||
// {
|
||||
platform = "darwin";
|
||||
inherit minne-pkg;
|
||||
}
|
||||
)
|
||||
else
|
||||
null;
|
||||
|
||||
dockerImage = pkgs.dockerTools.buildLayeredImage {
|
||||
name = "minne";
|
||||
tag = minneVersion;
|
||||
created = "now";
|
||||
|
||||
contents = [
|
||||
minne-pkg
|
||||
pkgs.cacert
|
||||
pkgs.bashInteractive
|
||||
pkgs.libglvnd
|
||||
pkgs.fontconfig.lib
|
||||
pkgs.freetype
|
||||
pkgs.stdenv.cc.cc.lib
|
||||
];
|
||||
|
||||
maxLayers = 25;
|
||||
|
||||
config = {
|
||||
Cmd = [ "${minne-pkg}/bin/main" ];
|
||||
Env = [
|
||||
"SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-certificates.crt"
|
||||
"ORT_DYLIB_PATH=${pkgs.onnxruntime}/lib/libonnxruntime.${libExt}"
|
||||
];
|
||||
ExposedPorts = {
|
||||
"3000/tcp" = { };
|
||||
};
|
||||
User = "appuser";
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
inherit
|
||||
lib
|
||||
craneLib
|
||||
rustToolchain
|
||||
libExt
|
||||
linuxRuntimeLibs
|
||||
devGraphicsLibs
|
||||
commonArgs
|
||||
minneVersion
|
||||
minne-pkg
|
||||
minne-release
|
||||
releaseCommonArgs
|
||||
dockerImage
|
||||
;
|
||||
}
|
||||
Reference in New Issue
Block a user