[PATCH] D56799: [NFC] Factor out + document build requirements
JF Bastien via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 16 11:30:56 PST 2019
jfb created this revision.
Herald added subscribers: llvm-commits, dexonsmith, jkorous, mgorny.
This change factors out compiler checking / warning, and documents LLVM_FORCE_USE_OLD_TOOLCHAIN. It doesn't introduce any functional changes nor policy changes, these will come late.
Repository:
rL LLVM
https://reviews.llvm.org/D56799
Files:
cmake/modules/CheckCompilerVersion.cmake
docs/CMake.rst
Index: docs/CMake.rst
===================================================================
--- docs/CMake.rst
+++ docs/CMake.rst
@@ -573,6 +573,11 @@
options, which are passed to the CCACHE_MAXSIZE and CCACHE_DIR environment
variables, respectively.
+**LLVM_FORCE_USE_OLD_TOOLCHAIN**:BOOL
+ If enabled, the compiler and standard library versions won't be checked. LLVM
+ may not compile at all, or might fail at runtime due to known bugs in these
+ toolchains.
+
CMake Caches
============
Index: cmake/modules/CheckCompilerVersion.cmake
===================================================================
--- cmake/modules/CheckCompilerVersion.cmake
+++ cmake/modules/CheckCompilerVersion.cmake
@@ -1,28 +1,45 @@
-# Check if the host compiler is new enough. LLVM requires at least GCC 4.8,
-# MSVC 2015 (Update 3), or Clang 3.1.
+# Check if the host compiler is new enough.
+# These versions are updated based on the following policy:
+# llvm.org/docs/GettingStarted.html#host-c-toolchain-both-compiler-and-standard-library
include(CheckCXXSourceCompiles)
+set(GCC_MIN 4.8)
+set(GCC_WARN 4.8)
+set(CLANG_MIN 3.1)
+set(CLANG_WARN 3.1)
+set(APPLECLANG_MIN 3.1)
+set(APPLECLANG_WARN 3.1)
+set(MSVC_MIN 19.0)
+set(MSVC_WARN 19.00.24213.1)
+
+function(check_compiler_version NAME NICE_NAME MINIMUM_VERSION WARN_VERSION)
+ if(CMAKE_CXX_COMPILER_ID STREQUAL NAME)
+ 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}.")
+ elseif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS WARN_VERSION)
+ message(WARNING "Host ${NICE_NAME} version must be at least ${WARN_VERSION} due to miscompiles from earlier versions, your version is ${CMAKE_CXX_COMPILER_VERSION}.")
+ endif()
+ endif()
+endfunction(check_compiler_version)
+
if(NOT DEFINED LLVM_COMPILER_CHECKED)
set(LLVM_COMPILER_CHECKED ON)
if(NOT LLVM_FORCE_USE_OLD_TOOLCHAIN)
- if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
- if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
- message(FATAL_ERROR "Host GCC version must be at least 4.8!")
- endif()
- elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
- if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.1)
- message(FATAL_ERROR "Host Clang version must be at least 3.1!")
- endif()
+ check_compiler_version("GNU" "GCC" ${GCC_MIN} ${GCC_WARN})
+ check_compiler_version("Clang" "Clang" ${CLANG_MIN} ${CLANG_WARN})
+ check_compiler_version("AppleClang" "Apple Clang" ${APPLECLANG_MIN} ${APPLECLANG_WARN})
+ check_compiler_version("MSVC" "Visual Studio" ${MSVC_MIN} ${MSVC_WARN})
+ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if (CMAKE_CXX_SIMULATE_ID MATCHES "MSVC")
- if (CMAKE_CXX_SIMULATE_VERSION VERSION_LESS 19.0)
- message(FATAL_ERROR "Host Clang must have at least -fms-compatibility-version=19.0")
+ if (CMAKE_CXX_SIMULATE_VERSION VERSION_LESS MSVC_MIN)
+ message(FATAL_ERROR "Host Clang must have at least -fms-compatibility-version=${MSVC_MIN}, your version is ${CMAKE_CXX_COMPILER_VERSION}.")
endif()
set(CLANG_CL 1)
elseif(NOT LLVM_ENABLE_LIBCXX)
- # Otherwise, test that we aren't using too old of a version of libstdc++
+ # Test that we aren't using too old of a version of libstdc++
# with the Clang compiler. This is tricky as there is no real way to
# check the version of libstdc++ directly. Instead we test for a known
# bug in libstdc++4.6 that is fixed in libstdc++4.7.
@@ -40,13 +57,7 @@
set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
set(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES})
endif()
- elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
- if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0)
- message(FATAL_ERROR "Host Visual Studio must be at least 2015")
- elseif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.00.24213.1)
- message(WARNING "Host Visual Studio should at least be 2015 Update 3 (MSVC 19.00.24213.1)"
- " due to miscompiles from earlier versions")
- endif()
endif()
+
endif()
endif()
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D56799.182109.patch
Type: text/x-patch
Size: 4233 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190116/0eb49489/attachment.bin>
More information about the llvm-commits
mailing list