diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 141 |
1 files changed, 100 insertions, 41 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 650cfe3ac4..0df17a21f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,16 +25,18 @@ endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) ######################################################################## # Project setup ######################################################################## +# Make sure this version matches ${GR_CMAKE_MIN_VERSION} (a variable can't be +# used here). cmake_minimum_required(VERSION 2.6) project(gnuradio CXX C) enable_testing() -#make sure our local CMake Modules path comes first +# Make sure our local CMake Modules path comes first list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules) include(GrBuildTypes) -#select the release build type by default to get optimization flags +# Select the release build type by default to get optimization flags if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") message(STATUS "Build type not specified: defaulting to release.") @@ -46,45 +48,27 @@ message(STATUS "Build type set to ${CMAKE_BUILD_TYPE}.") # Set the version information here set(VERSION_INFO_MAJOR_VERSION 3) set(VERSION_INFO_API_COMPAT 7) -set(VERSION_INFO_MINOR_VERSION 11) -set(VERSION_INFO_MAINT_VERSION 1) +set(VERSION_INFO_MINOR_VERSION 12) +set(VERSION_INFO_MAINT_VERSION git) include(GrVersion) #setup version info -# 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() +# Minimum dependency versions for central dependencies: +set(GR_BOOST_MIN_VERSION "1.48") +set(GR_SWIG_MIN_VERSION "2.0.4") +set(GR_CMAKE_MIN_VERSION "2.8.12") +set(GR_MAKO_MIN_VERSION "0.4.2") +set(GR_PYTHON_MIN_VERSION "2.7") +#set(GR_PYTHON3_MIN_VERSION "3.x") # Py3k not yet supported +set(GR_CPPUNIT_MIN_VERSION "1.12.1") +set(GCC_MIN_VERSION "4.4.0") +set(CLANG_MIN_VERSION "3.3.0") +set(APPLECLANG_MIN_VERSION "500") -# Set C/C++ standard for all targets -# NOTE: Starting with cmake v3.1 this should be used: -# set(CMAKE_C_STANDARD 90) -# set(CMAKE_CXX_STANDARD 98) - -IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98") -ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98") -ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98") -ELSE() - message(warning "C++ standard could not be set because compiler is not GNU, Clang or MSVC.") -ENDIF() - -IF(CMAKE_C_COMPILER_ID STREQUAL "GNU") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") -ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "Clang") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") -ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11") -ELSE() - message(warning "C standard could not be set because compiler is not GNU, Clang or MSVC.") -ENDIF() - -# Set cmake policies. +######################################################################## +# Configure CMake policies +######################################################################## # This will suppress developer warnings during the cmake process that can occur # if a newer cmake version than the minimum is used. - if(POLICY CMP0026) cmake_policy(SET CMP0026 OLD) endif() @@ -99,6 +83,81 @@ if(POLICY CMP0046) endif() ######################################################################## +# 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 STREQUAL "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++ and C standards +IF(CMAKE_VERSION VERSION_LESS "3.1") + IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98") + ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98") + ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98") + ELSE() + MESSAGE(warning "C++ standard could not be set because compiler is not GNU, Clang or MSVC.") + ENDIF() + + IF(CMAKE_C_COMPILER_ID STREQUAL "GNU") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") + ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "Clang") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") + ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11") + ELSE() + MESSAGE(warning "C standard could not be set because compiler is not GNU, Clang or MSVC.") + ENDIF() +ELSE() + SET(CMAKE_C_STANDARD 90) + SET(CMAKE_CXX_STANDARD 98) +ENDIF() + +######################################################################## # Environment setup ######################################################################## IF(NOT DEFINED BOOST_ROOT) @@ -283,13 +342,13 @@ include(GrBoost) ######################################################################## # Enable python component ######################################################################## -find_package(PythonLibs 2) +find_package(PythonLibs ${GR_PYTHON_MIN_VERSION}) find_package(SWIG) if(SWIG_FOUND) - # Minimum SWIG version required is 1.3.31 set(SWIG_VERSION_CHECK FALSE) - if("${SWIG_VERSION}" VERSION_GREATER "1.3.30") + if("${SWIG_VERSION}" VERSION_EQUAL ${GR_SWIG_MIN_VERSION} OR + "${SWIG_VERSION}" VERSION_GREATER ${GR_SWIG_MIN_VERSION}) set(SWIG_VERSION_CHECK TRUE) endif() endif(SWIG_FOUND) @@ -301,7 +360,7 @@ GR_REGISTER_COMPONENT("python-support" ENABLE_PYTHON SWIG_VERSION_CHECK ) -find_package(CppUnit) +find_package(CppUnit ${GR_CPPUNIT_MIN_VERSION}) GR_REGISTER_COMPONENT("testing-support" ENABLE_TESTING CPPUNIT_FOUND ) @@ -413,7 +472,7 @@ GR_LOGGING() # Distribute the README file ######################################################################## install( - FILES README README.hacking + FILES README.md README.hacking DESTINATION ${GR_PKG_DOC_DIR} COMPONENT "docs" ) |