diff --git a/Cargo.toml b/Cargo.toml index ac6517e..49321f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ members = [ [workspace.package] version = "0.0.1" edition = "2024" -rust-version = "1.85" +rust-version = "1.96" license = "BSD-3-Clause" repository = "https://github.com/cinderblocks/libremetaverse" diff --git a/README.md b/README.md index 2e27945..a876c88 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,8 @@ All API crates expose the same typed `Error` for fallible unimplemented members; infallible shims use `libremetaverse_types::unimplemented_api!` so placeholders cannot look like successful behavior. +Building MetaCrate requires Rust 1.96 or newer. + ```sh cargo build --workspace cargo test --workspace --no-run @@ -41,6 +43,37 @@ python3 tools/check_test_parity.py python3 tools/audit_red_suite.py ``` +### Optional codec features + +The default build needs no system image-codec library. It includes the +project-owned TGA and DDS implementations; the default `dds-bc67` feature uses +the pure-Rust `bcdec_rs` dependency for BC6H and BC7. Build without BC6H/BC7 +support with `cargo build -p libremetaverse --no-default-features`. + +The currently available opt-in codec backends are: + +| Capability | Feature | Build command | External prerequisite | +| --- | --- | --- | --- | +| Raw J2K and JP2 decoding/encoding through OpenJPEG | `libremetaverse/jpeg2000` | `cargo build -p libremetaverse --features jpeg2000` | OpenJPEG 2.5.4 or newer | +| BMP, GIF, ICO, JPEG, PNG, WBMP, and WebP decoding through Skia | `libremetaverse-imaging-skia/skia` | `cargo build -p libremetaverse-imaging-skia --features skia` | A matching rust-skia binary cache, or the documented native source-build tools | + +Run their focused test suites with: + +```sh +cargo test -p libremetaverse-imaging --features jpeg2000 +cargo test -p libremetaverse-imaging-skia --features skia +``` + +`cargo build --workspace --all-features` enables both optional backends and +therefore requires both sets of native prerequisites. Platform installation, +offline-build, cache, and redistribution details are in the +[`OpenJPEG adapter guide`](crates/libremetaverse-openjpeg/README.md) and +[`Skia adapter guide`](crates/libremetaverse-imaging-skia/README.md). + +An independent optional `rust-j2k` backend is planned but has not been +implemented yet. There is deliberately no enablement command for it today; +the existing `jpeg2000` feature always selects the OpenJPEG backend. + `tests/upstream-tests.json` is the machine-readable NUnit parity catalog. Translated tests live in hand-written Rust files with the `parity-case` marker documented in `tests/PARITY.md`; `python3 tools/generate_surface.py --check` @@ -51,6 +84,8 @@ Running `cargo test --workspace` is intentionally red during the shim stage. ## Native implementation progress +### Milestone 04 + Milestone 04 is complete. `libremetaverse-types` now provides native UUID, incremental CRC-32, little-endian floating-point byte helpers, Vector2/Vector3/Vector3d/Vector4 arithmetic and serialization, Color4 color @@ -73,6 +108,9 @@ hierarchical token-bucket throttling are native Rust as well. Cache and bucket tests use injected monotonic clocks, and concurrency invariants run without sleep-based timing. All 45 Types and all 942 mapped members now resolve to native implementations; no generated Types shims remain. + +### Milestone 05 + Milestone 05 now has a native, format-neutral OSD value model with structural equality and hashing, permissive `LibreMetaverse` conversion defaults, explicit integer/date byte order, synchronized snapshot-based arrays and maps, and @@ -122,6 +160,9 @@ five parsers without an external fuzzing runtime. They cover truncation, tags, lengths, payloads, delimiters, nesting, entity rejection, contextual errors, and the parser resource limits. Every encoder sorts map keys where necessary, so serialization is deterministic across platforms. + +### Milestone 06 + Milestone 06 starts with a native `ManagedImage`: top-left-origin, byte-per-sample planar storage has an explicit width-byte row stride, with gray stored in the red plane and optional color, alpha, and bump planes. Checked @@ -178,6 +219,9 @@ baselines are documented in [`docs/imaging-meshing.md`](docs/imaging-meshing.md). The controlled audit aggregates every expected failure by standardized C# member ID and rejects unrelated fixture, assertion, compile, or symbol errors. + +### Milestone 07 + The deterministic, Rust-only source-data generator framework and its complete pinned input inventory are documented in [`codegen/README.md`](codegen/README.md). diff --git a/RUSTREWRITE.md b/RUSTREWRITE.md index 02af450..3e06508 100644 --- a/RUSTREWRITE.md +++ b/RUSTREWRITE.md @@ -165,7 +165,7 @@ crates under `types`, `structured_data`, and `imaging_abstractions`. Rendering, voice, RLV, LSL tools, and native Skia remain separate so users do not pay for large or platform-specific dependency trees unless requested. -The workspace uses Rust 2024 with MSRV 1.85. Generated code is committed so +The workspace uses Rust 2024 with MSRV 1.96. Generated code is committed so ordinary consumers do not need Python, .NET, Roslyn, or the upstream checkout. ## 3. Public API translation policy diff --git a/crates/libremetaverse-openjpeg/Cargo.toml b/crates/libremetaverse-openjpeg/Cargo.toml index 5067398..85fc7b7 100644 --- a/crates/libremetaverse-openjpeg/Cargo.toml +++ b/crates/libremetaverse-openjpeg/Cargo.toml @@ -2,7 +2,7 @@ name = "libremetaverse-openjpeg" version = "0.0.1" edition = "2024" -rust-version = "1.85" +rust-version = "1.96" license = "BSD-3-Clause" publish = false description = "Safe, bounded OpenJPEG 2.5.4 adapter for MetaCrate" diff --git a/tests/api-compile/Cargo.toml b/tests/api-compile/Cargo.toml index af79765..d900183 100644 --- a/tests/api-compile/Cargo.toml +++ b/tests/api-compile/Cargo.toml @@ -2,7 +2,7 @@ name = "metacrate-api-compile" version = "0.0.0" edition = "2024" -rust-version = "1.85" +rust-version = "1.96" license = "BSD-3-Clause" publish = false