summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorVolker Schroer <3470424+dl1ksv@users.noreply.github.com>2021-12-11 03:31:51 +0100
committerGitHub <noreply@github.com>2021-12-10 21:31:51 -0500
commit7976d7836a23c2a7a86f6d7af2c5d538eec1bcb1 (patch)
tree81ae3383adc38ce24965991892ba4fd2b932815a /cmake
parent0b5946b349d99590495dad1fa5ec679c4906d4fa (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.cmake98
-rw-r--r--cmake/Modules/GrMinReq.cmake25
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")