[LLVM] Update C++ standard to 17
Also make the soft toolchain requirements hard. This allows us to use C++17 features in LLVM now. If we find patterns with C++17 that improve readability it should be recommended in the coding standards. Reviewed By: jhenderson, cor3ntin, MaskRay Differential Revision: https://reviews.llvm.org/D130689
This commit is contained in:
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.13.4)
|
||||
include(CheckIncludeFiles)
|
||||
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
||||
project(libbolt_rt_project)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ endif()
|
||||
include(GNUInstallDirs)
|
||||
|
||||
if(CLANG_BUILT_STANDALONE)
|
||||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to conform to")
|
||||
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED YES)
|
||||
set(CMAKE_CXX_EXTENSIONS NO)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ endif()
|
||||
include(GNUInstallDirs)
|
||||
|
||||
if(LLD_BUILT_STANDALONE)
|
||||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to conform to")
|
||||
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED YES)
|
||||
set(CMAKE_CXX_EXTENSIONS NO)
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ include(GNUInstallDirs)
|
||||
if(LLDB_BUILT_STANDALONE)
|
||||
include(LLDBStandalone)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to conform to")
|
||||
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED YES)
|
||||
set(CMAKE_CXX_EXTENSIONS NO)
|
||||
endif()
|
||||
|
||||
@@ -58,7 +58,7 @@ project(LLVM
|
||||
# Must go after project(..)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to conform to")
|
||||
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED YES)
|
||||
if (CYGWIN)
|
||||
# Cygwin is a bit stricter and lack things like 'strdup', 'stricmp', etc in
|
||||
|
||||
@@ -4,21 +4,19 @@
|
||||
|
||||
include(CheckCXXSourceCompiles)
|
||||
|
||||
set(GCC_MIN 5.1)
|
||||
set(GCC_MIN 7.1)
|
||||
set(GCC_SOFT_ERROR 7.1)
|
||||
set(CLANG_MIN 3.5)
|
||||
set(CLANG_MIN 5.0)
|
||||
set(CLANG_SOFT_ERROR 5.0)
|
||||
set(APPLECLANG_MIN 6.0)
|
||||
set(APPLECLANG_MIN 9.3)
|
||||
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
|
||||
# _MSC_VER == 1927 MSVC++ 14.27 Visual Studio 2019 Version 16.7
|
||||
set(MSVC_MIN 19.20)
|
||||
set(MSVC_MIN 19.27)
|
||||
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(LIBSTDCXX_MIN 7)
|
||||
set(LIBSTDCXX_SOFT_ERROR 7)
|
||||
|
||||
|
||||
@@ -76,22 +74,14 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
|
||||
set(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++0x")
|
||||
# Test for libstdc++ version of at least 4.8 by checking for _ZNKSt17bad_function_call4whatEv.
|
||||
# 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_MIN_DATE}
|
||||
#if !defined(_GLIBCXX_RELEASE) || _GLIBCXX_RELEASE < ${LIBSTDCXX_MIN}
|
||||
#error Unsupported libstdc++ version
|
||||
#endif
|
||||
#endif
|
||||
#if defined(__GLIBCXX__)
|
||||
extern const char _ZNKSt17bad_function_call4whatEv[];
|
||||
const char *chk = _ZNKSt17bad_function_call4whatEv;
|
||||
#else
|
||||
const char *chk = \"\";
|
||||
#endif
|
||||
int main() { ++chk; return 0; }
|
||||
int main() { return 0; }
|
||||
"
|
||||
LLVM_LIBSTDCXX_MIN)
|
||||
if(NOT LLVM_LIBSTDCXX_MIN)
|
||||
|
||||
@@ -53,7 +53,7 @@ choice.
|
||||
C++ Standard Versions
|
||||
---------------------
|
||||
|
||||
Unless otherwise documented, LLVM subprojects are written using standard C++14
|
||||
Unless otherwise documented, LLVM subprojects are written using standard C++17
|
||||
code and avoid unnecessary vendor-specific extensions.
|
||||
|
||||
Nevertheless, we restrict ourselves to features which are available in the
|
||||
@@ -63,7 +63,13 @@ section `Software`).
|
||||
Each toolchain provides a good reference for what it accepts:
|
||||
|
||||
* Clang: https://clang.llvm.org/cxx_status.html
|
||||
* GCC: https://gcc.gnu.org/projects/cxx-status.html#cxx14
|
||||
|
||||
* libc++: https://libcxx.llvm.org/Status/Cxx17.html
|
||||
|
||||
* GCC: https://gcc.gnu.org/projects/cxx-status.html#cxx17
|
||||
|
||||
* libstdc++: https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017
|
||||
|
||||
* MSVC: https://msdn.microsoft.com/en-us/library/hh567368.aspx
|
||||
|
||||
|
||||
|
||||
@@ -47,6 +47,18 @@ Non-comprehensive list of changes in this release
|
||||
Update on required toolchains to build LLVM
|
||||
-------------------------------------------
|
||||
|
||||
LLVM is now built with C++17 by default. This means C++17 can be used in
|
||||
the code base.
|
||||
|
||||
The previous "soft" toolchain requirements have now been changed to "hard".
|
||||
This means that the the following versions are now required to build LLVM
|
||||
and there is no way to suppress this error.
|
||||
|
||||
* GCC >= 7.1
|
||||
* Clang >= 5.0
|
||||
* Apple Clang >= 9.3
|
||||
* Visual Studio 2019 >= 16.7
|
||||
|
||||
Changes to the LLVM IR
|
||||
----------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user