-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCargo.toml
More file actions
111 lines (107 loc) · 5.59 KB
/
Copy pathCargo.toml
File metadata and controls
111 lines (107 loc) · 5.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# 根 workspace 清单(Part6 §3.9.1 / §8.2 C5 前置子任务)。
#
# 此前 src-tauri 与 crates/* 各为独立 package、无统一 workspace。为承接 §3.9 的插件平台分层
# (plugin-api 契约叶 crate + exotic-trust 验签叶 crate),先建 workspace 把现有 crate 纳入、
# 保持构建/测试全绿——这是「再加叶 crate」的前置子任务(§8.2 C5:先纳入现有、绿、再扩)。
#
# 🔴 members 显式逐一列出,禁用 `crates/*` glob(§3.9.1 P0-5):glob 会①命中无 Cargo.toml 的
# `crates/exotic-workers/` 目录致 `cargo metadata` 报错、②只展开一层、漏掉两层深的
# psd-worker/psd-probe(打穿 Part7 G3「psd-worker 测试可达」)。
# raw-worker/raw-probe 各持空 `[workspace]` 独立构建(MSVC 工具链限制,见各自 Cargo.toml)。
# 🔴 resolver 必须显式 "2":2021 edition 单 crate 默认用 resolver 2,但进 workspace 后根不声明会
# 回退 "1" → feature 统一行为变化。显式 "2" 保持现状。
[workspace]
resolver = "2"
members = [
"src-tauri",
"crates/exotic-protocol",
"crates/exotic-workers/psd-worker",
"crates/exotic-workers/psd-probe",
"crates/exotic-workers/ai-worker",
"crates/exotic-workers/enhance-worker",
"crates/exotic-workers/video-worker",
"crates/scrollery-plugin-api",
"crates/scrollery-exotic-trust",
"crates/scrollery-ai-core",
]
# ── 版本锚:单一事实源(Part7-T5 / Part7 §3.2 R3)────────────────────────────────────
# 升版只改这一处。传导链:src-tauri `version.workspace = true` 继承 →
# tauri.conf.json 不持有 version(Tauri codegen 回退 CARGO_PKG_VERSION)→ 产物版本;
# package.json 由 `node scripts/sync-version.mjs --write` 从此写回,CI --check + tag 一致性兜底。
# exotic-protocol/psd-worker 等内部组件不对外,保留自有版本(§3.2)。
[workspace.package]
version = "0.1.0"
# 第一方许可(2026-09-14 决议):主程序第一方源码统一 AGPL-3.0-only,不附链接例外;商业授权单独签署、
# 经明确授权后生效,不改变任何人依 AGPL 取得的权利(见 COMMERCIAL.md)。未来独立商业组件另定、不预承诺。
# 各 member 经 `license.workspace = true` 继承;独立 workspace(raw-worker/raw-probe)各自声明。
license = "AGPL-3.0-only"
# ── 构建 profile(仅 workspace 根生效;member 内的 [profile.*] 会被 cargo 忽略)──────────────────
# 自 src-tauri/Cargo.toml 迁入(连同其原注释)。
#
# 必须用默认的 `unwind`:使 catch_unwind 能拦截第三方图像编解码器在损坏/畸形文件上的 panic
# (见 src-tauri/src/thumbnail/generator.rs);`panic = "abort"` 下单张坏图会中止整个进程。
# psd-worker/psd-probe 亦依赖 unwind(每任务顶层 catch_unwind 拦 psd 对畸形输入的 panic)——
# 根 release 不设 abort,全 member 继承 unwind,故各 member 原 `panic = "unwind"` 冗余、已删。
# ── dev 解码 crate 单独提速(T16-R2 方案 B,2026-07-04)──────────────────────────────────────
# dev 默认 opt-0,纯 Rust 图像解码在 24MP 原图上退化到秒级/张(实测 face 批解码均值 2.5-4s/张),
# 是 face/AI 管线 dev 体感慢的主因(worker 化前走 WIC 原生解码,不吃 Rust 优化等级)。
# 仅覆盖外部解码/缩放/压缩链 crate:一次性多编译几分钟,换 dev 解码约一个量级提速;
# 本地 workspace crate 不覆盖,保持增量编译速度(全局 `"*"` 覆盖另议,留拍板)。
# 注:按名覆盖对锁文件中同名多版本(png/ndarray)全部生效;generic 代码在调用方 crate 单态化,
# 故纯 trait 桥 crate(num-traits 等)不列——列了也不生效。
[profile.dev.package.image]
opt-level = 2
[profile.dev.package.image-webp]
opt-level = 2
# webp/libwebp-sys(903a98f 引入的有损 WebP 编码主路径):libwebp 的 C 源码由 cc 按本包
# OPT_LEVEL 编译,dev 不覆盖则以 -O0 编译——缩略图编码单张耗时暴涨约一个量级,扫描期
# 缩略图 worker 占满核拖垮 enrich(「解析元数据」爬行,2026-07-10 真机回归)。
[profile.dev.package.webp]
opt-level = 2
[profile.dev.package.libwebp-sys]
opt-level = 2
[profile.dev.package.zune-jpeg]
opt-level = 2
[profile.dev.package.zune-core]
opt-level = 2
[profile.dev.package.png]
opt-level = 2
[profile.dev.package.gif]
opt-level = 2
[profile.dev.package.tiff]
opt-level = 2
[profile.dev.package.color_quant]
opt-level = 2
[profile.dev.package.weezl]
opt-level = 2
[profile.dev.package.fdeflate]
opt-level = 2
[profile.dev.package.flate2]
opt-level = 2
[profile.dev.package.miniz_oxide]
opt-level = 2
[profile.dev.package.adler2]
opt-level = 2
[profile.dev.package.crc32fast]
opt-level = 2
[profile.dev.package.moxcms]
opt-level = 2
[profile.dev.package.bytemuck]
opt-level = 2
[profile.dev.package.byteorder-lite]
opt-level = 2
[profile.dev.package.ndarray]
opt-level = 2
[profile.release]
lto = "thin"
opt-level = 3
strip = true
# ── 极致裁剪 Lite 的尺寸 profile(src-tauri §1.4.7)─────────────────────────────────────────────
# 体积优先:opt-level="z" + fat LTO + 单 codegen-unit。用法:tauri build --profile lite。
# ⚠️ 不可用 panic="abort":catch_unwind 依赖 unwind 拦截图像编解码器对坏图的 panic。
[profile.lite]
inherits = "release"
opt-level = "z"
lto = "fat"
codegen-units = 1
strip = true