build: speed up debug compile loop

- Drop libsqlite3-sys 'bundled' on Linux/macOS so the SQLite C source
  isn't recompiled every clean build; Windows keeps 'bundled' via a
  cfg(windows) target override.
- Switch opentelemetry-otlp from grpc-tonic to http-proto + reqwest-client.
  Removes the tonic + h2 + hyper-h2 stack from the build graph; reqwest
  was already a dependency. Updates otel.rs to call .with_http().
- Add [profile.dev] debug = "line-tables-only" to shrink linker work
  while keeping panics/backtraces useful.
- Add .cargo/config.toml selecting mold via gcc on x86_64-linux-gnu.
  Requires `apt install mold`. Other platforms use the default linker.
- cargo update: lockfile-only refresh of all minor/patch bumps within
  existing version constraints.

Cold debug build: ~1m 37s; touch-one-file rebuild: ~5s on Linux.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Cameron Cordes
2026-05-06 17:36:42 -04:00
parent 06fdcadf67
commit f73db58771
4 changed files with 1022 additions and 888 deletions

3
.cargo/config.toml Normal file
View File

@@ -0,0 +1,3 @@
[target.x86_64-unknown-linux-gnu]
linker = "/usr/bin/gcc"
rustflags = ["-C", "link-arg=-fuse-ld=mold"]

1887
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -9,6 +9,9 @@ edition = "2024"
[profile.release] [profile.release]
lto = "thin" lto = "thin"
[profile.dev]
debug = "line-tables-only"
[dependencies] [dependencies]
actix = "0.13.1" actix = "0.13.1"
actix-web = "4" actix-web = "4"
@@ -23,7 +26,7 @@ jsonwebtoken = "9.3.0"
serde = "1" serde = "1"
serde_json = "1" serde_json = "1"
diesel = { version = "2.2.10", features = ["sqlite"] } diesel = { version = "2.2.10", features = ["sqlite"] }
libsqlite3-sys = { version = "0.35", features = ["bundled"] } libsqlite3-sys = "0.35"
diesel_migrations = "2.2.0" diesel_migrations = "2.2.0"
chrono = "0.4" chrono = "0.4"
clap = { version = "4.5", features = ["derive"] } clap = { version = "4.5", features = ["derive"] }
@@ -41,9 +44,9 @@ prometheus = "0.13"
lazy_static = "1.5" lazy_static = "1.5"
anyhow = "1.0" anyhow = "1.0"
rand = "0.8.5" rand = "0.8.5"
opentelemetry = { version = "0.31.0", features = ["default", "metrics", "tracing"] } opentelemetry = { version = "0.31.0", features = ["metrics", "trace"] }
opentelemetry_sdk = { version = "0.31.0", features = ["default", "rt-tokio-current-thread", "metrics"] } opentelemetry_sdk = { version = "0.31.0", features = ["rt-tokio-current-thread", "metrics", "logs"] }
opentelemetry-otlp = { version = "0.31.0", features = ["default", "metrics", "tracing", "grpc-tonic"] } opentelemetry-otlp = { version = "0.31.0", default-features = false, features = ["trace", "metrics", "logs", "http-proto", "reqwest-client"] }
opentelemetry-stdout = "0.31.0" opentelemetry-stdout = "0.31.0"
opentelemetry-appender-log = "0.31.0" opentelemetry-appender-log = "0.31.0"
tempfile = "3.20.0" tempfile = "3.20.0"
@@ -63,3 +66,8 @@ image_hasher = "3.0"
bk-tree = "0.5" bk-tree = "0.5"
async-trait = "0.1" async-trait = "0.1"
indicatif = "0.17" indicatif = "0.17"
# Windows lacks system sqlite3, so re-enable the bundled C build there.
# Linux/macOS use the system library (faster builds, smaller binary).
[target.'cfg(windows)'.dependencies]
libsqlite3-sys = { version = "0.35", features = ["bundled"] }

View File

@@ -24,7 +24,7 @@ pub fn init_tracing() {
.build(); .build();
let span_exporter = opentelemetry_otlp::SpanExporter::builder() let span_exporter = opentelemetry_otlp::SpanExporter::builder()
.with_tonic() .with_http()
.with_endpoint(std::env::var("OTLP_OTLS_ENDPOINT").unwrap()) .with_endpoint(std::env::var("OTLP_OTLS_ENDPOINT").unwrap())
.build() .build()
.unwrap(); .unwrap();
@@ -40,7 +40,7 @@ pub fn init_tracing() {
#[allow(dead_code)] #[allow(dead_code)]
pub fn init_logs() { pub fn init_logs() {
let otlp_exporter = opentelemetry_otlp::LogExporter::builder() let otlp_exporter = opentelemetry_otlp::LogExporter::builder()
.with_tonic() .with_http()
.with_endpoint(std::env::var("OTLP_OTLS_ENDPOINT").unwrap()) .with_endpoint(std::env::var("OTLP_OTLS_ENDPOINT").unwrap())
.build() .build()
.unwrap(); .unwrap();