[llvm] 4c72deb - Bump minimum toolchain version
Tobias Hieta via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 8 00:05:37 PDT 2022
Author: Tobias Hieta
Date: 2022-04-08T09:05:33+02:00
New Revision: 4c72deb613d9d8838785b431facb3eb480fb2f51
URL: https://github.com/llvm/llvm-project/commit/4c72deb613d9d8838785b431facb3eb480fb2f51
DIFF: https://github.com/llvm/llvm-project/commit/4c72deb613d9d8838785b431facb3eb480fb2f51.diff
LOG: Bump minimum toolchain version
RFC: https://discourse.llvm.org/t/rfc-increasing-the-gcc-and-clang-requirements-to-support-c-17-in-llvm
Following the policy here: https://llvm.org/docs/DeveloperPolicy.html#toolchain
This forum post here will be updated with the timeline and status: https://discourse.llvm.org/t/important-new-toolchain-requirements-to-build-llvm-will-most-likely-be-landing-within-a-week-prepare-your-buildbots/61447
Reviewed By: mehdi_amini, jyknight, jhenderson, cor3ntin, MaskRay
Differential Revision: https://reviews.llvm.org/D122976
Added:
Modified:
llvm/cmake/modules/CheckCompilerVersion.cmake
llvm/docs/GettingStarted.rst
llvm/docs/ReleaseNotes.rst
Removed:
################################################################################
diff --git a/llvm/cmake/modules/CheckCompilerVersion.cmake b/llvm/cmake/modules/CheckCompilerVersion.cmake
index 7369cf17dcff7..c73135864c9ea 100644
--- a/llvm/cmake/modules/CheckCompilerVersion.cmake
+++ b/llvm/cmake/modules/CheckCompilerVersion.cmake
@@ -5,11 +5,11 @@
include(CheckCXXSourceCompiles)
set(GCC_MIN 5.1)
-set(GCC_SOFT_ERROR 5.1)
+set(GCC_SOFT_ERROR 7.1)
set(CLANG_MIN 3.5)
-set(CLANG_SOFT_ERROR 3.5)
+set(CLANG_SOFT_ERROR 5.0)
set(APPLECLANG_MIN 6.0)
-set(APPLECLANG_SOFT_ERROR 6.0)
+set(APPLECLANG_SOFT_ERROR 9.3)
# https://en.wikipedia.org/wiki/Microsoft_Visual_C#Internal_version_numbering
# _MSC_VER == 1920 MSVC++ 14.20 Visual Studio 2019 Version 16.0
@@ -19,7 +19,7 @@ set(MSVC_SOFT_ERROR 19.27)
# Map the above GCC versions to dates: https://gcc.gnu.org/develop.html#timeline
set(GCC_MIN_DATE 20150422)
-set(GCC_SOFT_ERROR_DATE 20150422)
+set(LIBSTDCXX_SOFT_ERROR 7)
if(DEFINED LLVM_COMPILER_CHECKED)
@@ -97,27 +97,21 @@ int main() { ++chk; return 0; }
if(NOT LLVM_LIBSTDCXX_MIN)
message(FATAL_ERROR "libstdc++ version must be at least ${GCC_MIN}.")
endif()
- # Test for libstdc++ version of at least 5.1 by checking for std::iostream_category().
- # Note: We should check _GLIBCXX_RELEASE when possible (i.e., for GCC 7.1 and up).
check_cxx_source_compiles("
#include <iosfwd>
#if defined(__GLIBCXX__)
-#if __GLIBCXX__ < ${GCC_SOFT_ERROR_DATE}
+#if !defined(_GLIBCXX_RELEASE) || _GLIBCXX_RELEASE < ${LIBSTDCXX_SOFT_ERROR}
#error Unsupported libstdc++ version
#endif
#endif
-#if defined(__GLIBCXX__)
-#include <ios>
-void foo(void) { (void) std::iostream_category(); }
-#endif
int main() { return 0; }
"
LLVM_LIBSTDCXX_SOFT_ERROR)
if(NOT LLVM_LIBSTDCXX_SOFT_ERROR)
if(LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN)
- message(WARNING "libstdc++ version should be at least ${GCC_SOFT_ERROR} because LLVM will soon use new C++ features which your toolchain version doesn't support. Ignoring because you've set LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN, but very soon your toolchain won't be supported.")
+ message(WARNING "libstdc++ version should be at least ${LIBSTDCXX_SOFT_ERROR} because LLVM will soon use new C++ features which your toolchain version doesn't support. Ignoring because you've set LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN, but very soon your toolchain won't be supported.")
else()
- message(FATAL_ERROR "libstdc++ version should be at least ${GCC_SOFT_ERROR} because LLVM will soon use new C++ features which your toolchain version doesn't support. You can temporarily opt out using LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN, but very soon your toolchain won't be supported.")
+ message(FATAL_ERROR "libstdc++ version should be at least ${LIBSTDCXX_SOFT_ERROR} because LLVM will soon use new C++ features which your toolchain version doesn't support. You can temporarily opt out using LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN, but very soon your toolchain won't be supported.")
endif()
endif()
set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
diff --git a/llvm/docs/GettingStarted.rst b/llvm/docs/GettingStarted.rst
index 3341d56171fa1..a2e7f87745000 100644
--- a/llvm/docs/GettingStarted.rst
+++ b/llvm/docs/GettingStarted.rst
@@ -175,7 +175,7 @@ uses the package and provides other details.
Package Version Notes
=========================================================== ============ ==========================================
`CMake <http://cmake.org/>`__ >=3.13.4 Makefile/workspace generator
-`GCC <http://gcc.gnu.org/>`_ >=5.1.0 C/C++ compiler\ :sup:`1`
+`GCC <http://gcc.gnu.org/>`_ >=7.1.0 C/C++ compiler\ :sup:`1`
`python <http://www.python.org/>`_ >=3.6 Automated test suite\ :sup:`2`
`zlib <http://zlib.net>`_ >=1.2.3.4 Compression library\ :sup:`3`
`GNU Make <http://savannah.gnu.org/projects/make>`_ 3.79, 3.79.1 Makefile/build processor\ :sup:`4`
@@ -235,10 +235,10 @@ LLVM is written using the subset of C++ documented in :doc:`coding
standards<CodingStandards>`. To enforce this language version, we check the most
popular host toolchains for specific minimum versions in our build systems:
-* Clang 3.5
-* Apple Clang 6.0
-* GCC 5.1
-* Visual Studio 2019
+* Clang 5.0
+* Apple Clang 9.3
+* GCC 7.1
+* Visual Studio 2019 16.7
Anything older than these toolchains *may* work, but will require forcing the
build system with a special option and is not really a supported host platform.
@@ -303,11 +303,11 @@ GCC from source. It is also quite easy to do these days.
.. _github gist:
https://gist.github.com/application2000/73fd6f4bf1be6600a2cf9f56315a2d91
-Easy steps for installing GCC 5.1.0:
+Easy steps for installing GCC 7.1.0:
.. code-block:: console
- % gcc_version=5.1.0
+ % gcc_version=7.1.0
% wget https://ftp.gnu.org/gnu/gcc/gcc-${gcc_version}/gcc-${gcc_version}.tar.bz2
% wget https://ftp.gnu.org/gnu/gcc/gcc-${gcc_version}/gcc-${gcc_version}.tar.bz2.sig
% wget https://ftp.gnu.org/gnu/gnu-keyring.gpg
diff --git a/llvm/docs/ReleaseNotes.rst b/llvm/docs/ReleaseNotes.rst
index f005a6082b720..7107cdea2efb6 100644
--- a/llvm/docs/ReleaseNotes.rst
+++ b/llvm/docs/ReleaseNotes.rst
@@ -42,18 +42,26 @@ Non-comprehensive list of changes in this release
functionality, or simply have a lot to talk about), see the `NOTE` below
for adding a new subsection.
+* ...
-.. NOTE
- If you would like to document a larger change, then you can add a
- subsection about it right here. You can copy the following boilerplate
- and un-indent it (the indentation causes it to be inside this comment).
+Update on required toolchains to build LLVM
+-------------------
- Special New Feature
- -------------------
+With LLVM 15.x we will raise the version requirements of the toolchain used
+to build LLVM. The new requirements are as follows:
- Makes programs 10x faster by doing Special New Thing.
+* GCC >= 7.1
+* Clang >= 5.0
+* Apple Clang >= 9.3
+* Visual Studio 2019 >= 16.7
-* ...
+In LLVM 15.x these requirements will be "soft" requirements and the version
+check can be skipped by passing -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON
+to CMake.
+
+With the release of LLVM 16.x these requirements will be hard and LLVM developers
+can start using C++17 features, making it impossible to build with older
+versions of these toolchains.
Changes to the LLVM IR
----------------------
More information about the llvm-commits
mailing list