# Copyright 2010-2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # 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 # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## IF(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) MESSAGE(FATAL_ERROR "Prevented in-tree built. This is bad practice.") ENDIF(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) ######################################################################## # Project setup ######################################################################## CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(gnuradio) ENABLE_LANGUAGE(CXX) ENABLE_LANGUAGE(C) ENABLE_TESTING() #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) INCLUDE(GrVersion) #setup version info ######################################################################## # Compiler specific setup ######################################################################## IF(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) #http://gcc.gnu.org/wiki/Visibility ADD_DEFINITIONS(-fvisibility=hidden) ENDIF() IF(CMAKE_COMPILER_IS_GNUCXX) ADD_DEFINITIONS(-Wsign-compare) ENDIF(CMAKE_COMPILER_IS_GNUCXX) IF(MSVC) INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/cmake/msvc) #missing headers ADD_DEFINITIONS(-D_WIN32_WINNT=0x0501) #minimum version required is windows xp ADD_DEFINITIONS(-DNOMINMAX) #disables stupidity and enables std::min and std::max ADD_DEFINITIONS( #stop all kinds of compatibility warnings -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE ) ADD_DEFINITIONS(-DHAVE_CONFIG_H) ADD_DEFINITIONS(/MP) #build with multiple processors ENDIF(MSVC) ######################################################################## # Install directories ######################################################################## INCLUDE(GrPlatform) #define LIB_SUFFIX SET(GR_RUNTIME_DIR bin) SET(GR_LIBRARY_DIR lib${LIB_SUFFIX}) SET(GR_INCLUDE_DIR include) SET(GR_DATA_DIR share) 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}-${LIBVER}) SET(GR_CONF_DIR etc) SET(GR_PKG_CONF_DIR ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}) 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) ######################################################################## # Variables replaced when configuring the package config files ######################################################################## FILE(TO_NATIVE_PATH "${CMAKE_INSTALL_PREFIX}" prefix) FILE(TO_NATIVE_PATH "\${prefix}" exec_prefix) FILE(TO_NATIVE_PATH "\${exec_prefix}/${GR_LIBRARY_DIR}" libdir) FILE(TO_NATIVE_PATH "\${prefix}/${GR_INCLUDE_DIR}" includedir) ######################################################################## # Create uninstall target ######################################################################## CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake @ONLY) ADD_CUSTOM_TARGET(uninstall ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake ) ######################################################################## # Enable python component ######################################################################## FIND_PACKAGE(PythonLibs) FIND_PACKAGE(SWIG) INCLUDE(GrComponent) GR_REGISTER_COMPONENT("python-support" ENABLE_PYTHON PYTHONLIBS_FOUND SWIG_FOUND ) FIND_PACKAGE(CppUnit) GR_REGISTER_COMPONENT("testing-support" ENABLE_TESTING CPPUNIT_FOUND ) ######################################################################## # Add optional dlls specified in DLL_PATHS ######################################################################## FOREACH(path ${DLL_PATHS}) FILE(GLOB _dlls "${path}/*.dll") LIST(APPEND ALL_DLL_FILES ${_dlls}) ENDFOREACH(path) IF(DEFINED ALL_DLL_FILES) INCLUDE(GrPackage) CPACK_COMPONENT("extra_dlls" DISPLAY_NAME "Extra DLLs" DESCRIPTION "Extra DLLs for runtime dependency requirements" ) MESSAGE(STATUS "") MESSAGE(STATUS "Including the following dlls into the install:") FOREACH(_dll ${ALL_DLL_FILES}) MESSAGE(STATUS " ${_dll}") ENDFOREACH(_dll) INSTALL(FILES ${ALL_DLL_FILES} DESTINATION ${GR_RUNTIME_DIR} COMPONENT "extra_dlls") ENDIF() ######################################################################## # Setup volk as a subproject ######################################################################## INCLUDE(GrComponent) GR_REGISTER_COMPONENT("volk" ENABLE_VOLK) SET(VOLK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/volk/include ${CMAKE_CURRENT_BINARY_DIR}/volk/include ) INCLUDE(GrPackage) CPACK_SET(CPACK_COMPONENT_GROUP_VOLK_DESCRIPTION "Vector optimized library of kernels") CPACK_COMPONENT("volk_runtime" GROUP "Volk" DISPLAY_NAME "Runtime" DESCRIPTION "Dynamic link libraries" ) CPACK_COMPONENT("volk_devel" GROUP "Volk" DISPLAY_NAME "Development" DESCRIPTION "C++ headers, package config, import libraries" ) IF(ENABLE_VOLK) ADD_SUBDIRECTORY(volk) ENDIF(ENABLE_VOLK) ######################################################################## # Add subdirectories ######################################################################## ADD_SUBDIRECTORY(gruel) ADD_SUBDIRECTORY(gnuradio-core) ADD_SUBDIRECTORY(grc) ADD_SUBDIRECTORY(docs) ADD_SUBDIRECTORY(gr-atsc) ADD_SUBDIRECTORY(gr-audio) ADD_SUBDIRECTORY(gr-comedi) ADD_SUBDIRECTORY(gr-digital) ADD_SUBDIRECTORY(gr-noaa) ADD_SUBDIRECTORY(gr-pager) ADD_SUBDIRECTORY(gr-qtgui) ADD_SUBDIRECTORY(gr-trellis) ADD_SUBDIRECTORY(gr-uhd) ADD_SUBDIRECTORY(gr-video-sdl) ADD_SUBDIRECTORY(gr-vocoder) ADD_SUBDIRECTORY(gr-wxgui) #finalize cpack after subdirs processed INCLUDE(GrPackage) CPACK_FINALIZE() ######################################################################## # Print summary ######################################################################## GR_PRINT_COMPONENT_SUMMARY() MESSAGE(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}") MESSAGE(STATUS "Building for version: ${VERSION}")