diff options
author | Volker Schroer <3470424+dl1ksv@users.noreply.github.com> | 2021-12-11 03:31:51 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-10 21:31:51 -0500 |
commit | 7976d7836a23c2a7a86f6d7af2c5d538eec1bcb1 (patch) | |
tree | 81ae3383adc38ce24965991892ba4fd2b932815a /cmake | |
parent | 0b5946b349d99590495dad1fa5ec679c4906d4fa (diff) |
cmake: Maintain compiler settings at one point.
* cmake: Maintain compiler settings at one point.
Signed-off-by: Volker Schroer <3470424+dl1ksv@users.noreply.github.com>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/Modules/GrCompilerSettings.cmake | 98 | ||||
-rw-r--r-- | cmake/Modules/GrMinReq.cmake | 25 |
2 files changed, 123 insertions, 0 deletions
diff --git a/cmake/Modules/GrCompilerSettings.cmake b/cmake/Modules/GrCompilerSettings.cmake new file mode 100644 index 0000000000..dca5f20aed --- /dev/null +++ b/cmake/Modules/GrCompilerSettings.cmake @@ -0,0 +1,98 @@ +# Copyright 2011-2021 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# SPDX-License-Identifier: GPL-3.0-or-later +# + +if(DEFINED __INCLUDED_GR_COMPILER_SETTINGS_CMAKE) + return() +endif() +set(__INCLUDED_GR_COMPILER_SETTING_CMAKE TRUE) + +######################################################################## +# Compiler version setup +######################################################################## +# Append -O2 optimization flag for Debug builds (Not on MSVC since conflicts with RTC1 flag) +IF (NOT MSVC) + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O2") + SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O2") +ENDIF() + +# Check compiler version against our minimum +IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + IF(DEFINED CMAKE_CXX_COMPILER_VERSION) + IF(${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS ${GCC_MIN_VERSION}) + MESSAGE(WARNING "\nThe compiler selected to build GNU Radio (GCC version ${CMAKE_CXX_COMPILER_VERSION} : ${CMAKE_CXX_COMPILER}) is older than that officially supported (${GCC_MIN_VERSION} minimum). This build may or not work. We highly recommend using a more recent GCC version.") + ENDIF() + ELSE() + MESSAGE(WARNING "\nCannot determine the version of the compiler selected to build GNU Radio (GCC : ${CMAKE_CXX_COMPILER}). This build may or not work. We highly recommend using GCC version ${GCC_MIN_VERSION} or more recent.") + ENDIF() +ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + EXECUTE_PROCESS(COMMAND + ${CMAKE_CXX_COMPILER} -v + RESULT_VARIABLE _res ERROR_VARIABLE _err + ERROR_STRIP_TRAILING_WHITESPACE) + IF(${_res} STREQUAL "0") + # output is in error stream + STRING(REGEX MATCH "^Apple.*" IS_APPLE ${_err}) + IF("${IS_APPLE}" STREQUAL "") + SET(MIN_VERSION ${CLANG_MIN_VERSION}) + SET(APPLE_STR "") + # retrieve the compiler's version from it + STRING(REGEX MATCH "clang version [0-9.]+" CLANG_OTHER_VERSION ${_err}) + STRING(REGEX MATCH "[0-9.]+" CLANG_VERSION ${CLANG_OTHER_VERSION}) + ELSE() + SET(MIN_VERSION ${APPLECLANG_MIN_VERSION}) + SET(APPLE_STR "Apple ") + # retrieve the compiler's version from it + STRING(REGEX MATCH "(clang-[0-9.]+)" CLANG_APPLE_VERSION ${_err}) + STRING(REGEX MATCH "[0-9.]+" CLANG_VERSION ${CLANG_APPLE_VERSION}) + ENDIF() + IF(${CLANG_VERSION} VERSION_LESS "${MIN_VERSION}") + MESSAGE(WARNING "\nThe compiler selected to build GNU Radio (${APPLE_STR}Clang version ${CLANG_VERSION} : ${CMAKE_CXX_COMPILER}) is older than that officially supported (${MIN_VERSION} minimum). This build may or not work. We highly recommend using Apple Clang version ${APPLECLANG_MIN_VERSION} or more recent, or Clang version ${CLANG_MIN_VERSION} or more recent.") + ENDIF() + ELSE() + MESSAGE(WARNING "\nCannot determine the version of the compiler selected to build GNU Radio (${APPLE_STR}Clang : ${CMAKE_CXX_COMPILER}). This build may or not work. We highly recommend using Apple Clang version ${APPLECLANG_MIN_VERSION} or more recent, or Clang version ${CLANG_MIN_VERSION} or more recent.") + ENDIF() +ELSE() + MESSAGE(status "Skipping compiler version check.") +ENDIF() + +# Configure C++ standard if not externally specified (will actually be +# set after CppUnit check below). Use the variable CMAKE_CXX_STANDARD +# since it will actually be used for this purposes starting in CMake 3.1. + +set(CMAKE_C_EXTENSIONS OFF) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_C_STANDARD 11) + +set(GR_CXX_VERSION_FEATURE cxx_std_${CMAKE_CXX_STANDARD}) + +######################################################################## +# Compiler specific setup +######################################################################## +include(GrMiscUtils) #compiler flag check + +include(TestBigEndian) +TEST_BIG_ENDIAN(GR_IS_BIG_ENDIAN) + +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR + CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + if(NOT WIN32) + #http://gcc.gnu.org/wiki/Visibility + GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE(-fvisibility=hidden HAVE_VISIBILITY_HIDDEN) + endif(NOT WIN32) + GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE(-Wsign-compare HAVE_WARN_SIGN_COMPARE) + GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE(-Wall HAVE_WARN_ALL) + GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE(-Wno-uninitialized HAVE_WARN_NO_UNINITIALIZED) +endif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR + CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + +if(MSVC) + include_directories(${CMAKE_SOURCE_DIR}/cmake/msvc) #missing headers + add_compile_options(/MP) #build with multiple processors + add_compile_options(/bigobj) #allow for larger object files +endif(MSVC) + diff --git a/cmake/Modules/GrMinReq.cmake b/cmake/Modules/GrMinReq.cmake new file mode 100644 index 0000000000..9ea839e3e9 --- /dev/null +++ b/cmake/Modules/GrMinReq.cmake @@ -0,0 +1,25 @@ +# Copyright 2011-2021 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# SPDX-License-Identifier: GPL-3.0-or-later +# + +if(DEFINED __INCLUDED_GR_MIN_REQ_CMAKE) + return() +endif() +set(__INCLUDED_GR_MIN_REQ_CMAKE TRUE) +# Minimum dependency versions for central dependencies: +set(GR_BOOST_MIN_VERSION "1.69") ## Version in CentOS 8 (EPEL) +set(GR_CMAKE_MIN_VERSION "3.16.3") ## Version in Ubuntu 20.04LTS +set(GR_MAKO_MIN_VERSION "1.1.0") ## Version in Ubuntu 20.04LTS +set(GR_PYTHON_MIN_VERSION "3.6.5") ## Version in Ubuntu 18.04LTS +set(GR_PYGCCXML_MIN_VERSION "2.0.0") ## Version to support c++17 (in pip) +set(GR_NUMPY_MIN_VERSION "1.17.4") ## Version in Ubuntu 20.04LTS +set(GCC_MIN_VERSION "9.3.0") ## Version in Ubuntu 20.04LTS +set(CLANG_MIN_VERSION "11.0.0") ## Version in Ubuntu 20.04LTS +set(APPLECLANG_MIN_VERSION "1100") ## same as clang 11.0.0, in Xcode11 +set(MSVC_MIN_VERSION "1916") ## VS2017 (default in conda-forge) +set(VOLK_MIN_VERSION "2.4.1") ## first version with CPU features +set(PYBIND11_MIN_VERSION "2.4") # pybind11 sets versions like 2.4.dev4, which compares < 2.4.3 +set(GR_THRIFT_MIN_VERSION "0.13") |