[CMAKE] Upgrade TVM build baseline to C++20#19734
Merged
Merged
Conversation
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.
Contributor
|
Warning Gemini encountered an error creating the review. You can try again by commenting |
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
approved these changes
Jun 15, 2026
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
cmake -S . -B build/cxx20-check -GNinja -DBUILD_TESTING=OFF -DUSE_LLVM=OFF -DUSE_CUDA=OFF -DTVM_BUILD_PYTHON_MODULE=OFF