Skip to content

Require CMake 4.0#2078

Merged
rapids-bot[bot] merged 3 commits into
NVIDIA:mainfrom
KyleFromNVIDIA:cmake-4.0
May 16, 2026
Merged

Require CMake 4.0#2078
rapids-bot[bot] merged 3 commits into
NVIDIA:mainfrom
KyleFromNVIDIA:cmake-4.0

Conversation

@KyleFromNVIDIA

Copy link
Copy Markdown
Member

@coderabbitai

coderabbitai Bot commented May 13, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 2b2feb48-9b86-45b8-9739-8547040d9b61

📥 Commits

Reviewing files that changed from the base of the PR and between c393026 and 35eefef.

📒 Files selected for processing (19)
  • conda/environments/all_cuda-129_arch-aarch64.yaml
  • conda/environments/all_cuda-129_arch-x86_64.yaml
  • conda/environments/all_cuda-132_arch-aarch64.yaml
  • conda/environments/all_cuda-132_arch-x86_64.yaml
  • conda/environments/bench_ann_cuda-129_arch-aarch64.yaml
  • conda/environments/bench_ann_cuda-129_arch-x86_64.yaml
  • conda/environments/bench_ann_cuda-132_arch-aarch64.yaml
  • conda/environments/bench_ann_cuda-132_arch-x86_64.yaml
  • conda/environments/go_cuda-129_arch-aarch64.yaml
  • conda/environments/go_cuda-129_arch-x86_64.yaml
  • conda/environments/go_cuda-132_arch-aarch64.yaml
  • conda/environments/go_cuda-132_arch-x86_64.yaml
  • conda/environments/rust_cuda-129_arch-aarch64.yaml
  • conda/environments/rust_cuda-129_arch-x86_64.yaml
  • conda/environments/rust_cuda-132_arch-aarch64.yaml
  • conda/environments/rust_cuda-132_arch-x86_64.yaml
  • dependencies.yaml
  • python/cuvs/pyproject.toml
  • python/libcuvs/pyproject.toml
✅ Files skipped from review due to trivial changes (13)
  • conda/environments/go_cuda-132_arch-x86_64.yaml
  • conda/environments/rust_cuda-132_arch-aarch64.yaml
  • conda/environments/go_cuda-129_arch-aarch64.yaml
  • conda/environments/rust_cuda-132_arch-x86_64.yaml
  • conda/environments/go_cuda-132_arch-aarch64.yaml
  • python/cuvs/pyproject.toml
  • conda/environments/rust_cuda-129_arch-x86_64.yaml
  • conda/environments/bench_ann_cuda-129_arch-aarch64.yaml
  • conda/environments/all_cuda-132_arch-aarch64.yaml
  • conda/environments/rust_cuda-129_arch-aarch64.yaml
  • conda/environments/go_cuda-129_arch-x86_64.yaml
  • conda/environments/bench_ann_cuda-132_arch-aarch64.yaml
  • conda/environments/all_cuda-132_arch-x86_64.yaml
🚧 Files skipped from review as they are similar to previous changes (6)
  • conda/environments/all_cuda-129_arch-aarch64.yaml
  • conda/environments/bench_ann_cuda-129_arch-x86_64.yaml
  • dependencies.yaml
  • conda/environments/bench_ann_cuda-132_arch-x86_64.yaml
  • python/libcuvs/pyproject.toml
  • conda/environments/all_cuda-129_arch-x86_64.yaml

📝 Walkthrough

Summary by CodeRabbit

  • Chores
    • Raised the minimum CMake requirement from 3.30.4 to 4.0 across build configurations, conda environment specs, Docker build defaults, and project build metadata and documentation.

Walkthrough

This PR updates the minimum required CMake from 3.30.4 to 4.0 across CMake files, conda environment YAMLs, conda build recipes, dependency manifests, Python build configs, and Docker build docs.

Changes

CMake minimum version bump to 4.0

