From 1ece53b157db4425ad12cae31fb570c591dc19e7 Mon Sep 17 00:00:00 2001 From: cyy Date: Fri, 30 May 2025 11:25:26 +0000 Subject: [PATCH] Use 3.27 as the minimum CMake version (#153153) Update the minimum CMake version to 3.27 because of it provides more CUDA targets such as `CUDA::nvperf_host` so that it is possible to remove some of our forked CUDA modules. See https://github.com/pytorch/pytorch/pull/153783. It's also possible to facilitate future third-party updates such as FBGEMM (its current shipped version requires 3.21). Pull Request resolved: https://github.com/pytorch/pytorch/pull/153153 Approved by: https://github.com/malfet --- .ci/manywheel/build_common.sh | 2 +- .ci/manywheel/build_libtorch.sh | 1 + .../requirements/pip-requirements-macOS.txt | 2 +- CMakeLists.txt | 3 +- aten/src/ATen/CMakeLists.txt | 2 +- .../cpu/qnnpack/deps/clog/CMakeLists.txt | 2 +- c10/CMakeLists.txt | 2 +- cmake/ProtoBuf.cmake | 48 +++++++++++++++---- test/edge/CMakeLists.txt | 2 +- tools/setup_helpers/cmake.py | 7 ++- torch/CMakeLists.txt | 2 +- torch/_inductor/cpp_builder.py | 2 +- torch/lib/libshm/CMakeLists.txt | 2 +- 13 files changed, 56 insertions(+), 21 deletions(-) diff --git a/.ci/manywheel/build_common.sh b/.ci/manywheel/build_common.sh index ec822b0cd4a..f70b8df4149 100644 --- a/.ci/manywheel/build_common.sh +++ b/.ci/manywheel/build_common.sh @@ -31,7 +31,6 @@ elif [[ "$OS_NAME" == *"Ubuntu"* ]]; then # Comment out nvidia repositories to prevent them from getting apt-get updated, see https://github.com/pytorch/pytorch/issues/74968 # shellcheck disable=SC2046 sed -i 's/.*nvidia.*/# &/' $(find /etc/apt/ -type f -name "*.list") - retry apt-get update retry apt-get -y install zip openssl else @@ -98,6 +97,7 @@ if [[ -z "$PYTORCH_ROOT" ]]; then exit 1 fi pushd "$PYTORCH_ROOT" +retry pip install -q cmake python setup.py clean retry pip install -qr requirements.txt case ${DESIRED_PYTHON} in diff --git a/.ci/manywheel/build_libtorch.sh b/.ci/manywheel/build_libtorch.sh index 8f70210dd5b..e9ab620475d 100644 --- a/.ci/manywheel/build_libtorch.sh +++ b/.ci/manywheel/build_libtorch.sh @@ -92,6 +92,7 @@ if [[ -z "$PYTORCH_ROOT" ]]; then exit 1 fi pushd "$PYTORCH_ROOT" +retry pip install -q cmake python setup.py clean retry pip install -qr requirements.txt retry pip install -q numpy==2.0.1 diff --git a/.github/requirements/pip-requirements-macOS.txt b/.github/requirements/pip-requirements-macOS.txt index f32eb1784d5..dbed4174fb4 100644 --- a/.github/requirements/pip-requirements-macOS.txt +++ b/.github/requirements/pip-requirements-macOS.txt @@ -1,5 +1,5 @@ boto3==1.35.42 -cmake==3.25.* +cmake==3.27.* expecttest==0.3.0 fbscribelogger==0.1.7 filelock==3.6.0 diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b479073f3a..ec6e82a2ddd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.18 FATAL_ERROR) +cmake_minimum_required(VERSION 3.27 FATAL_ERROR) # cmake_policy(SET CMP0022 NEW) cmake_policy(SET CMP0023 NEW) # Use compiler ID "AppleClang" instead of "Clang" for XCode. Not setting this @@ -6,6 +6,7 @@ cmake_minimum_required(VERSION 3.18 FATAL_ERROR) # one is detected as "AppleClang". cmake_policy(SET CMP0010 NEW) cmake_policy(SET CMP0025 NEW) +cmake_policy(SET CMP0126 OLD) # Enables CMake to set LTO on compilers other than Intel. cmake_policy(SET CMP0069 NEW) diff --git a/aten/src/ATen/CMakeLists.txt b/aten/src/ATen/CMakeLists.txt index bab044d3c01..6eea0b21475 100644 --- a/aten/src/ATen/CMakeLists.txt +++ b/aten/src/ATen/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.18 FATAL_ERROR) +cmake_minimum_required(VERSION 3.27 FATAL_ERROR) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) if(NOT MSVC) diff --git a/aten/src/ATen/native/quantized/cpu/qnnpack/deps/clog/CMakeLists.txt b/aten/src/ATen/native/quantized/cpu/qnnpack/deps/clog/CMakeLists.txt index af31056c443..979af29f723 100644 --- a/aten/src/ATen/native/quantized/cpu/qnnpack/deps/clog/CMakeLists.txt +++ b/aten/src/ATen/native/quantized/cpu/qnnpack/deps/clog/CMakeLists.txt @@ -4,7 +4,7 @@ # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. -cmake_minimum_required(VERSION 3.18 FATAL_ERROR) +cmake_minimum_required(VERSION 3.27 FATAL_ERROR) include(GNUInstallDirs) diff --git a/c10/CMakeLists.txt b/c10/CMakeLists.txt index f00c662e70e..8e9d267352d 100644 --- a/c10/CMakeLists.txt +++ b/c10/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.18 FATAL_ERROR) +cmake_minimum_required(VERSION 3.27 FATAL_ERROR) project(c10 CXX) set(CMAKE_CXX_STANDARD 17 CACHE STRING "The C++ standard whose features are requested to build this target.") diff --git a/cmake/ProtoBuf.cmake b/cmake/ProtoBuf.cmake index 4c436dcd645..86c5f2d3433 100644 --- a/cmake/ProtoBuf.cmake +++ b/cmake/ProtoBuf.cmake @@ -34,6 +34,27 @@ macro(custom_protobuf_find) set(CMAKE_POSITION_INDEPENDENT_CODE ON) if(MSVC) + foreach( + flag_var + CMAKE_C_FLAGS + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_MINSIZEREL + CMAKE_C_FLAGS_RELWITHDEBINFO + CMAKE_CXX_FLAGS + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL + CMAKE_CXX_FLAGS_RELWITHDEBINFO) + # Replace /Zi and /ZI with /Z7 + if(MSVC_Z7_OVERRIDE) + if(${flag_var} MATCHES "/Z[iI]") + string(REGEX REPLACE "/Z[iI]" "/Z7" ${flag_var} "${${flag_var}}") + endif(${flag_var} MATCHES "/Z[iI]") + endif(MSVC_Z7_OVERRIDE) + set(${flag_var} "${${flag_var}} /FS") + endforeach(flag_var) + foreach(flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL) @@ -41,15 +62,24 @@ macro(custom_protobuf_find) string(REGEX REPLACE "/Z[iI7]" "" ${flag_var} "${${flag_var}}") endif() endforeach(flag_var) - if(MSVC_Z7_OVERRIDE) - foreach(flag_var - CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELWITHDEBINFO) - if(${flag_var} MATCHES "/Z[iI]") - string(REGEX REPLACE "/Z[iI]" "/Z7" ${flag_var} "${${flag_var}}") - endif() - endforeach(flag_var) - endif(MSVC_Z7_OVERRIDE) + + foreach( + flag_var + CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO + CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO + CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO + CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO + CMAKE_SHARED_LINKER_FLAGS_DEBUG + CMAKE_STATIC_LINKER_FLAGS_DEBUG + CMAKE_EXE_LINKER_FLAGS_DEBUG + CMAKE_MODULE_LINKER_FLAGS_DEBUG) + # Switch off incremental linking in debug/relwithdebinfo builds + if(${flag_var} MATCHES "/INCREMENTAL" AND NOT ${flag_var} MATCHES + "/INCREMENTAL:NO") + string(REGEX REPLACE "/INCREMENTAL" "/INCREMENTAL:NO" ${flag_var} + "${${flag_var}}") + endif() + endforeach(flag_var) endif(MSVC) if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0.0") diff --git a/test/edge/CMakeLists.txt b/test/edge/CMakeLists.txt index 985b7720248..1d7c8852fb5 100644 --- a/test/edge/CMakeLists.txt +++ b/test/edge/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15) +cmake_minimum_required(VERSION 3.18) set(TORCH_ROOT ${CMAKE_CURRENT_LIST_DIR}/../..) set(TEST_ROOT ${TORCH_ROOT}/test/edge) diff --git a/tools/setup_helpers/cmake.py b/tools/setup_helpers/cmake.py index 1fd7377cb07..678ba7ab207 100644 --- a/tools/setup_helpers/cmake.py +++ b/tools/setup_helpers/cmake.py @@ -60,12 +60,15 @@ class CMake: cmake3_version = CMake._get_version(which("cmake3")) cmake_version = CMake._get_version(which("cmake")) - _cmake_min_version = LooseVersion("3.18.0") + _cmake_min_version = LooseVersion("3.27.0") if all( ver is None or ver < _cmake_min_version for ver in [cmake_version, cmake3_version] ): - raise RuntimeError("no cmake or cmake3 with version >= 3.18.0 found") + raise RuntimeError( + "no cmake or cmake3 with version >= 3.27.0 found:" + + str([cmake_version, cmake3_version]) + ) if cmake3_version is None: cmake_command = "cmake" diff --git a/torch/CMakeLists.txt b/torch/CMakeLists.txt index 0da483c0974..b07ba2a2d35 100644 --- a/torch/CMakeLists.txt +++ b/torch/CMakeLists.txt @@ -2,7 +2,7 @@ # Now it only builds the Torch python bindings. if(NOT CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO) - cmake_minimum_required(VERSION 3.18 FATAL_ERROR) + cmake_minimum_required(VERSION 3.27 FATAL_ERROR) project(torch CXX C) find_package(torch REQUIRED) option(USE_CUDA "Use CUDA" ON) diff --git a/torch/_inductor/cpp_builder.py b/torch/_inductor/cpp_builder.py index 20a7c77c9e9..29f95df11e0 100644 --- a/torch/_inductor/cpp_builder.py +++ b/torch/_inductor/cpp_builder.py @@ -1729,7 +1729,7 @@ class CppBuilder: definitions = " ".join(self._build_option.get_definitions()) contents = textwrap.dedent( f""" - cmake_minimum_required(VERSION 3.18 FATAL_ERROR) + cmake_minimum_required(VERSION 3.27 FATAL_ERROR) project(aoti_model LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) diff --git a/torch/lib/libshm/CMakeLists.txt b/torch/lib/libshm/CMakeLists.txt index 8a7329ddab7..c3cd26fea7b 100644 --- a/torch/lib/libshm/CMakeLists.txt +++ b/torch/lib/libshm/CMakeLists.txt @@ -1,5 +1,5 @@ project(libshm C CXX) -cmake_minimum_required(VERSION 3.18 FATAL_ERROR) +cmake_minimum_required(VERSION 3.27 FATAL_ERROR) set(TORCH_ROOT ${CMAKE_CURRENT_LIST_DIR}/../../../)