From 4c72deb613d9d8838785b431facb3eb480fb2f51 Mon Sep 17 00:00:00 2001 From: Tobias Hieta Date: Sat, 2 Apr 2022 16:26:14 +0200 Subject: [PATCH] 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 --- llvm/cmake/modules/CheckCompilerVersion.cmake | 20 +++++++------------- llvm/docs/GettingStarted.rst | 14 +++++++------- llvm/docs/ReleaseNotes.rst | 24 ++++++++++++++++-------- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/llvm/cmake/modules/CheckCompilerVersion.cmake b/llvm/cmake/modules/CheckCompilerVersion.cmake index 7369cf17dcff..c73135864c9e 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 #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 -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 3341d56171fa..a2e7f8774500 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 `__ >=3.13.4 Makefile/workspace generator -`GCC `_ >=5.1.0 C/C++ compiler\ :sup:`1` +`GCC `_ >=7.1.0 C/C++ compiler\ :sup:`1` `python `_ >=3.6 Automated test suite\ :sup:`2` `zlib `_ >=1.2.3.4 Compression library\ :sup:`3` `GNU 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`. 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 f005a6082b72..7107cdea2efb 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 ---------------------- -- 2.11.4.GIT