8facd237d5
- Replaced the napi-cli/cargo-zigbuild/cargo-xwin/sccache build path with Bazel: rules_rust + crate_universe over Cargo.lock, hermetic zig cc toolchains (linux-gnu pinned to glibc 2.17, linux-musl), host Xcode for darwin, and a repo-local hermetic clang-cl + llvm-ml + xwin toolchain for windows-msvc (bazel/toolchains/msvc). - All eight shipped addons build as //:natives-<target> via the release transition in bazel/defs.bzl (opt, thin LTO, cgu=16, stripped, canonical .node naming); scripts/bazel-natives.ts is the single driver for local dev and CI. - Rust validation moved to bazel test + clippy aspects (strict workspace policy for opted-in crates, default lints elsewhere, mirroring cargo semantics) and the rustfmt aspect; cargo stays as the dev-iteration surface, with brush-core/brush-builtins promoted to workspace members and excluded from cargo dev tasks to keep their historical scope. - CI caches through an in-cluster bazel-remote action cache (TLS + basic auth, cluster-internal only); GitHub-hosted runners never touch the infrastructure and use an actions/cache-backed disk cache instead. - Deleted the hand-rolled caching machinery: ci-target-cache, ci-native-artifact-cache, ci-build-native, native-source-hash, find-native-artifacts, restore-linux-native, native-prewarm workflow, ensure-* toolchain actions, and all sccache/Swatinem wiring. - Warm native rebuilds drop from ~20 minutes to seconds; a cold client with a warm remote cache rebuilds the linux x64 pair in ~2.5 minutes.
67 lines
2.7 KiB
Python
67 lines
2.7 KiB
Python
load("@crates//:defs.bzl", "aliases", "all_crate_deps")
|
|
load("@rules_rust//rust:defs.bzl", "rust_shared_library", "rust_test")
|
|
|
|
package(default_visibility = ["//visibility:public"])
|
|
|
|
exports_files(["Cargo.toml"])
|
|
|
|
# The NAPI cdylib. build.rs is intentionally not wired in: its only effects are
|
|
# napi_build::setup() link args (hardcoded in linkopts below — see napi-build
|
|
# src/lib.rs) and a vestigial no-op filter-defs scan that belongs to pi-shell.
|
|
# TypeScript typedef regeneration stays a cargo-side dev flow
|
|
# (`bun --cwd packages/natives run build:bindings`); index.js/index.d.ts are
|
|
# committed, so artifact builds never need the napi CLI.
|
|
rust_shared_library(
|
|
name = "pi_natives",
|
|
srcs = glob(["src/**/*.rs"]),
|
|
aliases = aliases(),
|
|
compile_data = glob([
|
|
"src/syntaxes/*.sublime-syntax",
|
|
"src/fonts/*",
|
|
]),
|
|
crate_features = [],
|
|
edition = "2024",
|
|
proc_macro_deps = all_crate_deps(proc_macro = True),
|
|
rustc_flags = select({
|
|
"//bazel/variants:baseline": ["-Ctarget-cpu=x86-64-v2"],
|
|
"//bazel/variants:modern": ["-Ctarget-cpu=x86-64-v3"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
# napi_build::setup() equivalents (build.rs is not wired into Bazel):
|
|
# napi addons resolve Node symbols at load time on macOS; DF_1_NODELETE
|
|
# keeps the addon resident across Worker teardown on linux-gnu (napi
|
|
# emits it for gnu; harmless under musl's loader). windows-msvc needs
|
|
# nothing — napi-sys v3 imports node.exe via raw-dylib.
|
|
"@platforms//os:macos": ["-Clink-arg=-Wl,-undefined,dynamic_lookup"],
|
|
"@platforms//os:linux": ["-Clink-arg=-Wl,-z,nodelete"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
# musl defaults to +crt-static, under which rustc silently emits no
|
|
# cdylib at all; napi musl addons have always linked the dynamic CRT.
|
|
"//bazel/triples:x86_64-unknown-linux-musl": ["-Ctarget-feature=-crt-static"],
|
|
"//bazel/triples:aarch64-unknown-linux-musl": ["-Ctarget-feature=-crt-static"],
|
|
"//conditions:default": [],
|
|
}),
|
|
version = "17.1.5",
|
|
deps = all_crate_deps(normal = True) + [
|
|
"//crates/pi-ast",
|
|
"//crates/pi-iso",
|
|
"//crates/pi-shell",
|
|
"//crates/pi-uutils-ctx",
|
|
"//crates/pi-walker",
|
|
],
|
|
)
|
|
|
|
rust_test(
|
|
name = "pi_natives_test",
|
|
crate = ":pi_natives",
|
|
edition = "2024",
|
|
proc_macro_deps = all_crate_deps(proc_macro_dev = True),
|
|
deps = all_crate_deps(normal_dev = True) + [
|
|
# dev-dependency on every platform (desktop_x11's pure keysym helpers
|
|
# compile under cfg(test) everywhere), but cargo-bazel folds it into
|
|
# the linux-only normal dep entry; restore it for the test build.
|
|
"@crates//:xkeysym",
|
|
],
|
|
)
|