From f258b5a600ab43a53ea2420d009c5495d4c0b47a Mon Sep 17 00:00:00 2001 From: Yuanyuan Chen Date: Tue, 16 Jun 2026 12:07:37 +0800 Subject: [PATCH 1/2] Default to C++20, pin embedded backends to C++17 PyTorch has moved to C++20 and ExecuTorch's PyTorch-facing targets (_portable_lib, util, wheel config) are already built as C++20. Raise the repo-wide default in the top-level CMakeLists and .buckconfig to match. The embedded backends build the portable runtime without PyTorch, so their constraint is the cross-toolchain, not the standard the host uses. Pin cadence, cortex_m, arm, nxp, and mediatek to C++17 so they keep building on toolchains (e.g. Xtensa) that lack full C++20 support, regardless of the new default. --- .buckconfig | 2 +- CMakeLists.txt | 2 +- backends/arm/CMakeLists.txt | 3 +++ backends/cadence/CMakeLists.txt | 5 ++--- backends/cadence/fusion_g3/operators/CMakeLists.txt | 5 ++--- backends/cadence/generic/operators/CMakeLists.txt | 5 ++--- backends/cadence/hifi/operators/CMakeLists.txt | 5 ++--- backends/cadence/vision/operators/CMakeLists.txt | 5 ++--- backends/cortex_m/CMakeLists.txt | 5 ++--- backends/mediatek/CMakeLists.txt | 3 +++ backends/nxp/CMakeLists.txt | 3 +++ 11 files changed, 23 insertions(+), 20 deletions(-) diff --git a/.buckconfig b/.buckconfig index 603fa928bcb..097057ee6ae 100644 --- a/.buckconfig +++ b/.buckconfig @@ -23,7 +23,7 @@ gh_facebook_buck2_shims_meta = shim [cxx] - cxxflags = -g -std=c++17 + cxxflags = -g -std=c++20 [parser] target_platform_detector_spec = target:root//...->prelude//platforms:default target:shim//...->prelude//platforms:default diff --git a/CMakeLists.txt b/CMakeLists.txt index abd032e3e30..f047e36beab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,7 +110,7 @@ include(ExternalProject) include(GNUInstallDirs) if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 17) + set(CMAKE_CXX_STANDARD 20) endif() announce_configured_options(CMAKE_CXX_STANDARD) diff --git a/backends/arm/CMakeLists.txt b/backends/arm/CMakeLists.txt index 095ccb6a49b..67f2635275e 100644 --- a/backends/arm/CMakeLists.txt +++ b/backends/arm/CMakeLists.txt @@ -7,6 +7,9 @@ project(arm_backend) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +# Pin to C++17 for embedded toolchain compatibility (not all support C++20). +set(CMAKE_CXX_STANDARD 17) + # Source root directory for executorch. if(NOT EXECUTORCH_ROOT) set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..) diff --git a/backends/cadence/CMakeLists.txt b/backends/cadence/CMakeLists.txt index f04bda30a69..9a42fd03fba 100644 --- a/backends/cadence/CMakeLists.txt +++ b/backends/cadence/CMakeLists.txt @@ -7,9 +7,8 @@ # Set the minimum required version of CMake for this project. cmake_minimum_required(VERSION 3.10) -if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 17) -endif() +# Pin to C++17 for embedded toolchain compatibility (not all support C++20). +set(CMAKE_CXX_STANDARD 17) # Set the project name. project(cadence_backend) diff --git a/backends/cadence/fusion_g3/operators/CMakeLists.txt b/backends/cadence/fusion_g3/operators/CMakeLists.txt index a9501c687bb..b5f0b3909dd 100644 --- a/backends/cadence/fusion_g3/operators/CMakeLists.txt +++ b/backends/cadence/fusion_g3/operators/CMakeLists.txt @@ -7,9 +7,8 @@ cmake_minimum_required(VERSION 3.19) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 17) -endif() +# Pin to C++17 for embedded toolchain compatibility (not all support C++20). +set(CMAKE_CXX_STANDARD 17) include(${EXECUTORCH_ROOT}/tools/cmake/Utils.cmake) include(${EXECUTORCH_ROOT}/tools/cmake/Codegen.cmake) diff --git a/backends/cadence/generic/operators/CMakeLists.txt b/backends/cadence/generic/operators/CMakeLists.txt index dbf06e56bee..a004aaf09ea 100644 --- a/backends/cadence/generic/operators/CMakeLists.txt +++ b/backends/cadence/generic/operators/CMakeLists.txt @@ -7,9 +7,8 @@ cmake_minimum_required(VERSION 3.19) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 17) -endif() +# Pin to C++17 for embedded toolchain compatibility (not all support C++20). +set(CMAKE_CXX_STANDARD 17) include(${EXECUTORCH_ROOT}/tools/cmake/Utils.cmake) include(${EXECUTORCH_ROOT}/tools/cmake/Codegen.cmake) diff --git a/backends/cadence/hifi/operators/CMakeLists.txt b/backends/cadence/hifi/operators/CMakeLists.txt index b5801f5d488..15c8b19d37b 100644 --- a/backends/cadence/hifi/operators/CMakeLists.txt +++ b/backends/cadence/hifi/operators/CMakeLists.txt @@ -7,9 +7,8 @@ cmake_minimum_required(VERSION 3.19) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 17) -endif() +# Pin to C++17 for embedded toolchain compatibility (not all support C++20). +set(CMAKE_CXX_STANDARD 17) include(${EXECUTORCH_ROOT}/tools/cmake/Utils.cmake) include(${EXECUTORCH_ROOT}/tools/cmake/Codegen.cmake) diff --git a/backends/cadence/vision/operators/CMakeLists.txt b/backends/cadence/vision/operators/CMakeLists.txt index 38e4f97f841..1e828547ede 100644 --- a/backends/cadence/vision/operators/CMakeLists.txt +++ b/backends/cadence/vision/operators/CMakeLists.txt @@ -7,9 +7,8 @@ cmake_minimum_required(VERSION 3.19) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 17) -endif() +# Pin to C++17 for embedded toolchain compatibility (not all support C++20). +set(CMAKE_CXX_STANDARD 17) include(${EXECUTORCH_ROOT}/tools/cmake/Utils.cmake) include(${EXECUTORCH_ROOT}/tools/cmake/Codegen.cmake) diff --git a/backends/cortex_m/CMakeLists.txt b/backends/cortex_m/CMakeLists.txt index f88a6306fed..5fb91724c7a 100644 --- a/backends/cortex_m/CMakeLists.txt +++ b/backends/cortex_m/CMakeLists.txt @@ -8,9 +8,8 @@ cmake_minimum_required(VERSION 3.19) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 17) -endif() +# Pin to C++17 for embedded toolchain compatibility (not all support C++20). +set(CMAKE_CXX_STANDARD 17) # Source root directory for executorch if(NOT EXECUTORCH_ROOT) diff --git a/backends/mediatek/CMakeLists.txt b/backends/mediatek/CMakeLists.txt index 10c28be0053..cda87c59e9e 100644 --- a/backends/mediatek/CMakeLists.txt +++ b/backends/mediatek/CMakeLists.txt @@ -8,6 +8,9 @@ */ ]] +# Pin to C++17 for embedded toolchain compatibility (not all support C++20). +set(CMAKE_CXX_STANDARD 17) + # Let include directory as "executorch/..." set(_common_include_directories ${CMAKE_CURRENT_SOURCE_DIR}/../../..) diff --git a/backends/nxp/CMakeLists.txt b/backends/nxp/CMakeLists.txt index bfc4c046be6..cce18eeaae6 100644 --- a/backends/nxp/CMakeLists.txt +++ b/backends/nxp/CMakeLists.txt @@ -3,6 +3,9 @@ # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. +# Pin to C++17 for embedded toolchain compatibility (not all support C++20). +set(CMAKE_CXX_STANDARD 17) + set(_common_include_directories ${CMAKE_CURRENT_SOURCE_DIR}/../../..) add_compile_definitions(C10_USING_CUSTOM_GENERATED_MACROS) From 0a25350eec8d4143c696e8a69a099915002dfe5f Mon Sep 17 00:00:00 2001 From: cyy Date: Wed, 24 Jun 2026 17:15:26 +0800 Subject: [PATCH 2/2] Define NOMINMAX on Windows for C++20 default --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index f047e36beab..5687a2992f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -233,6 +233,8 @@ endif() # they can be properly gc'd. -s: strip symbol. if(WIN32) set(CMAKE_CXX_FLAGS_RELEASE "/Gy /Gw ${CMAKE_CXX_FLAGS_RELEASE}") + # C++20 headers pull in ; suppress its min/max macros. + add_compile_definitions(NOMINMAX) else() set(CMAKE_CXX_FLAGS_RELEASE "-ffunction-sections -fdata-sections ${CMAKE_CXX_FLAGS_RELEASE}"