mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
Add secondary libstdc++ 4.8 and 5.1 detection mechanisms
Summary: The date-based approach to detecting unsupported versions of libstdc++ does not handle bug fix releases of older versions. As an example, the `__GLIBCXX__` value associated with version 5.1, `20150422`, is less than the values associated with versions 4.8.5 and 4.9.3. This patch adds secondary checks based on certain properties in sufficiently new versions of libstdc++. Reviewers: jfb, tstellar, rnk, sfertile, nemanjai Reviewed By: jfb Subscribers: mgorny, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D58682 llvm-svn: 355638
This commit is contained in:
parent
2c18b0ad47
commit
55192374db
@ -58,6 +58,8 @@ 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__)
|
||||
@ -65,12 +67,20 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
#error Unsupported libstdc++ version
|
||||
#endif
|
||||
#endif
|
||||
int main() { return 0; }
|
||||
#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; }
|
||||
"
|
||||
LLVM_LIBSTDCXX_MIN)
|
||||
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__)
|
||||
@ -78,6 +88,10 @@ int main() { return 0; }
|
||||
#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)
|
||||
|
Loading…
Reference in New Issue
Block a user