diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 266 |
1 files changed, 87 insertions, 179 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 27a3df7..f73bfbe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ -# Copyright 2011,2012 Free Software Foundation, Inc. +# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc. # -# This file is part of GNU Radio +# This file was generated by gr_modtool, a tool from the GNU Radio framework +# This file is a part of gr-gsm # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,223 +18,134 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. - ######################################################################## # Project setup ######################################################################## -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.8) project(gr-gsm CXX C) enable_testing() -#set(CMAKE_BUILD_TYPE "Debug") -#select the release build type by default to get optimization flags +# Install to PyBOMBS target prefix if defined +if(DEFINED ENV{PYBOMBS_PREFIX}) + set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX}) + message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}") +endif() + +# 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.") endif(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "") -list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules) - -######################################################################## -# Set cmake policies. -######################################################################## -# This will suppress developer warnings during the cmake process that can occur -# if a newer cmake version than the minimum is used. +# Make sure our local CMake Modules path comes first +list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules) -if(POLICY CMP0026) - cmake_policy(SET CMP0026 OLD) -endif() -if(POLICY CMP0043) - cmake_policy(SET CMP0043 OLD) -endif() -if(POLICY CMP0045) - cmake_policy(SET CMP0045 OLD) -endif() -if(POLICY CMP0046) - cmake_policy(SET CMP0046 OLD) -endif() +# Set the version information here +set(VERSION_MAJOR 1) +set(VERSION_API 0) +set(VERSION_ABI 0) +set(VERSION_PATCH git) -######################################################################## -# Set version variables ( -######################################################################## +cmake_policy(SET CMP0011 NEW) -# Set the version information here -set(VERSION_INFO_MAJOR_VERSION 0) -set(VERSION_INFO_API_COMPAT 42) -set(VERSION_INFO_MINOR_VERSION 2) -set(VERSION_INFO_MAINT_VERSION ) -include(GrVersion) #setup version info +# Enable generation of compile_commands.json for code completion engines +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) ######################################################################## # Compiler specific setup ######################################################################## -if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) +if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR + CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + AND NOT WIN32) #http://gcc.gnu.org/wiki/Visibility add_definitions(-fvisibility=hidden) endif() -######################################################################## -# Find boost -######################################################################## -if(UNIX AND EXISTS "/usr/lib64") - list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix -endif(UNIX AND EXISTS "/usr/lib64") -set(Boost_ADDITIONAL_VERSIONS - "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39" - "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44" - "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49" - "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54" - "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59" - "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64" - "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69" -) -find_package(Boost "1.35" COMPONENTS filesystem system thread) - -if(NOT Boost_FOUND) - message(FATAL_ERROR "Boost required to compile gr-gsm") -endif() - -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") - set(SWIG_VERSION_CHECK TRUE) - endif() -else() - message(FATAL_ERROR "SWIG required to compile gr-gsm") -endif(SWIG_FOUND) - +IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + SET(CMAKE_CXX_STANDARD 11) +ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + SET(CMAKE_CXX_STANDARD 11) +ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + SET(CMAKE_CXX_STANDARD 11) +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_STANDARD 11) +ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang") + SET(CMAKE_C_STANDARD 11) +ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC") + SET(CMAKE_C_STANDARD 11) +ELSE() + message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.") +ENDIF() ######################################################################## # Install directories ######################################################################## +find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks filter fft CONFIG) +include(GrVersion) + include(GrPlatform) #define LIB_SUFFIX -set(GR_RUNTIME_DIR bin) -set(GR_LIBRARY_DIR lib${LIB_SUFFIX}) + +if(NOT CMAKE_MODULES_DIR) + set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake) +endif(NOT CMAKE_MODULES_DIR) + set(GR_INCLUDE_DIR include/grgsm) -set(GR_INCLUDE_DIR include/grgsm/misc_utils) -set(GR_INCLUDE_DIR include/grgsm/receiver) -set(GR_INCLUDE_DIR include/grgsm/demapping) -set(GR_INCLUDE_DIR include/grgsm/decoding) -set(GR_DATA_DIR share) +set(GR_CMAKE_DIR ${CMAKE_MODULES_DIR}/gsm) set(GR_PKG_DATA_DIR ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME}) -set(GR_DOC_DIR ${GR_DATA_DIR}/doc) set(GR_PKG_DOC_DIR ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME}) -set(GR_CONF_DIR etc) set(GR_PKG_CONF_DIR ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d) -set(GR_LIBEXEC_DIR libexec) set(GR_PKG_LIBEXEC_DIR ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME}) -set(GRC_BLOCKS_DIR ${GR_PKG_DATA_DIR}/grc/blocks) + +######################################################################## +# On Apple only, set install name and use rpath correctly, if not already set +######################################################################## +if(APPLE) + if(NOT CMAKE_INSTALL_NAME_DIR) + set(CMAKE_INSTALL_NAME_DIR + ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE + PATH "Library Install Name Destination Directory" FORCE) + endif(NOT CMAKE_INSTALL_NAME_DIR) + if(NOT CMAKE_INSTALL_RPATH) + set(CMAKE_INSTALL_RPATH + ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE + PATH "Library Install RPath" FORCE) + endif(NOT CMAKE_INSTALL_RPATH) + if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) + set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE + BOOL "Do Build Using Library Install RPath" FORCE) + endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) +endif(APPLE) ######################################################################## # Find gnuradio build dependencies ######################################################################## -set(GR_REQUIRED_COMPONENTS RUNTIME FILTER PMT) -find_package(Gnuradio) -find_package(Volk) -find_package(CppUnit) -#find_package(Doxygen) +find_package(Doxygen) +######################################################################## +# Find osmocom build dependencies +######################################################################## option(LOCAL_OSMOCOM "Build with local osmocom libraries" OFF) find_package(Libosmocore) find_package(Libosmocodec) find_package(Libosmocoding) find_package(Libosmogsm) - -if(NOT PKG_CONFIG_FOUND) - message(FATAL_ERROR "pkg-config is required to compile gr-gsm") -endif() -if(NOT GNURADIO_RUNTIME_FOUND) - message(FATAL_ERROR "GnuRadio Runtime required to compile gr-gsm") -endif() -if(NOT VOLK_FOUND) - message(FATAL_ERROR "Volk library required to compile gr-gsm") -endif() -if(NOT CPPUNIT_FOUND) - message(FATAL_ERROR "CppUnit required to compile gr-gsm") -endif() - if(NOT LIBOSMOCORE_FOUND OR NOT LIBOSMOCODEC_FOUND OR NOT LIBOSMOGSM_FOUND) set(LOCAL_OSMOCOM ON) endif() -if(LOCAL_OSMOCOM) - message(STATUS "Compiling with local osmocom libraries") -elseif(NOT LIBOSMOCODING_FOUND) - message(STATUS "Compiling local version of libosmocoding") -endif() - ######################################################################## # Setup doxygen option ######################################################################## -#if(DOXYGEN_FOUND) -# option(ENABLE_DOXYGEN "Build docs using Doxygen" ON) -#else(DOXYGEN_FOUND) - option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF) #TODO: write doxygen docs -#endif(DOXYGEN_FOUND) - -######################################################################## -# Setup the include and linker paths -######################################################################## - -list (APPEND grgsm_include_directories - ${CMAKE_SOURCE_DIR}/lib - ${CMAKE_SOURCE_DIR}/include - ${CMAKE_BINARY_DIR}/lib - ${CMAKE_BINARY_DIR}/include - ${Boost_INCLUDE_DIRS} - ${CPPUNIT_INCLUDE_DIRS} - ${GNURADIO_ALL_INCLUDE_DIRS} - ${CMAKE_SOURCE_DIR}/lib/decoding -) - -if(LIBOSMOCORE_FOUND) - list (APPEND grgsm_include_directories - ${LIBOSMOCORE_INCLUDE_DIR} - ) -endif() - -include_directories( - ${grgsm_include_directories} -) - -list (APPEND grgsm_link_directories - ${Boost_LIBRARY_DIRS} - ${CPPUNIT_LIBRARY_DIRS} - ${GNURADIO_ALL_LIBRARY_DIRS} -) - -if(LIBOSMOCORE_FOUND) - list (APPEND grgsm_link_directories - ${LIBOSMOCORE_LIBRARY_DIRS} - ) -endif() - -link_directories( - ${grgsm_link_directories} -) - -# Set component parameters -set(GR_GSM_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE) -set(GR_GSM_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE) - -######################################################################## -# On Apple only, set install name and use rpath correctly, if not already set -######################################################################## -if(APPLE) - if(NOT CMAKE_INSTALL_NAME_DIR) - set(CMAKE_INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE PATH "Library Install Name Destination Directory" FORCE) - endif(NOT CMAKE_INSTALL_NAME_DIR) - if(NOT CMAKE_INSTALL_RPATH) - set(cmakE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE PATH "Library Install RPath" FORCE) - endif(NOT CMAKE_INSTALL_RPATH) - if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) - set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE BOOL "Do Build Using Library Install RPath" FORCE) - endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) -endif(APPLE) +if(DOXYGEN_FOUND) + option(ENABLE_DOXYGEN "Build docs using Doxygen" ON) +else(DOXYGEN_FOUND) + option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF) +endif(DOXYGEN_FOUND) ######################################################################## # Create uninstall target @@ -245,28 +157,24 @@ configure_file( add_custom_target(uninstall ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake -) + ) + ######################################################################## # Add subdirectories ######################################################################## add_subdirectory(include/grgsm) add_subdirectory(lib) +add_subdirectory(apps) +add_subdirectory(docs) add_subdirectory(swig) add_subdirectory(python) add_subdirectory(grc) -add_subdirectory(apps) -add_subdirectory(docs) ######################################################################## # Install cmake search helper for this library ######################################################################## + install(FILES cmake/Modules/gr-gsmConfig.cmake - DESTINATION lib${LIB_SUFFIX}/cmake/grgsm + DESTINATION ${CMAKE_MODULES_DIR}/gsm ) - -######################################################################## -# Print summary -######################################################################## -message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}") -message(STATUS "Building for version: ${VERSION} / ${LIBVER}") |