2019-01-17 06:22:38 +08:00
# Check if the host compiler is new enough.
# These versions are updated based on the following policy:
2019-01-22 07:53:52 +08:00
# llvm.org/docs/DeveloperPolicy.html#toolchain
2016-03-03 00:42:56 +08:00
2016-03-09 02:56:00 +08:00
include ( CheckCXXSourceCompiles )
2019-08-14 12:30:51 +08:00
set ( GCC_MIN 5.1 )
Bump minimum toolchain version
Summary:
The RFC on moving past C++11 got good traction:
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129452.html
This patch therefore bumps the toolchain versions according to our policy:
llvm.org/docs/DeveloperPolicy.html#toolchain
Subscribers: mgorny, jkorous, dexonsmith, llvm-commits, mehdi_amini, jyknight, rsmith, chandlerc, smeenai, hans, reames, lattner, lhames, erichkeane
Differential Revision: https://reviews.llvm.org/D57264
llvm-svn: 353374
2019-02-07 13:20:00 +08:00
set ( GCC_SOFT_ERROR 5.1 )
2019-08-14 12:30:51 +08:00
set ( CLANG_MIN 3.5 )
Bump minimum toolchain version
Summary:
The RFC on moving past C++11 got good traction:
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129452.html
This patch therefore bumps the toolchain versions according to our policy:
llvm.org/docs/DeveloperPolicy.html#toolchain
Subscribers: mgorny, jkorous, dexonsmith, llvm-commits, mehdi_amini, jyknight, rsmith, chandlerc, smeenai, hans, reames, lattner, lhames, erichkeane
Differential Revision: https://reviews.llvm.org/D57264
llvm-svn: 353374
2019-02-07 13:20:00 +08:00
set ( CLANG_SOFT_ERROR 3.5 )
2019-08-14 12:30:51 +08:00
set ( APPLECLANG_MIN 6.0 )
Bump minimum toolchain version
Summary:
The RFC on moving past C++11 got good traction:
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129452.html
This patch therefore bumps the toolchain versions according to our policy:
llvm.org/docs/DeveloperPolicy.html#toolchain
Subscribers: mgorny, jkorous, dexonsmith, llvm-commits, mehdi_amini, jyknight, rsmith, chandlerc, smeenai, hans, reames, lattner, lhames, erichkeane
Differential Revision: https://reviews.llvm.org/D57264
llvm-svn: 353374
2019-02-07 13:20:00 +08:00
set ( APPLECLANG_SOFT_ERROR 6.0 )
2019-07-09 18:10:48 +08:00
# https://en.wikipedia.org/wiki/Microsoft_Visual_C#Internal_version_numbering
2020-12-03 07:21:04 +08:00
# _MSC_VER == 1914 MSVC++ 14.14 (Visual Studio 2017 version 15.4)
set ( MSVC_MIN 19.14 )
set ( MSVC_SOFT_ERROR 19.14 )
Bump minimum toolchain version
Summary:
The RFC on moving past C++11 got good traction:
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129452.html
This patch therefore bumps the toolchain versions according to our policy:
llvm.org/docs/DeveloperPolicy.html#toolchain
Subscribers: mgorny, jkorous, dexonsmith, llvm-commits, mehdi_amini, jyknight, rsmith, chandlerc, smeenai, hans, reames, lattner, lhames, erichkeane
Differential Revision: https://reviews.llvm.org/D57264
llvm-svn: 353374
2019-02-07 13:20:00 +08:00
# Map the above GCC versions to dates: https://gcc.gnu.org/develop.html#timeline
2019-08-14 12:30:51 +08:00
set ( GCC_MIN_DATE 20150422 )
Bump minimum toolchain version
Summary:
The RFC on moving past C++11 got good traction:
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129452.html
This patch therefore bumps the toolchain versions according to our policy:
llvm.org/docs/DeveloperPolicy.html#toolchain
Subscribers: mgorny, jkorous, dexonsmith, llvm-commits, mehdi_amini, jyknight, rsmith, chandlerc, smeenai, hans, reames, lattner, lhames, erichkeane
Differential Revision: https://reviews.llvm.org/D57264
llvm-svn: 353374
2019-02-07 13:20:00 +08:00
set ( GCC_SOFT_ERROR_DATE 20150422 )
2016-03-03 00:42:56 +08:00
2019-01-17 06:22:38 +08:00
if ( DEFINED LLVM_COMPILER_CHECKED )
return ( )
endif ( )
set ( LLVM_COMPILER_CHECKED ON )
if ( LLVM_FORCE_USE_OLD_TOOLCHAIN )
return ( )
endif ( )
Bump minimum toolchain version
Summary:
The RFC on moving past C++11 got good traction:
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129452.html
This patch therefore bumps the toolchain versions according to our policy:
llvm.org/docs/DeveloperPolicy.html#toolchain
Subscribers: mgorny, jkorous, dexonsmith, llvm-commits, mehdi_amini, jyknight, rsmith, chandlerc, smeenai, hans, reames, lattner, lhames, erichkeane
Differential Revision: https://reviews.llvm.org/D57264
llvm-svn: 353374
2019-02-07 13:20:00 +08:00
function ( check_compiler_version NAME NICE_NAME MINIMUM_VERSION SOFT_ERROR_VERSION )
2019-01-17 06:22:38 +08:00
if ( NOT CMAKE_CXX_COMPILER_ID STREQUAL NAME )
return ( )
endif ( )
if ( CMAKE_CXX_COMPILER_VERSION VERSION_LESS MINIMUM_VERSION )
message ( FATAL_ERROR "Host ${NICE_NAME} version must be at least ${MINIMUM_VERSION}, your version is ${CMAKE_CXX_COMPILER_VERSION}." )
Bump minimum toolchain version
Summary:
The RFC on moving past C++11 got good traction:
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129452.html
This patch therefore bumps the toolchain versions according to our policy:
llvm.org/docs/DeveloperPolicy.html#toolchain
Subscribers: mgorny, jkorous, dexonsmith, llvm-commits, mehdi_amini, jyknight, rsmith, chandlerc, smeenai, hans, reames, lattner, lhames, erichkeane
Differential Revision: https://reviews.llvm.org/D57264
llvm-svn: 353374
2019-02-07 13:20:00 +08:00
elseif ( CMAKE_CXX_COMPILER_VERSION VERSION_LESS SOFT_ERROR_VERSION )
if ( LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN )
message ( WARNING "Host ${NICE_NAME} version should be at least ${SOFT_ERROR_VERSION} because LLVM will soon use new C++ features which your toolchain version doesn't support. Your version is ${CMAKE_CXX_COMPILER_VERSION}. Ignoring because you've set LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN, but very soon your toolchain won't be supported." )
else ( )
message ( FATAL_ERROR "Host ${NICE_NAME} version should be at least ${SOFT_ERROR_VERSION} because LLVM will soon use new C++ features which your toolchain version doesn't support. Your version is ${CMAKE_CXX_COMPILER_VERSION}. You can temporarily opt out using LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN, but very soon your toolchain won't be supported." )
endif ( )
2019-01-17 06:22:38 +08:00
endif ( )
endfunction ( check_compiler_version )
2016-03-03 00:42:56 +08:00
Bump minimum toolchain version
Summary:
The RFC on moving past C++11 got good traction:
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129452.html
This patch therefore bumps the toolchain versions according to our policy:
llvm.org/docs/DeveloperPolicy.html#toolchain
Subscribers: mgorny, jkorous, dexonsmith, llvm-commits, mehdi_amini, jyknight, rsmith, chandlerc, smeenai, hans, reames, lattner, lhames, erichkeane
Differential Revision: https://reviews.llvm.org/D57264
llvm-svn: 353374
2019-02-07 13:20:00 +08:00
check_compiler_version ( "GNU" "GCC" ${ GCC_MIN } ${ GCC_SOFT_ERROR } )
check_compiler_version ( "Clang" "Clang" ${ CLANG_MIN } ${ CLANG_SOFT_ERROR } )
check_compiler_version ( "AppleClang" "Apple Clang" ${ APPLECLANG_MIN } ${ APPLECLANG_SOFT_ERROR } )
check_compiler_version ( "MSVC" "Visual Studio" ${ MSVC_MIN } ${ MSVC_SOFT_ERROR } )
2019-01-17 06:22:38 +08:00
2020-01-30 09:44:35 +08:00
# See https://developercommunity.visualstudio.com/content/problem/845933/miscompile-boolean-condition-deduced-to-be-always.html
# and thread "[llvm-dev] Longstanding failing tests - clang-tidy, MachO, Polly"
# on llvm-dev Jan 21-23 2020.
if ( ( ${ CMAKE_CXX_COMPILER_ID } STREQUAL MSVC ) AND
( 1 9 . 2 4 V E R S I O N _ L E S S _ E Q U A L $ { C M A K E _ C X X _ C O M P I L E R _ V E R S I O N } ) A N D
( $ { C M A K E _ C X X _ C O M P I L E R _ V E R S I O N } V E R S I O N _ L E S S 1 9 . 2 5 ) )
if ( LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN )
message ( WARNING "Host Visual Studio version 16.4 is known to miscompile part of LLVM" )
else ( )
message ( FATAL_ERROR "Host Visual Studio version 16.4 is known to miscompile part of LLVM, please use clang-cl or upgrade to 16.5 or above (use -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON to ignore)" )
endif ( )
endif ( )
2019-01-17 06:22:38 +08:00
if ( CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
if ( CMAKE_CXX_SIMULATE_ID MATCHES "MSVC" )
if ( CMAKE_CXX_SIMULATE_VERSION VERSION_LESS MSVC_MIN )
2019-04-30 20:37:10 +08:00
message ( FATAL_ERROR "Host Clang must have at least -fms-compatibility-version=${MSVC_MIN}, your version is ${CMAKE_CXX_SIMULATE_VERSION}." )
2019-01-17 06:22:38 +08:00
endif ( )
set ( CLANG_CL 1 )
elseif ( NOT LLVM_ENABLE_LIBCXX )
Bump minimum toolchain version
Summary:
The RFC on moving past C++11 got good traction:
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129452.html
This patch therefore bumps the toolchain versions according to our policy:
llvm.org/docs/DeveloperPolicy.html#toolchain
Subscribers: mgorny, jkorous, dexonsmith, llvm-commits, mehdi_amini, jyknight, rsmith, chandlerc, smeenai, hans, reames, lattner, lhames, erichkeane
Differential Revision: https://reviews.llvm.org/D57264
llvm-svn: 353374
2019-02-07 13:20:00 +08:00
# Test that we aren't using too old of a version of libstdc++.
2019-01-17 06:22:38 +08:00
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" )
2019-03-08 05:28:33 +08:00
# 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).
2019-01-17 06:22:38 +08:00
check_cxx_source_compiles ( "
Bump minimum toolchain version
Summary:
The RFC on moving past C++11 got good traction:
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129452.html
This patch therefore bumps the toolchain versions according to our policy:
llvm.org/docs/DeveloperPolicy.html#toolchain
Subscribers: mgorny, jkorous, dexonsmith, llvm-commits, mehdi_amini, jyknight, rsmith, chandlerc, smeenai, hans, reames, lattner, lhames, erichkeane
Differential Revision: https://reviews.llvm.org/D57264
llvm-svn: 353374
2019-02-07 13:20:00 +08:00
#include <iosfwd>
#if defined(__GLIBCXX__)
#if __GLIBCXX__ < ${GCC_MIN_DATE}
#error Unsupported libstdc++ version
#endif
#endif
2019-03-08 05:28:33 +08:00
#if defined(__GLIBCXX__)
e x t e r n c o n s t c h a r _ Z N K S t 1 7 b a d _ f u n c t i o n _ c a l l 4 w h a t E v [ ] ;
c o n s t c h a r * c h k = _ Z N K S t 1 7 b a d _ f u n c t i o n _ c a l l 4 w h a t E v ;
#else
c o n s t c h a r * c h k = \ " \ " ;
#endif
i n t main ( ) { + + c h k ; r e t u r n 0 ; }
Bump minimum toolchain version
Summary:
The RFC on moving past C++11 got good traction:
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129452.html
This patch therefore bumps the toolchain versions according to our policy:
llvm.org/docs/DeveloperPolicy.html#toolchain
Subscribers: mgorny, jkorous, dexonsmith, llvm-commits, mehdi_amini, jyknight, rsmith, chandlerc, smeenai, hans, reames, lattner, lhames, erichkeane
Differential Revision: https://reviews.llvm.org/D57264
llvm-svn: 353374
2019-02-07 13:20:00 +08:00
"
L L V M _ L I B S T D C X X _ M I N )
if ( NOT LLVM_LIBSTDCXX_MIN )
message ( FATAL_ERROR "libstdc++ version must be at least ${GCC_MIN}." )
endif ( )
2019-03-08 05:28:33 +08:00
# 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).
Bump minimum toolchain version
Summary:
The RFC on moving past C++11 got good traction:
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129452.html
This patch therefore bumps the toolchain versions according to our policy:
llvm.org/docs/DeveloperPolicy.html#toolchain
Subscribers: mgorny, jkorous, dexonsmith, llvm-commits, mehdi_amini, jyknight, rsmith, chandlerc, smeenai, hans, reames, lattner, lhames, erichkeane
Differential Revision: https://reviews.llvm.org/D57264
llvm-svn: 353374
2019-02-07 13:20:00 +08:00
check_cxx_source_compiles ( "
#include <iosfwd>
#if defined(__GLIBCXX__)
#if __GLIBCXX__ < ${GCC_SOFT_ERROR_DATE}
#error Unsupported libstdc++ version
#endif
#endif
2019-03-08 05:28:33 +08:00
#if defined(__GLIBCXX__)
#include <ios>
v o i d foo ( void ) { ( v o i d ) s t d : : iostream_category ( ) ; }
#endif
Bump minimum toolchain version
Summary:
The RFC on moving past C++11 got good traction:
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129452.html
This patch therefore bumps the toolchain versions according to our policy:
llvm.org/docs/DeveloperPolicy.html#toolchain
Subscribers: mgorny, jkorous, dexonsmith, llvm-commits, mehdi_amini, jyknight, rsmith, chandlerc, smeenai, hans, reames, lattner, lhames, erichkeane
Differential Revision: https://reviews.llvm.org/D57264
llvm-svn: 353374
2019-02-07 13:20:00 +08:00
i n t main ( ) { r e t u r n 0 ; }
"
L L V M _ L I B S T D C X X _ S O F T _ E R R O R )
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." )
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." )
endif ( )
2016-03-03 00:42:56 +08:00
endif ( )
2019-01-17 06:22:38 +08:00
set ( CMAKE_REQUIRED_FLAGS ${ OLD_CMAKE_REQUIRED_FLAGS } )
set ( CMAKE_REQUIRED_LIBRARIES ${ OLD_CMAKE_REQUIRED_LIBRARIES } )
2016-03-03 00:42:56 +08:00
endif ( )
endif ( )