Layer / File(s) Summary
CMake build system files
cmake/RAPIDS.cmake, c/CMakeLists.txt, cpp/CMakeLists.txt, examples/c/CMakeLists.txt, examples/cpp/CMakeLists.txt, java/internal/CMakeLists.txt, python/cuvs/CMakeLists.txt, python/libcuvs/CMakeLists.txt
All CMakeLists and cmake/RAPIDS.cmake update cmake_minimum_required(VERSION ...) from 3.30.4 to 4.0. cmake/RAPIDS.cmake also updates the SPDX copyright year range.
Conda environment specifications
conda/environments/*_cuda-129_arch-*.yaml, conda/environments/*_cuda-132_arch-*.yaml
All 16 conda environment YAML files update the cmake dependency constraint from >=3.30.4 to >=4.0.
Conda build recipe configurations
conda/recipes/cuvs-bench-cpu/conda_build_config.yaml, conda/recipes/cuvs/conda_build_config.yaml, conda/recipes/libcuvs/conda_build_config.yaml
The cmake_version requirement is changed from >=3.30.4 to >=4.0 in these conda build config files.
Dependency manifest and Python build configs
dependencies.yaml, python/cuvs/pyproject.toml, python/libcuvs/pyproject.toml
The shared CMake version YAML anchor in dependencies.yaml and the CMake requirements in Python pyproject.toml files are updated to >=4.0.
Docker build and documentation
java/docker-build/Dockerfile, java/docker-build/README.md
The Dockerfile default CMAKE_VERSION build arg is changed to 4.0; README and SPDX header year range updated accordingly.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes


Suggested reviewers

  • msarahan
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Require CMake 4.0' is concise, clear, and directly summarizes the main change across all files in the changeset—updating the minimum CMake version requirement from 3.30.4 to 4.0.
Description check ✅ Passed The description references a GitHub issue that explains the intent behind the PR, which relates to the changeset of upgrading CMake requirements.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (7)
python/libcuvs/pyproject.toml (1)

83-83: ⚠️ Potential issue | 🔴 Critical

Verify CMake 4.0 availability before merging.

Same concern as in other files - this requires CMake 4.0 which may not be released yet. This will block Python package builds for libcuvs.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/libcuvs/pyproject.toml` at line 83, The pyproject.toml currently
requires "cmake>=4.0" which may not be released; verify CMake 4.0 is actually
available and, if not, change the dependency declaration in pyproject.toml (the
"cmake>=4.0" spec) to a safe, released range (e.g. a minimum released version
and an upper bound like "<4") or make CMake an optional/build-system-only
requirement so Python package builds aren’t blocked; update the "cmake>=4.0"
entry accordingly and ensure any related build scripts (wheel/sdist tooling)
align with the new constraint.
java/docker-build/Dockerfile (1)

31-31: ⚠️ Potential issue | 🔴 Critical

Verify CMake 4.0 availability before merging.

The Dockerfile downloads CMake from GitHub releases (line 60). If CMake 4.0 hasn't been released, the wget command will fail with a 404 error, breaking the Docker image build.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@java/docker-build/Dockerfile` at line 31, The Dockerfile currently sets ARG
CMAKE_VERSION=4.0 but later uses wget to pull that release from GitHub; if 4.0
doesn't exist the build will 404. Change this by either setting ARG
CMAKE_VERSION to a known released version (e.g., a stable 3.x tag) or add a
check before the wget download: use the ARG in the download URL and perform a
HEAD request (curl -I or wget --spider) to verify the release exists and, on
failure, emit a clear error and/or fall back to a default released version.
Update the references to ARG CMAKE_VERSION and the wget download invocation so
they use the same variable and include the existence check/fallback logic.
examples/c/CMakeLists.txt (1)

7-7: ⚠️ Potential issue | 🔴 Critical

Verify CMake 4.0 availability before merging.

Examples will fail to build if CMake 4.0 doesn't exist yet. Developers trying to build/run examples will encounter immediate failures.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/c/CMakeLists.txt` at line 7, The project currently requires CMake
4.0 via the cmake_minimum_required(VERSION 4.0 FATAL_ERROR) line which may not
be available to developers; update the requirement to a more commonly available
baseline (e.g., change cmake_minimum_required to a widely supported version like
3.15) or implement a safe fallback/compatibility guard around
cmake_minimum_required so examples still build on older CMake installations;
modify the cmake_minimum_required invocation in CMakeLists.txt accordingly to
avoid immediate build failures for users without CMake 4.0.
python/cuvs/pyproject.toml (1)

109-109: ⚠️ Potential issue | 🔴 Critical

Verify CMake 4.0 availability before merging.

This change requires CMake 4.0 for the rapids-build-backend. As noted in the review of conda/recipes/libcuvs/conda_build_config.yaml, CMake 4.0 may not have been released yet. This will prevent Python package builds if the version doesn't exist.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cuvs/pyproject.toml` at line 109, The dependency line "cmake>=4.0"
must be verified for public availability before merging; if CMake 4.0 is not
released, change the constraint in pyproject (replace "cmake>=4.0") to a safe,
released range (for example "cmake>=3.27,<4" or the previous pinned version) and
make the matching change in the conda/recipes/libcuvs/conda_build_config.yaml so
both packaging systems remain consistent.
java/internal/CMakeLists.txt (1)

8-8: ⚠️ Potential issue | 🔴 Critical

Verify CMake 4.0 availability before merging.

This cmake_minimum_required directive will cause builds to fail with any CMake version less than 4.0. If CMake 4.0 hasn't been released, developers cannot build this project.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@java/internal/CMakeLists.txt` at line 8, The CMake minimum requirement is set
to an unreleased/too-new version via the directive
cmake_minimum_required(VERSION 4.0 FATAL_ERROR); verify CMake 4.0 is actually
available to all builders, and if it is not, change that line to a released,
broadly-available version (e.g., cmake_minimum_required(VERSION 3.26
FATAL_ERROR) or another agreed-upon minimum) or remove FATAL_ERROR to soften
failure; update the repository README/CI to document the required CMake version
if you keep the higher requirement.
cmake/RAPIDS.cmake (1)

11-11: ⚠️ Potential issue | 🔴 Critical

Verify CMake 4.0 availability before merging.

This is the preferred entry point for rapids-cmake projects. Requiring CMake 4.0 here will block all downstream projects if the version doesn't exist yet.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cmake/RAPIDS.cmake` at line 11, The top-level cmake_minimum_required(VERSION
4.0 FATAL_ERROR) is too strict and will break downstream projects if CMake 4.0
isn't available; relax it by replacing that call with a more widely-available
baseline (e.g., cmake_minimum_required(VERSION 3.25) or similar) and remove the
FATAL_ERROR token so projects can still configure; update the single
cmake_minimum_required invocation in RAPIDS.cmake accordingly and add a short
comment explaining the chosen baseline.
java/docker-build/README.md (1)

116-116: ⚠️ Potential issue | 🔴 Critical

Verify CMake 4.0 availability.

Documentation reflects the Dockerfile change to CMake 4.0. If CMake 4.0 doesn't exist yet, this documentation will be incorrect.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@java/docker-build/README.md` at line 116, The README line stating "**CMake
4.0**: Build system generator" may be inaccurate if CMake 4.0 is not yet
available; verify whether CMake 4.0 exists and is usable in our Dockerfile or
build environment, and then update the README accordingly: if CMake 4.0 is
available, keep the line and optionally add a version requirement note; if not,
revert the text to the supported CMake version (e.g., CMake 3.x) or make it
version-agnostic (e.g., "CMake >= X.Y") so the documentation matches the actual
Dockerfile and build scripts.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@conda/environments/all_cuda-131_arch-aarch64.yaml`:
- Line 13: Replace the unavailable requirement "cmake>=4.0" with a constraint
that matches conda-forge packages (e.g., "cmake>=3.25.0,<4.0" or pin to
"cmake=3.25.0") so environment resolution won't fail; update the YAML entry
containing the literal "cmake>=4.0" to the new version constraint.

---

Duplicate comments:
In `@cmake/RAPIDS.cmake`:
- Line 11: The top-level cmake_minimum_required(VERSION 4.0 FATAL_ERROR) is too
strict and will break downstream projects if CMake 4.0 isn't available; relax it
by replacing that call with a more widely-available baseline (e.g.,
cmake_minimum_required(VERSION 3.25) or similar) and remove the FATAL_ERROR
token so projects can still configure; update the single cmake_minimum_required
invocation in RAPIDS.cmake accordingly and add a short comment explaining the
chosen baseline.

In `@examples/c/CMakeLists.txt`:
- Line 7: The project currently requires CMake 4.0 via the
cmake_minimum_required(VERSION 4.0 FATAL_ERROR) line which may not be available
to developers; update the requirement to a more commonly available baseline
(e.g., change cmake_minimum_required to a widely supported version like 3.15) or
implement a safe fallback/compatibility guard around cmake_minimum_required so
examples still build on older CMake installations; modify the
cmake_minimum_required invocation in CMakeLists.txt accordingly to avoid
immediate build failures for users without CMake 4.0.

In `@java/docker-build/Dockerfile`:
- Line 31: The Dockerfile currently sets ARG CMAKE_VERSION=4.0 but later uses
wget to pull that release from GitHub; if 4.0 doesn't exist the build will 404.
Change this by either setting ARG CMAKE_VERSION to a known released version
(e.g., a stable 3.x tag) or add a check before the wget download: use the ARG in
the download URL and perform a HEAD request (curl -I or wget --spider) to verify
the release exists and, on failure, emit a clear error and/or fall back to a
default released version. Update the references to ARG CMAKE_VERSION and the
wget download invocation so they use the same variable and include the existence
check/fallback logic.

In `@java/docker-build/README.md`:
- Line 116: The README line stating "**CMake 4.0**: Build system generator" may
be inaccurate if CMake 4.0 is not yet available; verify whether CMake 4.0 exists
and is usable in our Dockerfile or build environment, and then update the README
accordingly: if CMake 4.0 is available, keep the line and optionally add a
version requirement note; if not, revert the text to the supported CMake version
(e.g., CMake 3.x) or make it version-agnostic (e.g., "CMake >= X.Y") so the
documentation matches the actual Dockerfile and build scripts.

In `@java/internal/CMakeLists.txt`:
- Line 8: The CMake minimum requirement is set to an unreleased/too-new version
via the directive cmake_minimum_required(VERSION 4.0 FATAL_ERROR); verify CMake
4.0 is actually available to all builders, and if it is not, change that line to
a released, broadly-available version (e.g., cmake_minimum_required(VERSION 3.26
FATAL_ERROR) or another agreed-upon minimum) or remove FATAL_ERROR to soften
failure; update the repository README/CI to document the required CMake version
if you keep the higher requirement.

In `@python/cuvs/pyproject.toml`:
- Line 109: The dependency line "cmake>=4.0" must be verified for public
availability before merging; if CMake 4.0 is not released, change the constraint
in pyproject (replace "cmake>=4.0") to a safe, released range (for example
"cmake>=3.27,<4" or the previous pinned version) and make the matching change in
the conda/recipes/libcuvs/conda_build_config.yaml so both packaging systems
remain consistent.

In `@python/libcuvs/pyproject.toml`:
- Line 83: The pyproject.toml currently requires "cmake>=4.0" which may not be
released; verify CMake 4.0 is actually available and, if not, change the
dependency declaration in pyproject.toml (the "cmake>=4.0" spec) to a safe,
released range (e.g. a minimum released version and an upper bound like "<4") or
make CMake an optional/build-system-only requirement so Python package builds
aren’t blocked; update the "cmake>=4.0" entry accordingly and ensure any related
build scripts (wheel/sdist tooling) align with the new constraint.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 6492a733-9e10-4bd9-abf7-5038ab942be4

📥 Commits

Reviewing files that changed from the base of the PR and between 3b04167 and f5a4a16.

📒 Files selected for processing (32)
  • c/CMakeLists.txt
  • cmake/RAPIDS.cmake
  • conda/environments/all_cuda-129_arch-aarch64.yaml
  • conda/environments/all_cuda-129_arch-x86_64.yaml
  • conda/environments/all_cuda-131_arch-aarch64.yaml
  • conda/environments/all_cuda-131_arch-x86_64.yaml
  • conda/environments/bench_ann_cuda-129_arch-aarch64.yaml
  • conda/environments/bench_ann_cuda-129_arch-x86_64.yaml
  • conda/environments/bench_ann_cuda-131_arch-aarch64.yaml
  • conda/environments/bench_ann_cuda-131_arch-x86_64.yaml
  • conda/environments/go_cuda-129_arch-aarch64.yaml
  • conda/environments/go_cuda-129_arch-x86_64.yaml
  • conda/environments/go_cuda-131_arch-aarch64.yaml
  • conda/environments/go_cuda-131_arch-x86_64.yaml
  • conda/environments/rust_cuda-129_arch-aarch64.yaml
  • conda/environments/rust_cuda-129_arch-x86_64.yaml
  • conda/environments/rust_cuda-131_arch-aarch64.yaml
  • conda/environments/rust_cuda-131_arch-x86_64.yaml
  • conda/recipes/cuvs-bench-cpu/conda_build_config.yaml
  • conda/recipes/cuvs/conda_build_config.yaml
  • conda/recipes/libcuvs/conda_build_config.yaml
  • cpp/CMakeLists.txt
  • dependencies.yaml
  • examples/c/CMakeLists.txt
  • examples/cpp/CMakeLists.txt
  • java/docker-build/Dockerfile
  • java/docker-build/README.md
  • java/internal/CMakeLists.txt
  • python/cuvs/CMakeLists.txt
  • python/cuvs/pyproject.toml
  • python/libcuvs/CMakeLists.txt
  • python/libcuvs/pyproject.toml

Comment thread conda/environments/all_cuda-132_arch-aarch64.yaml
@KyleFromNVIDIA KyleFromNVIDIA added improvement Improves an existing functionality non-breaking Introduces a non-breaking change labels May 13, 2026
@cjnolet cjnolet moved this to In Progress in Unstructured Data Processing May 13, 2026
@KyleFromNVIDIA

Copy link
Copy Markdown
Member Author

/merge

@rapids-bot rapids-bot Bot merged commit 82f88d8 into NVIDIA:main May 16, 2026
163 of 166 checks passed
@github-project-automation github-project-automation Bot moved this from In Progress to Done in Unstructured Data Processing May 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

improvement Improves an existing functionality non-breaking Introduces a non-breaking change

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants