mirror of
https://github.com/Kitware/CMake.git
synced 2025-06-11 00:23:40 +08:00

Divert LCC compiler as a new one, instead of treating it as GNU. Since old times, Elbrus C/C++/Fortran Compiler (LCC) by MCST has been passing checks for GNU compilers, so it has been identified as GNU. Now, with intent of seriously upstreaming its support, it has been added as a separate LCC compiler, and its version displays not a supported GCC version, but LCC version itself (e.g. LCC 1.25.19 instead of GNU 7.3.0). This commit adds its support for detection, and also converts basically every check like 'is this compiler GNU?' to 'is this compiler GNU or LCC?'. The only places where this check is untouched, is where it regards other platforms where LCC is unavailable (primarily non-Linux), and where it REALLY differs from GNU compiler. Note: this transition may break software that are already ported to Elbrus, but hardly relies that LCC will be detected as GNU; still such software is not known.
38 lines
1.5 KiB
CMake
38 lines
1.5 KiB
CMake
set(CMake_C11_THREAD_LOCAL_BROKEN 0)
|
|
if((CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "LCC") AND CMAKE_C11_STANDARD_COMPILE_OPTION)
|
|
if(NOT DEFINED CMake_C11_THREAD_LOCAL_WORKS)
|
|
include(${CMAKE_CURRENT_LIST_DIR}/cm_message_checks_compat.cmake)
|
|
cm_message_checks_compat(
|
|
"Checking if compiler supports C11 _Thread_local"
|
|
__checkStart __checkPass __checkFail)
|
|
message(${__checkStart})
|
|
try_compile(CMake_C11_THREAD_LOCAL_WORKS
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
${CMAKE_CURRENT_LIST_DIR}/cm_c11_thread_local.c
|
|
CMAKE_FLAGS -DCMAKE_C_STANDARD=11
|
|
OUTPUT_VARIABLE OUTPUT
|
|
)
|
|
if(CMake_C11_THREAD_LOCAL_WORKS AND "${OUTPUT}" MATCHES "error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'")
|
|
set_property(CACHE CMake_C11_THREAD_LOCAL_WORKS PROPERTY VALUE 0)
|
|
endif()
|
|
if(CMake_C11_THREAD_LOCAL_WORKS)
|
|
message(${__checkPass} "yes")
|
|
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
|
"Determining if compiler supports C11 _Thread_local passed with the following output:\n"
|
|
"${OUTPUT}\n"
|
|
"\n"
|
|
)
|
|
else()
|
|
message(${__checkFail} "no")
|
|
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
|
"Determining if compiler supports C11 _Thread_local failed with the following output:\n"
|
|
"${OUTPUT}\n"
|
|
"\n"
|
|
)
|
|
endif()
|
|
endif()
|
|
if(NOT CMake_C11_THREAD_LOCAL_WORKS)
|
|
set(CMake_C11_THREAD_LOCAL_BROKEN 1)
|
|
endif()
|
|
endif()
|