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
This commit is contained in:
@@ -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})
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -42,19 +42,27 @@ 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).
|
||||
|
||||
Special New Feature
|
||||
-------------------
|
||||
|
||||
Makes programs 10x faster by doing Special New Thing.
|
||||
|
||||
* ...
|
||||
|
||||
Update on required toolchains to build LLVM
|
||||
-------------------
|
||||
|
||||
With LLVM 15.x we will raise the version requirements of the toolchain used
|
||||
to build LLVM. The new requirements are as follows:
|
||||
|
||||
* 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
|
||||
----------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user