Skip to content

[CMAKE] Upgrade TVM build baseline to C++20#19734

Merged
tqchen merged 4 commits into
apache:mainfrom
Ubospica:2026-06-11-cxx20-build-baseline
Jun 15, 2026
Merged

[CMAKE] Upgrade TVM build baseline to C++20#19734
tqchen merged 4 commits into
apache:mainfrom
Ubospica:2026-06-11-cxx20-build-baseline

Conversation

@Ubospica

@Ubospica Ubospica commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR upgrades TVM's core CMake build baseline from C++17 to C++20.

It updates the top-level CMake C++/CUDA standards and the LLVM compile probe fallback flags. Downstream app, JVM, web, Python helper, and vendored third-party build surfaces are intentionally left unchanged so they can migrate separately.

Verification

  • Configured a minimal local build with GCC 13.3 and NVCC 13.2:
    cmake -S . -B build/cxx20-check -GNinja -DBUILD_TESTING=OFF -DUSE_LLVM=OFF -DUSE_CUDA=OFF -DTVM_BUILD_PYTHON_MODULE=OFF

Move TVM's core C++ and CUDA dialects to C++20 and update first-party helper
build paths that compile TVM-generated C++ code. This keeps the codebase ready
for C++20 native dependencies while leaving vendored third-party projects to
manage their own minimum standards.
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Warning

Gemini encountered an error creating the review. You can try again by commenting /gemini review.

Ubospica added 3 commits June 11, 2026 12:34
Limit the C++20 baseline update to TVM's core CMake configuration and docs.
Leave app, JVM, web, and Python helper compile flags at their existing C++17
settings so those downstream build surfaces can migrate separately.
Replace deprecated C++ traits and make captures explicit so the C++20 baseline builds cleanly under -Werror.
@tqchen tqchen merged commit c9a3c2f into apache:main Jun 15, 2026
9 checks passed
MasterJH5574 pushed a commit to MasterJH5574/tvm that referenced this pull request Jun 15, 2026
## Summary

This PR upgrades TVM's core CMake build baseline from C++17 to C++20.

It updates the top-level CMake C++/CUDA standards and the LLVM compile
probe fallback flags. Downstream app, JVM, web, Python helper, and
vendored third-party build surfaces are intentionally left unchanged so
they can migrate separately.

## Verification

- Configured a minimal local build with GCC 13.3 and NVCC 13.2:
`cmake -S . -B build/cxx20-check -GNinja -DBUILD_TESTING=OFF
-DUSE_LLVM=OFF -DUSE_CUDA=OFF -DTVM_BUILD_PYTHON_MODULE=OFF`

(cherry picked from commit c9a3c2f)
MasterJH5574 added a commit to MasterJH5574/tvm that referenced this pull request Jun 17, 2026
Revert the CMake C++/CUDA standard from C++20 back to C++17, undoing the
standard-setting portion of apache#19734 and restoring the v0.25.0.rc0 build
baseline.

The C++20 baseline broke the manylinux Linux wheels: under C++20, libstdc++'s
constexpr std::string paths reference symbols newer than the manylinux_2_28
runtime baseline (e.g. _M_replace_cold @ GLIBCXX_3.4.30, GCC 12.1+), so the
wheel fails to import with "undefined symbol". The compiler (GCC 14.2.1) is
unchanged from rc0 -- only the standard differs -- so C++17 restores the
working symbol set.

Only the standard-setting surfaces are reverted (CMakeLists.txt, the LLVM
compile probe, docs); the C++17-compatible source modernizations from apache#19734
are intentionally kept to avoid reintroducing deprecated constructs.
MasterJH5574 added a commit to MasterJH5574/tvm that referenced this pull request Jun 17, 2026
Revert four explicit-this lambda captures ([=, this, ...] -> [=, ...]) in
run_codegen.cc, inject_software_pipeline.cc, and cudnn_json_runtime.cc.

These were introduced by the C++20 baseline upgrade (apache#19734); after reverting
the baseline to C++17, MSVC rejects capturing 'this' explicitly under a '='
capture-default (error C3791) -- that form is C++20-only. GCC and Clang accept
it as an extension in C++17, which is why only the Windows wheel build failed.
Dropping the explicit 'this' ('=' captures it implicitly in C++17) restores the
MSVC build with no behavior change.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants