Skip to content

Commit 99cadc8

Browse files
authoredNov 20, 2024··
Merge pull request #8 from aftershootco/serde
feat: derive serde `Serialize` and `Deserialize` for enums behind fea…
2 parents f1c994e + 35d0a70 commit 99cadc8

File tree

8 files changed

+307
-301
lines changed

8 files changed

+307
-301
lines changed
 

‎.github/workflows/build.yaml

+15-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ jobs:
1717
steps:
1818
- uses: actions/checkout@v4
1919
- uses: DeterminateSystems/nix-installer-action@main
20-
- uses: DeterminateSystems/magic-nix-cache-action@main
2120
- id: set-matrix
2221
name: Generate Nix Matrix
2322
run: |
@@ -32,8 +31,14 @@ jobs:
3231
matrix: ${{fromJSON(needs.checks-matrix.outputs.matrix)}}
3332
steps:
3433
- uses: actions/checkout@v4
34+
with:
35+
lfs: true
36+
submodules: 'recursive'
3537
- uses: DeterminateSystems/nix-installer-action@main
36-
- uses: DeterminateSystems/magic-nix-cache-action@main
38+
- uses: cachix/cachix-action@v14
39+
with:
40+
name: mnn-rs
41+
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
3742
- run: nix build -L '.#${{ matrix.attr }}'
3843

3944
codecov:
@@ -44,11 +49,17 @@ jobs:
4449

4550
steps:
4651
- uses: actions/checkout@v4
52+
with:
53+
lfs: true
54+
submodules: 'recursive'
4755
- uses: DeterminateSystems/nix-installer-action@main
48-
- uses: DeterminateSystems/magic-nix-cache-action@main
56+
- uses: cachix/cachix-action@v14
57+
with:
58+
name: mnn-rs
59+
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
4960

5061
- name: Run codecov
51-
run: nix build .#mnn-llvm-cov
62+
run: nix build .#checks.x86_64-linux.mnn-llvm-cov
5263

5364
- name: Upload coverage reports to Codecov
5465
uses: codecov/codecov-action@v4.0.1

‎.github/workflows/docs.yaml

+4-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ jobs:
1818
steps:
1919
- uses: actions/checkout@v4
2020
- uses: DeterminateSystems/nix-installer-action@main
21-
- uses: DeterminateSystems/magic-nix-cache-action@main
21+
- uses: cachix/cachix-action@v14
22+
with:
23+
name: mnn-rs
24+
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
2225
- uses: DeterminateSystems/flake-checker-action@main
2326

2427
- name: Generate docs

‎Cargo.lock

+115-151
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎Cargo.toml

+3-1
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@ error-stack = { version = "0.5" }
1616
[dependencies]
1717
libc = "0.2"
1818
mnn-sys = { version = "0.1", path = "mnn-sys", features = [] }
19-
thiserror = "1.0"
19+
thiserror = "2.0"
2020
error-stack.workspace = true
2121
oneshot = "0.1"
2222
tracing = { version = "0.1.40", optional = true }
2323
dunce = "1.0.5"
24+
serde = { version = "1.0", features = ["derive"], optional = true }
2425

2526
[features]
2627
metal = ["mnn-sys/metal"]
@@ -34,6 +35,7 @@ openmp = ["mnn-sys/openmp"]
3435
mnn-threadpool = ["mnn-sys/mnn-threadpool"]
3536
tracing = ["dep:tracing"]
3637
profile = ["tracing"]
38+
serde = ["dep:serde"]
3739

3840
default = ["mnn-threadpool"]
3941

‎flake.lock

+12-12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎flake.nix

+154-132
Original file line numberDiff line numberDiff line change
@@ -54,164 +54,186 @@
5454
# enableMetal = true;
5555
enableOpencl = true;
5656
};
57+
cargo-audit = pkgs.rustPlatform.buildRustPackage rec {
58+
version = "0.21.0";
59+
pname = "cargo-audit";
60+
src = pkgs.fetchCrate {
61+
inherit pname version;
62+
sha256 = "sha256-oMXpJE49If4QKE80ZKhRpMRPh3Bl517a2Ez/1VcaQJQ=";
63+
};
64+
cargoLock = rec {
65+
lockFile = "${src}/Cargo.lock";
66+
};
67+
};
5768
})
5869
];
5970
};
6071
inherit (pkgs) lib;
6172

62-
stableToolchain = pkgs.rust-bin.stable.latest.default;
63-
nightlyToolchain = pkgs.rust-bin.nightly.latest.default.override {
64-
extensions = ["rust-src" "rust-analyzer"];
65-
};
66-
stableToolchainWithLLvmTools = pkgs.rust-bin.stable.latest.default.override {
73+
version = "latest";
74+
75+
rustToolchain = pkgs.rust-bin.stable.${version}.default;
76+
rustToolchainWithLLvmTools = pkgs.rust-bin.stable.${version}.default.override {
6777
extensions = ["rust-src" "llvm-tools"];
6878
};
69-
stableToolchainWithRustAnalyzer = pkgs.rust-bin.stable.latest.default.override {
70-
extensions = ["rust-src" "rust-analyzer"];
71-
};
72-
craneLib = (crane.mkLib pkgs).overrideToolchain stableToolchain;
73-
craneLibLLvmTools = (crane.mkLib pkgs).overrideToolchain stableToolchainWithLLvmTools;
79+
rustToolchainWithRustAnalyzer = pkgs.rust-bin.stable.${version}.default.override ({
80+
extensions = ["rust-src" "rust-analyzer"];
81+
}
82+
// (lib.optionalAttrs pkgs.stdenv.isDarwin {
83+
targets = ["aarch64-apple-darwin" "x86_64-apple-darwin"];
84+
}));
85+
craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;
86+
craneLibLLvmTools = (crane.mkLib pkgs).overrideToolchain rustToolchainWithLLvmTools;
7487

7588
src = lib.sources.sourceFilesBySuffices ./. [".rs" ".toml" ".patch" ".mnn" ".h" ".cpp" ".svg" "lock"];
7689
MNN_SRC = mnn-src;
77-
commonArgs =
78-
{
79-
inherit src MNN_SRC;
80-
pname = "mnn";
81-
doCheck = false;
82-
LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib";
83-
nativeBuildInputs = with pkgs; [
84-
cmake
85-
llvmPackages.libclang.lib
86-
clang
87-
];
88-
buildInputs = with pkgs;
89-
[]
90-
++ (lib.optionals pkgs.stdenv.isDarwin [
91-
darwin.apple_sdk.frameworks.OpenCL
92-
]
93-
++ (lib.optionals pkgs.stdenv.isAarch64 [
94-
darwin.apple_sdk.frameworks.Metal
95-
darwin.apple_sdk.frameworks.CoreML
96-
]));
97-
}
98-
// (lib.optionalAttrs pkgs.stdenv.isLinux {
99-
BINDGEN_EXTRA_CLANG_ARGS = "-I${pkgs.llvmPackages.libclang.lib}/lib/clang/18/include";
100-
});
90+
commonArgs = {
91+
inherit src MNN_SRC;
92+
pname = "mnn";
93+
doCheck = false;
94+
LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib";
95+
nativeBuildInputs = with pkgs; [
96+
cmake
97+
llvmPackages.libclang.lib
98+
clang
99+
pkg-config
100+
];
101+
buildInputs = with pkgs;
102+
[]
103+
++ (lib.optionals pkgs.stdenv.isLinux [
104+
ocl-icd
105+
opencl-headers
106+
])
107+
++ (lib.optionals pkgs.stdenv.isDarwin [
108+
darwin.apple_sdk.frameworks.OpenCL
109+
]
110+
++ (lib.optionals pkgs.stdenv.isAarch64 [
111+
darwin.apple_sdk.frameworks.Metal
112+
darwin.apple_sdk.frameworks.CoreML
113+
]));
114+
};
101115
cargoArtifacts = craneLib.buildPackage commonArgs;
102116
in {
103-
checks = {
104-
mnn-clippy = craneLib.cargoClippy (commonArgs
105-
// {
106-
inherit cargoArtifacts;
107-
cargoClippyExtraArgs = "--all-targets -- --deny warnings";
108-
});
109-
mnn-docs = craneLib.cargoDoc (commonArgs
110-
// {
111-
inherit cargoArtifacts;
112-
cargoDocExtraArgs = "-p mnn -p mnn-sys";
113-
});
114-
mnn-fmt = craneLib.cargoFmt {inherit src;};
115-
# Audit dependencies
116-
mnn-audit = craneLib.cargoAudit {
117-
inherit src advisory-db;
118-
};
117+
checks =
118+
{
119+
mnn-clippy = craneLib.cargoClippy (commonArgs
120+
// {
121+
inherit cargoArtifacts;
122+
cargoClippyExtraArgs = "--all-targets -- --deny warnings";
123+
});
124+
mnn-docs = craneLib.cargoDoc (commonArgs
125+
// {
126+
inherit cargoArtifacts;
127+
cargoDocExtraArgs = "-p mnn -p mnn-sys";
128+
});
129+
mnn-fmt = craneLib.cargoFmt {inherit src;};
130+
# Audit dependencies
131+
mnn-audit =
132+
craneLib.cargoAudit.override {
133+
cargo-audit = pkgs.cargo-audit;
134+
} {
135+
inherit src advisory-db;
136+
};
119137

120-
# Audit licenses
121-
mnn-deny = craneLib.cargoDeny {
122-
inherit src;
123-
};
124-
mnn-nextest = craneLib.cargoNextest (commonArgs
125-
// {
126-
inherit cargoArtifacts;
127-
partitions = 1;
128-
partitionType = "count";
129-
});
130-
mnn-sys-clippy = craneLib.cargoClippy (commonArgs
131-
// {
132-
inherit cargoArtifacts;
133-
cargoClippyExtraArgs = "-p mnn-sys --all-targets -- --deny warnings";
134-
});
135-
mnn-sys-nextest = craneLib.cargoNextest (commonArgs
136-
// {
137-
inherit cargoArtifacts;
138-
partitions = 1;
139-
partitionType = "count";
140-
cargoExtraArgs = "-p mnn-sys";
141-
});
142-
# mnn-asan = let
143-
# rustPlatform = pkgs.makeRustPlatform {
144-
# cargo = nightlyToolchain;
145-
# rustc = nightlyToolchain;
146-
# };
147-
# in
148-
# rustPlatform.buildRustPackage (
149-
# commonArgs
150-
# // {
151-
# inherit src;
152-
# name = "mnn-leaks";
153-
# cargoLock = {
154-
# lockFile = ./Cargo.lock;
155-
# outputHashes = {
156-
# "cmake-0.1.50" = "sha256-GM2D7dpb2i2S6qYVM4HYk5B40TwKCmGQnUPfXksyf0M=";
157-
# };
158-
# };
159-
#
160-
# buildPhase = ''
161-
# cargo test --target aarch64-apple-darwin
162-
# '';
163-
# RUSTFLAGS = "-Zsanitizer=address";
164-
# ASAN_OPTIONS = "detect_leaks=1";
165-
# # MNN_COMPILE = "NO";
166-
# # MNN_LIB_DIR = "${pkgs.mnn}/lib";
167-
# }
168-
# );
169-
};
170-
packages =
171-
rec {
172-
mnn = craneLib.buildPackage (commonArgs
138+
# Audit licenses
139+
mnn-deny = craneLib.cargoDeny {
140+
inherit src;
141+
};
142+
mnn-nextest = craneLib.cargoNextest (commonArgs
173143
// {
174144
inherit cargoArtifacts;
145+
partitions = 1;
146+
partitionType = "count";
175147
});
176-
inspect = craneLib.buildPackage (commonArgs
148+
mnn-sys-clippy = craneLib.cargoClippy (commonArgs
177149
// {
178150
inherit cargoArtifacts;
179-
pname = "inspect";
180-
cargoExtraArgs =
181-
"--example inspect"
182-
+ (lib.optionalString pkgs.stdenv.isDarwin " --features opencl" + lib.optionalString pkgs.stdenv.isAarch64 ",metal,coreml");
151+
cargoClippyExtraArgs = "-p mnn-sys --all-targets -- --deny warnings";
183152
});
184-
default = mnn;
153+
mnn-sys-nextest = craneLib.cargoNextest (commonArgs
154+
// {
155+
inherit cargoArtifacts;
156+
partitions = 1;
157+
partitionType = "count";
158+
cargoExtraArgs = "-p mnn-sys";
159+
});
160+
# mnn-asan = let
161+
# rustPlatform = pkgs.makeRustPlatform {
162+
# cargo = nightlyToolchain;
163+
# rustc = nightlyToolchain;
164+
# };
165+
# in
166+
# rustPlatform.buildRustPackage (
167+
# commonArgs
168+
# // {
169+
# inherit src;
170+
# name = "mnn-leaks";
171+
# cargoLock = {
172+
# lockFile = ./Cargo.lock;
173+
# outputHashes = {
174+
# "cmake-0.1.50" = "sha256-GM2D7dpb2i2S6qYVM4HYk5B40TwKCmGQnUPfXksyf0M=";
175+
# };
176+
# };
177+
#
178+
# buildPhase = ''
179+
# cargo test --target aarch64-apple-darwin
180+
# '';
181+
# RUSTFLAGS = "-Zsanitizer=address";
182+
# ASAN_OPTIONS = "detect_leaks=1";
183+
# # MNN_COMPILE = "NO";
184+
# # MNN_LIB_DIR = "${pkgs.mnn}/lib";
185+
# }
186+
# );
185187
}
186188
// lib.optionalAttrs (!pkgs.stdenv.isDarwin) {
187189
mnn-llvm-cov = craneLibLLvmTools.cargoLlvmCov (commonArgs // {inherit cargoArtifacts;});
188190
};
191+
packages = rec {
192+
mnn = craneLib.buildPackage (commonArgs
193+
// {
194+
inherit cargoArtifacts;
195+
});
196+
inspect = craneLib.buildPackage (commonArgs
197+
// {
198+
inherit cargoArtifacts;
199+
pname = "inspect";
200+
cargoExtraArgs =
201+
"--example inspect"
202+
+ (lib.optionalString pkgs.stdenv.isDarwin " --features opencl" + lib.optionalString pkgs.stdenv.isAarch64 ",metal,coreml");
203+
});
204+
default = mnn;
205+
};
189206

