cmake: drop support for CMake 3.17 and older#20407
Closed
vszakats wants to merge 33 commits intocurl:masterfrom
Closed
cmake: drop support for CMake 3.17 and older#20407vszakats wants to merge 33 commits intocurl:masterfrom
vszakats wants to merge 33 commits intocurl:masterfrom
Conversation
vszakats
added a commit
that referenced
this pull request
Jan 23, 2026
Bump CMake version in CMake integration tests for better performance (8x on macOS, 2-3x on Windows) and native arm64 binaries. - bump old CMake in integration tests to v3.19.8 (was: v3.11.4) - switch to native arm64 CMake binaries on macOS. - switch Linux CMake integration job to arm64. Speed gains: - Linux: 2m -> 1m30s - macOS: 9-10m -> 1m15s - Windows: 6-7m -> 2m43s Before: https://github.com/curl/curl/actions/runs/21255697172 https://github.com/curl/curl/actions/runs/21255020621 After: https://github.com/curl/curl/actions/runs/21272021446 With this, CI is: - no longer testing deprecated CMake versions. Follow-up to a7c974e #19902 - not testing the next (from 2026 April) minimum 3.18, but going for 3.19 instead. For arm64 binaries on both macOS and Linux. There is no 3.18-specific CMake code in curl. Cherry-picked from #20407 Closes #20408
vszakats
added a commit
to vszakats/curl
that referenced
this pull request
Feb 5, 2026
Cherry-picked from curl#20407
This was referenced Feb 5, 2026
f7a68d4 to
c0549c6
Compare
d6f26b1 to
b15aa51
Compare
We used it for the old CMake version.
Order can be swapped back, and custom options can still override most defaults, also syncing with similar pattern in GHA.
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.
Require CMake 3.18 (2020-07-15) or newer, up from 3.7 (2016-11-11)
prior to this patch.
This requirement also applies to the distributed
curl-config.cmake.To allow dropping compatibility code maintained for old versions, and to
use features which were unpractical in separate code paths. Also to make
testing, documentation and development easier, CI builds faster due to
CMake performance improvements over time. (e.g. integration tests on
macOS run 8x faster (10 minutes is now under 1.5m) in CI, 2.5x faster on
Windows.)
CMake offers pre-built binaries for major platforms. They work without
an install step, just by unpacking and pointing the cmake command to
them. Making upgrades easy in many cases:
https://cmake.org/download/
https://cmake.org/files/
https://github.com/Kitware/CMake/releases
CMake 3.18 brings these feature as generally available when building or
consuming curl/libcurl:
LTO support, improved performance,
pkg-configand interface targetsupport,
OBJECTtarget (for faster libcurl builds), modern invocationwith
-S/-Boptions, better support for custom linker options,FetchContent,
GnuTLS::GnuTLStarget,--verboseand--installoptions,
CMAKE_GENERATORenv, last but not least unity mode and Ninjagenerator.
For maximum build speed, use:
-DCMAKE_UNITY_BUILD=ON -DCURL_DROP_UNUSED=ONAs for deprecations, C++11 is required to build CMake itself, which may
be a limit on some platforms. autotools continues to cover them.
Follow-up to 9bcdfb3 #20408
Follow-up to a7c974e #19902
Follow-up to dfbe035 #10161
Discussion: #18704
https://github.com/curl/curl/pull/20407/files?w=1
AppVeyor CI VS2010 job: 1m36s → 1m3s (v3.12.2 → v3.18.4)
before: https://ci.appveyor.com/project/curlorg/curl/builds/53416108/job/q636op5yiartyaek
after: https://ci.appveyor.com/project/curlorg/curl/builds/53418781/job/axv5i6brwn39rwle