Raw dependency graph data (JSON)
tensorstore
Author: Ludovic HENRY ludovic.henry@qti.qualcomm.com
Date: 2026-08-29
Readiness: orange
Scope: RISC-V (riscv64/linux) support status for tensorstore
Audience: Technical leadership, resource allocation strategy
Verification policy: Every claim is cross-referenced to a primary upstream source. Items that could not be verified against a second source are marked [NEEDS VERIFICATION].
1. Project Overview
TensorStore is a C++17/Python library for reading and writing large multidimensional arrays to a variety of storage backends (local filesystem, Google Cloud Storage, Amazon S3, Zarr, N5, neuroglancer_precomputed, JPEG/PNG/AVIF/WebP image tiles, and others). Its primary use case is high-throughput, chunked I/O for computational neuroscience and ML training data pipelines.
The project is maintained exclusively by Google employees. The public repository at google/tensorstore is a read-only Copybara export of an internal Google monorepo. All commits are either attributed to jbms@google.com (Jeremy Maitin-Shepard, original architect, 725 commits), lar@google.com (Laramie Leavitt, dominant current maintainer, 870 commits), or synced from internal Google tooling via Tensorstore Team <no-reply@google.com>. There are no MAINTAINERS, CODEOWNERS, or OWNERS files. External contributors must sign a Google CLA, and their contributions must be merged internally first. The project has no foundation affiliation (CNCF, Apache, Linux Foundation).
Google LLC is a RISE Premier Member, but TensorStore itself is not listed as a RISE project and does not appear in RISE working group documentation or the RISE Python wheel builder.
The project has no documented platform tier policy and no PLATFORMS.md. Its community stance on new architecture ports is not documented. Given the Copybara-sync model, any RISC-V enablement would require Google employee sponsorship or a demonstrated internal Google need.
2. Port History and Upstreaming Timeline
| Date | Event | Source |
|---|---|---|
| - | No RISC-V issues, PRs, or commits have ever been filed | GitHub issues search – 0 results |
| - | No RISC-V code exists in the repository | GitHub code search for “riscv”, “riscv64”, “rvv”, “__riscv” – 0 results across 2,696 files |
| - | No RISC-V CI runner added | build.yml – riscv64 absent |
| - | Not present in RISE Python wheel builder | RISE wheel builder – 78 packages listed, tensorstore absent |
There is no RISC-V port history. No contributor has initiated a port, and no tracking issue exists.
3. Upstream Support Tier
TensorStore has no formal tier policy. Support is inferred from CI coverage and published artifacts.
| Item | amd64 (x86_64) | arm64 (aarch64) | riscv64 |
|---|---|---|---|
| CI builds | Yes (ubuntu-latest) |
Yes (arm-ubuntu-arm-22.04-8core) |
No |
| CI tests run | Yes | Yes | No |
| PyPI wheel published | Yes (manylinux_2_27_x86_64) |
Yes (manylinux_2_27_aarch64) |
No |
| macOS native binary | Yes | Yes | No |
| Windows binary | Yes | No | No |
| Debian package | Data not available: no Debian package for any architecture | No | No |
| Arch Linux RISC-V | N/A | N/A | No (absent from archriscv.felixc.at) |
| RISE wheels | N/A | N/A | No (absent from wheel builder) |
Sources: build.yml, PyPI tensorstore 0.1.85
4. Technical Architecture and RISC-V-Specific Subsystems
TensorStore has no SIMD dispatch layer, no JIT backend, no hand-written assembly, and no architecture-specific intrinsics in its first-party C++ code. All 2,696 files were scanned; zero files contain __riscv, riscv64, rvv, vfloat32m1_t, __aarch64__, or __x86_64__ architecture guards. The project has no arch/ directory and no .S or .s assembly files.
All architecture-specific material is confined to bundled third-party codecs in third_party/. The only component with riscv64 relevance is the bundled AOM AV1 codec.
| Component | Role | amd64 | arm64 | riscv64 |
|---|---|---|---|---|
| TensorStore core (I/O, indexing, transactions) | Array read/write, chunk management | Scalar C++ | Scalar C++ | Scalar C++ (compiles; no SIMD) |
| libjpeg-turbo (bundled) | JPEG codec | NASM AVX2/SSE2 | NEON intrinsics | Scalar C (WITH_SIMD undefined) |
| blake3 (bundled) | Content-addressable hashing | AVX2/AVX512/SSE ASM | NEON intrinsics | Scalar C |
libaom AV1 codec (bundled, third_party/org_aomedia_aom) |
AV1 encode/decode | x86_64 + x86_64_avx2 generated configs | arm64 generated config | Missing – riscv64 explicitly excluded via _PATTERN_UNSUPPORTED = ["**/riscv/**", "**/*_rvv*"]; falls back to generic config |
| dav1d (via dependency) | AV1 decode | SIMD optimized | SIMD optimized | Scalar fallback |
| libwebp (via dependency) | WebP codec | SIMD optimized | SIMD optimized | Scalar C |
| crc32c (via dependency) | Checksums | Hardware CRC32C (SSE4.2) | Hardware CRC32C (ARM) | Software fallback |
Sources: libaom.BUILD.bazel, blake3.BUILD.bazel, GitHub code search for riscv across repository
5. Build System, Cross-Compilation, and Toolchain
Primary build system: Bazel (via bundled Bazelisk). CMake support is present but explicitly marked experimental (“This is still very much a work in progress; It is not yet expected to build”) and is generated from Bazel rules via tools/cmake/bazel_to_cmake/.
Compiler requirements (from docs/installation.rst):
- GCC >= 12 or Clang >= 16 (Linux)
- C++17 mandatory (enforced via
--cxxopt=-std=c++17in.bazelrc) - Python >= 3.11
- CMake >= 3.24 (for CMake path)
riscv64 build procedure (untested, inferred from build system analysis):
Bazel path on a native riscv64 machine:
python3 -m pip install .
or
python3 bazelisk.py build //...
The .bazelrc build:linux --config=gcc_or_clang applies automatically. No arch-specific Bazel flags are needed because libjpeg-turbo and blake3 have //conditions:default C fallbacks.
CMake cross-compilation path:
mkdir build && cd build
cmake .. -GNinja \
-DCMAKE_C_COMPILER=riscv64-linux-gnu-gcc \
-DCMAKE_CXX_COMPILER=riscv64-linux-gnu-g++ \
-DTENSORSTORE_USE_SYSTEM_JPEG=ON \
-DTENSORSTORE_USE_SYSTEM_LIBAOM=ON \
-DTENSORSTORE_USE_SYSTEM_DAV1D=ON
The USE_SYSTEM_*=ON flags avoid NASM dependencies. NASM is only used for x86_64 ASM targets and would not be needed on riscv64, but the CMake configure step may still require NASM in PATH unless system libs are used.
Platform mapping gap: tools/bazel_platforms/platform_mappings and platforms.py enumerate supported processors as: AMD64, X86, ARM64, aarch64, arm64, x86_64, i386, i686, wasm32, wasm64, ppc64, ppc64le, armv7l. riscv64 is absent. A CMake/Bazel riscv64 platform entry would need to be added for cross-compilation configurations.
QEMU: No QEMU configuration exists in the repository. No Dockerfiles for riscv64 are present. cibuildwheel is configured for CIBW_MANYLINUX_X86_64_IMAGE and CIBW_MANYLINUX_AARCH64_IMAGE only; CIBW_MANYLINUX_RISCV64_IMAGE is not set.
Known build failures on riscv64: None documented, because no build has been attempted upstream. No ppc64le build CI exists either, though issue #146 (open) shows that ppc64le required Bazel patches – this is the closest analogue to a non-x86/ARM port attempt, and it suggests riscv64 would similarly require minor build system changes [NEEDS VERIFICATION].
Sources: build.yml, docs/installation.rst, platforms.py, GitHub issue #146
6. Feature Coverage and Gap Analysis vs arm64 and amd64
| Feature | amd64 | arm64 | riscv64 |
|---|---|---|---|
| Core array I/O (Zarr, N5, HDF5, neuroglancer) | Full | Full | Expected full (scalar C++, no arch guards) |
| JPEG encode/decode | SIMD-accelerated (AVX2/SSE2) | SIMD-accelerated (NEON) | Scalar C (functional, slower) |
| AV1 encode (libaom) | SIMD-accelerated | SIMD-accelerated | Generic config only (functional, slower) |
| AV1 decode (dav1d) | SIMD-accelerated | SIMD-accelerated | Scalar fallback |
| WebP codec | SIMD-accelerated | SIMD-accelerated | Scalar C |
| BLAKE3 hashing | AVX2/AVX512/SSE | NEON | Scalar C (functional, slower throughput) |
| CRC32C checksum | Hardware (SSE4.2) | Hardware (ARM CRC) | Software fallback |
| gRPC transport (GCS, S3) | Full | Full | Functional (gRPC builds on riscv64; no PyPI riscv64 wheel – see Sec. 9) |
| Python wheel (pip install) | Yes (PyPI manylinux) | Yes (PyPI manylinux) | No (must build from source) |
| Free-threading (Python 3.13t) | Not yet (issue #218 open) | Not yet | Not yet |
Functional gaps on riscv64: None expected for the core library. The AV1 and image codecs will work via scalar/generic paths. The primary practical gap is the absence of a prebuilt wheel, requiring source compilation.
Performance gaps: JPEG decode, AV1 encode/decode, WebP, and BLAKE3 hashing will run at scalar-only throughput on riscv64. For workloads that are I/O-bound (the common case for a storage library), this may be acceptable. For image-heavy pipelines, the codec performance gap vs arm64 is material.
Floating-point semantics: Data not available: no riscv64-specific floating-point issues were found in the issue tracker.
7. CI/CD Infrastructure
| CI item | amd64 | arm64 | riscv64 |
|---|---|---|---|
| GitHub Actions runner | ubuntu-latest |
arm-ubuntu-arm-22.04-8core (native) |
None |
| Builds on CI | Yes | Yes | No |
| Tests run on CI | Yes | Yes | No |
| Wheel published from CI | Yes | Yes | No |
| RISE runners | No | No | No |
| QEMU emulation | No | No | No |
The sole CI configuration is .github/workflows/build.yml and .github/workflows/docs.yml. No .gitlab-ci.yml, Jenkinsfile, or .cirrus.yml exist. Neither workflow file contains any occurrence of “riscv”, “riscv64”, or “qemu”.
8. Distribution and Release Status
PyPI (tensorstore 0.1.85, 25 files):
tensorstore-0.1.85-cp311-cp311-manylinux_2_27_x86_64.whltensorstore-0.1.85-cp311-cp311-manylinux_2_27_aarch64.whl- macOS x86_64 and arm64 variants for cp311-cp313
win_amd64variants- Source tarball
- riscv64: no wheel published
Debian: Package does not exist in Debian for any architecture. packages.debian.org search returns no results; tracker.debian.org/pkg/tensorstore returns 404.
Arch Linux RISC-V: Absent from archriscv.felixc.at.
RISE wheel builder: Absent from the RISE Python wheel builder (78 packages listed; tensorstore not among them).
To obtain a working binary on riscv64: A user must build from source on a native riscv64 machine or via QEMU chroot using python3 -m pip install . --no-binary :all: or python3 bazelisk.py build //.... No binary shortcut exists through any channel.
Sources: PyPI tensorstore files, RISE wheel builder
9. Dependencies
The table below covers all bundled and linked dependencies with JIT, SIMD, cryptographic, compression, or numeric roles. riscv64 status is drawn from research findings.
| Dependency | Role | riscv64 build | riscv64 test | riscv64 release | Open issues |
|---|---|---|---|---|---|
| abseil-cpp | Base containers, hash, CRC, sync | Builds (GCC 11 linker issue with shared libs: #1702) | 2 SEGFAULT failures on Debian unstable (#2002, open) | No prebuilt | #1702 (linker, open), #2002 (SEGFAULT, open) |
| BLAKE3 | Content-addressable hashing | Builds (scalar) | Passes | No prebuilt | #484 (RVV request, performance only) |
| BoringSSL | TLS/crypto for gRPC | Builds | Passes | Embedded build | No open riscv64 issues |
| brotli | Compression codec | Builds | Passes | No prebuilt riscv64 wheel | No open issues |
| bzip2 | Compression codec | Builds | Passes | Distro-packaged | No open issues |
| c-ares | Async DNS resolver (gRPC dep) | Builds | Passes | Distro-packaged | No open issues |
| c-blosc | Block compression (Zarr/N5) | Builds (scalar; AVX2/SSE4 N/A) | Passes | No riscv64 release | No open issues; no RVV path |
| crc32c | CRC32C checksum | Builds (software fallback) | Passes | No prebuilt | No open issues |
| curl/libcurl | HTTP(S) client (GCS, S3, HTTP KV) | Builds | Passes | Distro-packaged | No open issues |
| dav1d | AV1 decode | Builds (scalar fallback) | Passes | No prebuilt | No open issues |
| gRPC | RPC framework (GCS, gRPC KV) | Builds; RISE publishes manylinux riscv64 wheels (1.72-1.76 tested) | Passes (#37791 SIGILL closed) | No upstream PyPI riscv64 wheel (#41591 open) | #41591 (no PyPI wheel) |
| libaom | AV1 encode | Builds (generic config) | Passes | No prebuilt | No open riscv64 issues |
| libavif | AVIF codec | Builds | Passes | No prebuilt | No open issues |
| libjpeg-turbo | JPEG codec | Builds (scalar; riscv64 binaries added per #885) | Passes | riscv64 binaries available | No blocking issues |
| libpng | PNG codec | Builds | Passes | Distro-packaged | No open issues |
| libtiff | TIFF codec | Builds | Passes | Distro-packaged | No open issues |
| libwebp | WebP codec | Builds (scalar fallback) | Passes | No prebuilt | No open issues |
| libyuv | YUV conversion (SIMD) | Builds (scalar) | Passes | No prebuilt | No open issues; no RVV path |
| LZ4 | Fast compression | Builds | Passes | Distro-packaged | #1633 (RVV optimization, performance only) |
| nghttp2 | HTTP/2 (gRPC dep) | Builds | Passes | Distro-packaged | No open issues |
| nlohmann/json | JSON parsing | Builds (header-only) | Passes | N/A | No open issues |
| Protocol Buffers | Serialization | Builds (#12266 closed) | Passes | No prebuilt protoc binary (#17798 open) | #17798 (no protoc prebuilt) |
| re2 | Regex engine | Builds | Passes | No prebuilt | No open issues |
| riegeli | Streaming serialization | Builds | Passes | No prebuilt | No open issues |
| aws-s2n-tls | TLS (AWS SDK dep) | Builds | Passes | No prebuilt | No open issues |
| aws-c-{common,io,http,cal,auth} | AWS SDK C components (S3) | Builds | Passes | No prebuilt | No open issues |
| snappy | Fast compression | Builds | Passes | No prebuilt | No open issues |
| xz/liblzma | LZMA compression | Builds | Passes | Distro-packaged | No blocking issues (#146 closed) |
| zlib | Deflate compression | Builds | Passes | Distro-packaged | No open issues |
| zstd | Fast compression | Builds (#3134 closed) | Passes | No prebuilt | No blocking issues |
| pybind11 | Python/C++ bindings | Builds | Passes | No prebuilt | No open issues |
Highest-priority open dependency issues:
-
abseil-cpp #2002 (open): Two test SEGFAULTs (
absl_hashtablez_sampler_test,absl_cordz_sample_token_test) on Debian unstable riscv64, release 20260107.0. TensorStore uses Abseil containers and Cord extensively; this is a correctness concern until resolved. -
abseil-cpp #1702 (open): Cross-compilation linker error (
__atomic_exchange_1undefined) when building shared libs with GCC 11 Buildroot. Workaround: use GCC >= 12 or static builds. -
gRPC #41591 (open): No upstream PyPI riscv64 wheel. RISE provides tested wheels (1.72-1.76) but not on PyPI. Users of TensorStore’s gRPC-based transports must build gRPC from source or use RISE wheels.
-
Protocol Buffers #17798 (open): No prebuilt
protocbinary for riscv64, which blocks cross-compilation workflows relying on prebuilt protoc. Native builds work.
11. Known Bugs and Active Issues
No riscv64-specific bugs exist in the tensorstore issue tracker. The following general open issues are reproduced for completeness.
| ID | Title | Status | Severity | Notes | |
|---|---|---|---|---|---|
| #290 | Intermittent ALREADY_EXISTS failure on GCS with create | delete_existing | Open | Medium | Not architecture-specific |
| #282 | Issues creating neuroglancer dataset from schema | Open | Medium | Not architecture-specific | |
| #241 | Zarr v3 struct support | Open | Low | Feature gap, not a bug | |
| #231 | Performance drop on 1D Zarr file (1.8x slower than 2D reshape) | Open | Low | x86_64 benchmark data only; not architecture-specific | |
| #218 | Python 3.13t free-threading wheels not shipped | Open | Low | Affects all platforms | |
| #195 | Read speeds decrease 2x with fewer parallel processes | Open | Low | Multi-node GPU cluster; not architecture-specific | |
| #150 | Transactional/ACID semantics feature gap | Open | Medium | Not architecture-specific | |
| #146 | Building on ppc64le requires Bazel patches | Open | Medium | Closest analogue to riscv64 port attempt; no riscv64 equivalent started | |
| #114 | S3 support umbrella | Open | Medium | Not architecture-specific |
Correctness bugs: None confirmed on riscv64. The abseil-cpp #2002 SEGFAULTs (in a dependency, not tensorstore itself) are the nearest correctness risk.
12. Objections and Upstream Blockers
Organizational blocker: TensorStore is a Copybara-synced mirror of a Google-internal repository. External contributions require a Google CLA and must be merged by Google engineers internally before appearing in the public mirror. This means a RISC-V port contributed externally would require a Google engineer to champion it internally. There is no evidence that Google has a current interest in riscv64 for TensorStore.
No stated objections: The project has no documented stance against new architecture ports. No issue has been filed to request RISC-V support, so there has been no opportunity for Google maintainers to state support or opposition.
Acceptance probability: Low without a Google-internal driver. Medium if a major Google customer or internal team requires riscv64 tensorstore (e.g., for RISC-V ML inference data pipelines).
Technical blockers: None identified that would prevent a build. The platform mapping (platforms.py) needs a riscv64 entry. The libaom bundled codec needs a riscv64 generated config or must be excluded/replaced with a system library. These are minor engineering tasks (days, not weeks).
13. Readiness Assessment
- Color: orange (no upstream riscv64 CI, not distro-packaged on riscv64)
- Release provider: none
Justification: TensorStore has no riscv64 CI, no riscv64 prebuilt binary in any distribution channel (PyPI, Debian, Arch, RISE wheel builder), and zero RISC-V activity in its issue tracker or codebase. The project explicitly excludes riscv64 from the bundled AOM AV1 codec build targets. Confirmed via build.yml and PyPI release 0.1.85.
Pending work that could change the grade: None underway. A RISE wheel builder addition (requiring a working native build + cibuildwheel riscv64 config) would move the grade to yellow or blue depending on whether tests pass. Resolving abseil-cpp #2002 would be a prerequisite for a clean blue grade.
14. Investment Analysis
RISE has no existing investment in tensorstore. No duplication risk with any RISE-funded work.
14.1 Functional Enablement
The primary functional gap is the absence of a riscv64 build path, platform mapping, and prebuilt wheel. The core library is expected to build cleanly on riscv64 once minor platform configuration is added. The libaom bundled codec requires either a riscv64 generated config (similar to the existing arm64 config) or a system-libaom override.
Work items:
- Add
riscv64toplatforms.pyprocessor mapping (Bazel + CMake) - Add
CIBW_MANYLINUX_RISCV64_IMAGEto cibuildwheel configuration - Generate or add libaom riscv64 config (or switch to
USE_SYSTEM_LIBAOM=ONfor initial enablement) - Verify build completes on native riscv64 hardware (Debian Unstable or Ubuntu 24.04 riscv64)
- Resolve abseil-cpp #2002 (SEGFAULT in tests) – external dependency, file upstream bug or apply workaround
14.2 Performance Optimization
TensorStore is a storage I/O library. Performance-critical operations are:
- JPEG/AV1/WebP codec throughput (currently scalar on riscv64)
- BLAKE3 hash throughput (currently scalar; RVV path tracked by BLAKE3 #484)
- CRC32C (software fallback on riscv64)
For storage I/O workloads, throughput is typically network/disk-bound rather than codec-bound. RVV optimization of these codecs is the responsibility of the respective upstream projects (libjpeg-turbo, dav1d/libaom, BLAKE3) and is not tensorstore’s to implement.
No first-party SIMD or performance optimization work is required in tensorstore itself.
14.3 CI/CD Infrastructure
Add a riscv64 runner (QEMU or native) to build.yml. RISE provides GitHub Actions runners for riscv64 that could be used here if Google is receptive. This requires Google maintainer approval given the Copybara model.
14.4 Ecosystem Enablement
TensorStore does not have a plugin or extension ecosystem. Users of TensorStore on riscv64 may also need gRPC (covered by RISE wheel builder) and Protocol Buffers (protoc prebuilt blocked by #17798). These are dependency-level gaps, not tensorstore-level.
14.5 Summary Table
| Area | Work Item | Effort (person-weeks) | Owner | Priority |
|---|---|---|---|---|
| Functional | Add riscv64 to platforms.py and cibuildwheel config | 1 | Qualcomm or RISE contributor | High |
| Functional | Generate libaom riscv64 config or switch to system libaom | 1 | Qualcomm or RISE contributor | High |
| Functional | Verify build and test pass on native riscv64 | 1 | Qualcomm or RISE contributor | High |
| Functional | Resolve abseil-cpp #2002 SEGFAULTs (upstream dependency) | 2 | abseil-cpp maintainers | High |
| Functional | Add riscv64 wheel to PyPI release (coordinate with Google) | 1 | Google maintainer sign-off required | High |
| CI/CD | Add riscv64 CI runner to build.yml | 1 | Google maintainer + RISE runner | Medium |
| Performance | RVV BLAKE3 path (upstream blake3 #484) | 3 | BLAKE3 community / RISE | Low |
| Performance | RVV libjpeg-turbo, dav1d, libwebp paths | 4-8 (per codec) | Respective upstream projects | Low |
15. Updates
No updates yet – initial report dated 2026-08-29.
16. References
- google/tensorstore repository
- TensorStore homepage
- build.yml CI workflow
- docs.yml CI workflow
- libaom.BUILD.bazel (riscv64 exclusion)
- blake3.BUILD.bazel
- platforms.py (Bazel/CMake processor mapping)
- PyPI tensorstore 0.1.85 release files
- RISE Python wheel builder
- abseil-cpp #2002 (SEGFAULT on riscv64)
- abseil-cpp #1702 (linker error riscv64)
- gRPC #41591 (no PyPI riscv64 wheel)
- Protocol Buffers #17798 (no protoc prebuilt for riscv64)
- BLAKE3 #484 (RVV SIMD request)
- LZ4 #1633 (RVV optimization proposal)
- tensorstore issue #146 (ppc64le build)
- tensorstore issue #218 (Python 3.13t free-threading)
- tensorstore issue #231 (1D Zarr performance)
- tensorstore issue #290 (GCS ALREADY_EXISTS)
- Arch Linux RISC-V package listing
- RISE project homepage