190207
devShells = {
191-
default = pkgs.mkShell {
192-
LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib";
193-
packages = with pkgs;
194-
[
195-
mnn
196-
nightlyToolchain
197-
zstd
198-
cargo-nextest
199-
cargo-hakari
200-
cargo-deny
201-
cargo-semver-checks
202-
rust-bindgen
203-
llvm
204-
]
205-
++ (lib.optionals pkgs.stdenv.isDarwin [
206-
darwin.apple_sdk.frameworks.OpenCL
208+
default = pkgs.mkShell (commonArgs
209+
// {
210+
packages = with pkgs;
211+
[
212+
cargo-audit
213+
cargo-deny
214+
cargo-hakari
215+
cargo-nextest
216+
cargo-semver-checks
217+
clang
218+
git
219+
git-lfs
220+
llvm
221+
mnn
222+
nushell
223+
rust-bindgen
224+
rustToolchainWithRustAnalyzer
207225
]
208-
++ (lib.optionals pkgs.stdenv.isAarch64 [
209-
darwin.apple_sdk.frameworks.Metal
210-
darwin.apple_sdk.frameworks.CoreML
211-
]));
212-
# RUSTFLAGS = "-Zsanitizer=address";
213-
# ASAN_OPTIONS = "detect_leaks=1";
214-
};
226+
++ (lib.optionals pkgs.stdenv.isDarwin [
227+
darwin.apple_sdk.frameworks.OpenCL
228+
]
229+
++ (lib.optionals pkgs.stdenv.isAarch64 [
230+
darwin.apple_sdk.frameworks.Metal
231+
darwin.apple_sdk.frameworks.CoreML
232+
]))
233+
++ (lib.optionals pkgs.stdenv.isLinux [
234+
cargo-llvm-cov
235+
]);
236+
});
215237
};
216238
}
217239
)

‎src/backend.rs

+3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ impl Default for BackendConfig {
3737
}
3838

3939
#[derive(Debug, Clone, Copy)]
40+
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4041
pub enum PowerMode {
4142
Low,
4243
Normal,
@@ -98,6 +99,7 @@ impl FromStr for PrecisionMode {
9899
}
99100

100101
#[derive(Debug, Clone, Copy)]
102+
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
101103
pub enum MemoryMode {
102104
Low,
103105
Normal,
@@ -115,6 +117,7 @@ impl MemoryMode {
115117
}
116118

117119
#[derive(Debug, Clone, Copy)]
120+
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
118121
pub enum PrecisionMode {
119122
Normal = 0,
120123
High,

‎src/schedule.rs

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ use crate::{prelude::*, BackendConfig};
3434
/// The availability of certain variants depends on the features enabled during the build.
3535
/// For example, the `Metal` variant is only available if the `metal` feature is enabled.
3636
#[derive(Debug, Copy, Clone, Default, PartialEq, Eq)]
37+
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3738
pub enum ForwardType {
3839
All,
3940
#[default]

0 commit comments

Comments
 (0)
Please sign in to comment.