From 5b2ecaa64ef286f70a5d4d6914e1b170c69d5b2d Mon Sep 17 00:00:00 2001 From: makise-homura Date: Thu, 22 Aug 2024 21:12:11 +0300 Subject: [PATCH] Treat LCC as compiler different from GCC LCC (eLbrus C/C++ compiler) is an EDG-based compiler that in most cases is similar in behavior to GNU, but it has different warning options supported and enabled by default. It seems to have sense to treat LCC and GNU differently, as CMake supports it from 3.23. For it to be done, CMake policy CMP0129 should be set to NEW, and then CMAKE_${LANG}_COMPILER_ID may be checked to be STREQUAL "LCC". This commit does this, and introduces warning arguments in call to compiler that are slightly different from GNU to let googletest be buildable without unexpected warnings. --- CMakeLists.txt | 1 + googlemock/CMakeLists.txt | 1 + googletest/CMakeLists.txt | 1 + googletest/cmake/internal_utils.cmake | 13 ++++++++++--- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 512e5c3d4..56eab5dad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.13) +cmake_policy(SET CMP0129 NEW) project(googletest-distribution) set(GOOGLETEST_VERSION 1.15.2) diff --git a/googlemock/CMakeLists.txt b/googlemock/CMakeLists.txt index 99b2411f3..c4d1a7506 100644 --- a/googlemock/CMakeLists.txt +++ b/googlemock/CMakeLists.txt @@ -37,6 +37,7 @@ endif() # ${gmock_BINARY_DIR}. # Language "C" is required for find_package(Threads). cmake_minimum_required(VERSION 3.13) +cmake_policy(SET CMP0129 NEW) project(gmock VERSION ${GOOGLETEST_VERSION} LANGUAGES CXX C) if (COMMAND set_up_hermetic_build) diff --git a/googletest/CMakeLists.txt b/googletest/CMakeLists.txt index dce6a7c9e..00009ec30 100644 --- a/googletest/CMakeLists.txt +++ b/googletest/CMakeLists.txt @@ -47,6 +47,7 @@ endif() # Project version. cmake_minimum_required(VERSION 3.13) +cmake_policy(SET CMP0129 NEW) project(gtest VERSION ${GOOGLETEST_VERSION} LANGUAGES CXX C) if (COMMAND set_up_hermetic_build) diff --git a/googletest/cmake/internal_utils.cmake b/googletest/cmake/internal_utils.cmake index 580ac1cbc..9d8b79de0 100644 --- a/googletest/cmake/internal_utils.cmake +++ b/googletest/cmake/internal_utils.cmake @@ -102,9 +102,11 @@ macro(config_compiler_and_linker) if (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") set(cxx_base_flags "${cxx_base_flags} -Wno-implicit-float-size-conversion -ffp-model=precise") endif() - elseif (CMAKE_COMPILER_IS_GNUCXX) - set(cxx_base_flags "-Wall -Wshadow -Wundef") - if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0.0) + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR + CMAKE_CXX_COMPILER_ID STREQUAL "LCC") + set(cxx_base_flags "-Wall -Wundef") + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND + NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0.0) set(cxx_base_flags "${cxx_base_flags} -Wno-error=dangling-else") endif() set(cxx_exception_flags "-fexceptions") @@ -115,6 +117,11 @@ macro(config_compiler_and_linker) set(cxx_no_rtti_flags "-fno-rtti -DGTEST_HAS_RTTI=0") set(cxx_strict_flags "-Wextra -Wno-unused-parameter -Wno-missing-field-initializers") + if (CMAKE_CXX_COMPILER_ID STREQUAL "LCC") + set(cxx_base_flags "${cxx_base_flags} -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-function") + else() + set(cxx_base_flags "${cxx_base_flags} -Wshadow") + endif() elseif (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") set(cxx_exception_flags "-features=except") # Sun Pro doesn't provide macros to indicate whether exceptions and