blob: d539b2432daa5f173076895607400c2f3a9c4937 [file] [log] [blame]
piotr437f5462014-02-04 17:57:25 +01001# Copyright 2011,2012 Free Software Foundation, Inc.
2#
3# This file is part of GNU Radio
4#
5# GNU Radio is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 3, or (at your option)
8# any later version.
9#
10# GNU Radio is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with GNU Radio; see the file COPYING. If not, write to
17# the Free Software Foundation, Inc., 51 Franklin Street,
18# Boston, MA 02110-1301, USA.
19
20
21########################################################################
22# Project setup
23########################################################################
24cmake_minimum_required(VERSION 2.6)
Piotr Krysik0f510c02017-08-25 21:49:27 +020025project(gr-gsm CXX C)
piotr437f5462014-02-04 17:57:25 +010026enable_testing()
27
ptrkrysik58213792014-10-30 09:05:15 +010028#set(CMAKE_BUILD_TYPE "Debug")
piotr437f5462014-02-04 17:57:25 +010029#select the release build type by default to get optimization flags
30if(NOT CMAKE_BUILD_TYPE)
31 set(CMAKE_BUILD_TYPE "Release")
32 message(STATUS "Build type not specified: defaulting to release.")
33endif(NOT CMAKE_BUILD_TYPE)
34set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
35
36list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
37
38########################################################################
Piotr Krysik59e4fe62017-09-24 11:26:54 +020039# Set cmake policies.
40########################################################################
41# This will suppress developer warnings during the cmake process that can occur
42# if a newer cmake version than the minimum is used.
43
44if(POLICY CMP0026)
45 cmake_policy(SET CMP0026 OLD)
46endif()
47if(POLICY CMP0043)
48 cmake_policy(SET CMP0043 OLD)
49endif()
50if(POLICY CMP0045)
51 cmake_policy(SET CMP0045 OLD)
52endif()
53if(POLICY CMP0046)
54 cmake_policy(SET CMP0046 OLD)
55endif()
56
57########################################################################
Piotr Krysikbb961c12017-08-24 15:35:42 +020058# Set version variables (
59########################################################################
60
61# Set the version information here
Piotr Krysik1e8a03c2017-08-30 10:59:44 +020062set(VERSION_INFO_MAJOR_VERSION 0)
Piotr Krysikd30d0c22018-08-10 21:13:59 +020063set(VERSION_INFO_API_COMPAT 42)
Piotr Krysik592ec9b2018-08-12 20:13:50 +020064set(VERSION_INFO_MINOR_VERSION 2)
Piotr Krysikd30d0c22018-08-10 21:13:59 +020065set(VERSION_INFO_MAINT_VERSION )
Piotr Krysikbb961c12017-08-24 15:35:42 +020066include(GrVersion) #setup version info
67
68########################################################################
piotr437f5462014-02-04 17:57:25 +010069# Compiler specific setup
70########################################################################
71if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
72 #http://gcc.gnu.org/wiki/Visibility
73 add_definitions(-fvisibility=hidden)
74endif()
75
76########################################################################
77# Find boost
78########################################################################
79if(UNIX AND EXISTS "/usr/lib64")
80 list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
81endif(UNIX AND EXISTS "/usr/lib64")
82set(Boost_ADDITIONAL_VERSIONS
83 "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"
84 "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"
85 "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"
86 "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"
87 "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"
88 "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"
89 "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"
90)
Piotr Krysik0ed39fb2018-02-27 08:35:22 +010091find_package(Boost "1.35" COMPONENTS filesystem system)# thread)
piotr437f5462014-02-04 17:57:25 +010092
93if(NOT Boost_FOUND)
ptrkrysik3c738102015-04-04 12:20:50 +020094 message(FATAL_ERROR "Boost required to compile gr-gsm")
piotr437f5462014-02-04 17:57:25 +010095endif()
96
Piotr Krysik7765bbd2016-04-14 13:20:38 +020097find_package(SWIG)
98
99if(SWIG_FOUND)
100 # Minimum SWIG version required is 1.3.31
101 set(SWIG_VERSION_CHECK FALSE)
102 if("${SWIG_VERSION}" VERSION_GREATER "1.3.30")
103 set(SWIG_VERSION_CHECK TRUE)
104 endif()
Piotr Krysikf6a76ab2016-04-26 16:00:48 +0200105else()
106 message(FATAL_ERROR "SWIG required to compile gr-gsm")
Piotr Krysik7765bbd2016-04-14 13:20:38 +0200107endif(SWIG_FOUND)
108
109
piotr437f5462014-02-04 17:57:25 +0100110########################################################################
111# Install directories
112########################################################################
113include(GrPlatform) #define LIB_SUFFIX
114set(GR_RUNTIME_DIR bin)
115set(GR_LIBRARY_DIR lib${LIB_SUFFIX})
ptrkrysik3be74a72014-12-13 10:11:00 +0100116set(GR_INCLUDE_DIR include/grgsm)
ptrkrysik3c738102015-04-04 12:20:50 +0200117set(GR_INCLUDE_DIR include/grgsm/misc_utils)
ptrkrysik3be74a72014-12-13 10:11:00 +0100118set(GR_INCLUDE_DIR include/grgsm/receiver)
119set(GR_INCLUDE_DIR include/grgsm/demapping)
120set(GR_INCLUDE_DIR include/grgsm/decoding)
piotr437f5462014-02-04 17:57:25 +0100121set(GR_DATA_DIR share)
122set(GR_PKG_DATA_DIR ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
123set(GR_DOC_DIR ${GR_DATA_DIR}/doc)
124set(GR_PKG_DOC_DIR ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
125set(GR_CONF_DIR etc)
126set(GR_PKG_CONF_DIR ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
127set(GR_LIBEXEC_DIR libexec)
128set(GR_PKG_LIBEXEC_DIR ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
129set(GRC_BLOCKS_DIR ${GR_PKG_DATA_DIR}/grc/blocks)
130
131########################################################################
132# Find gnuradio build dependencies
133########################################################################
Piotr Krysik4a1ca982016-07-15 13:39:19 +0200134set(GR_REQUIRED_COMPONENTS RUNTIME FILTER PMT)
David Holmc7f26822014-12-03 22:18:12 +0100135find_package(Gnuradio)
ptrkrysikaea7f342014-12-03 00:37:57 +0100136find_package(Volk)
piotr437f5462014-02-04 17:57:25 +0100137find_package(CppUnit)
Piotr Krysik1a5e87e2018-03-04 19:36:24 +0100138#find_package(Doxygen)
Vasil Velichkovf1b6c6b2018-06-05 19:48:46 +0300139
140option(LOCAL_OSMOCOM "Build with local osmocom libraries" OFF)
Piotr Krysik1a5e87e2018-03-04 19:36:24 +0100141find_package(Libosmocore)
142find_package(Libosmocodec)
143find_package(Libosmocoding)
Piotr Krysikc711e972018-06-18 14:53:59 +0200144find_package(Libosmogsm)
Piotr Krysik1a5e87e2018-03-04 19:36:24 +0100145
Vasil Velichkov9b5519d2018-04-30 20:01:16 +0300146if(NOT PKG_CONFIG_FOUND)
147 message(FATAL_ERROR "pkg-config is required to compile gr-gsm")
148endif()
piotr437f5462014-02-04 17:57:25 +0100149if(NOT GNURADIO_RUNTIME_FOUND)
ptrkrysik3c738102015-04-04 12:20:50 +0200150 message(FATAL_ERROR "GnuRadio Runtime required to compile gr-gsm")
piotr437f5462014-02-04 17:57:25 +0100151endif()
ptrkrysikaea7f342014-12-03 00:37:57 +0100152if(NOT VOLK_FOUND)
ptrkrysik3c738102015-04-04 12:20:50 +0200153 message(FATAL_ERROR "Volk library required to compile gr-gsm")
ptrkrysikaea7f342014-12-03 00:37:57 +0100154endif()
Piotr Krysik1a5e87e2018-03-04 19:36:24 +0100155if(NOT CPPUNIT_FOUND)
156 message(FATAL_ERROR "CppUnit required to compile gr-gsm")
157endif()
Piotr Krysikac140212018-06-19 12:07:28 +0200158
159if(NOT LIBOSMOCORE_FOUND OR NOT LIBOSMOCODEC_FOUND OR NOT LIBOSMOGSM_FOUND)
160 set(LOCAL_OSMOCOM ON)
161endif()
162
Vasil Velichkovf1b6c6b2018-06-05 19:48:46 +0300163if(LOCAL_OSMOCOM)
164 message(STATUS "Compiling with local osmocom libraries")
Piotr Krysik1a5e87e2018-03-04 19:36:24 +0100165elseif(NOT LIBOSMOCODING_FOUND)
166 message(STATUS "Compiling local version of libosmocoding")
167endif()
piotr437f5462014-02-04 17:57:25 +0100168
169########################################################################
ptrkrysik35433842014-08-14 14:56:16 +0200170# Setup doxygen option
171########################################################################
Piotr Krysik79e712c2018-02-27 11:17:38 +0100172#if(DOXYGEN_FOUND)
173# option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
174#else(DOXYGEN_FOUND)
Piotr Krysik1a5e87e2018-03-04 19:36:24 +0100175 option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF) #TODO: write doxygen docs
Piotr Krysik79e712c2018-02-27 11:17:38 +0100176#endif(DOXYGEN_FOUND)
ptrkrysik35433842014-08-14 14:56:16 +0200177
178########################################################################
piotr437f5462014-02-04 17:57:25 +0100179# Setup the include and linker paths
180########################################################################
Piotr Krysik63492bd2018-03-04 23:01:43 +0100181
Piotr Krysik1a5e87e2018-03-04 19:36:24 +0100182list (APPEND grgsm_include_directories
piotr437f5462014-02-04 17:57:25 +0100183 ${CMAKE_SOURCE_DIR}/lib
184 ${CMAKE_SOURCE_DIR}/include
185 ${CMAKE_BINARY_DIR}/lib
186 ${CMAKE_BINARY_DIR}/include
187 ${Boost_INCLUDE_DIRS}
188 ${CPPUNIT_INCLUDE_DIRS}
Piotr Krysik4a1ca982016-07-15 13:39:19 +0200189 ${GNURADIO_ALL_INCLUDE_DIRS}
Piotr Krysik1e73e042018-02-27 08:37:13 +0100190 ${CMAKE_SOURCE_DIR}/lib/decoding
piotr437f5462014-02-04 17:57:25 +0100191)
192
Piotr Krysik1a5e87e2018-03-04 19:36:24 +0100193if(LIBOSMOCORE_FOUND)
194 list (APPEND grgsm_include_directories
195 ${LIBOSMOCORE_INCLUDE_DIR}
196 )
197endif()
198
199include_directories(
200 ${grgsm_include_directories}
201)
202
Piotr Krysik63492bd2018-03-04 23:01:43 +0100203list (APPEND grgsm_link_directories
piotr437f5462014-02-04 17:57:25 +0100204 ${Boost_LIBRARY_DIRS}
205 ${CPPUNIT_LIBRARY_DIRS}
Piotr Krysik4a1ca982016-07-15 13:39:19 +0200206 ${GNURADIO_ALL_LIBRARY_DIRS}
piotr437f5462014-02-04 17:57:25 +0100207)
208
Piotr Krysik1a5e87e2018-03-04 19:36:24 +0100209if(LIBOSMOCORE_FOUND)
210 list (APPEND grgsm_link_directories
211 ${LIBOSMOCORE_LIBRARY_DIRS}
212 )
213endif()
214
215link_directories(
216 ${grgsm_link_directories}
217)
218
piotr437f5462014-02-04 17:57:25 +0100219# Set component parameters
220set(GR_GSM_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
221set(GR_GSM_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
222
223########################################################################
Steve Glass3f4b9492016-01-24 10:46:24 +1000224# On Apple only, set install name and use rpath correctly, if not already set
225########################################################################
226if(APPLE)
227 if(NOT CMAKE_INSTALL_NAME_DIR)
228 set(CMAKE_INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE PATH "Library Install Name Destination Directory" FORCE)
229 endif(NOT CMAKE_INSTALL_NAME_DIR)
230 if(NOT CMAKE_INSTALL_RPATH)
231 set(cmakE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE PATH "Library Install RPath" FORCE)
232 endif(NOT CMAKE_INSTALL_RPATH)
233 if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
234 set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE BOOL "Do Build Using Library Install RPath" FORCE)
235 endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
236endif(APPLE)
237
238########################################################################
piotr437f5462014-02-04 17:57:25 +0100239# Create uninstall target
240########################################################################
241configure_file(
242 ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in
243 ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
244@ONLY)
245
246add_custom_target(uninstall
247 ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
248)
249
250########################################################################
251# Add subdirectories
252########################################################################
ptrkrysik3c738102015-04-04 12:20:50 +0200253add_subdirectory(include/grgsm)
piotr437f5462014-02-04 17:57:25 +0100254add_subdirectory(lib)
255add_subdirectory(swig)
256add_subdirectory(python)
257add_subdirectory(grc)
258add_subdirectory(apps)
259add_subdirectory(docs)
260
261########################################################################
262# Install cmake search helper for this library
263########################################################################
Martin Jesper Low Madsenf3105d92015-06-24 13:33:56 +0200264install(FILES cmake/Modules/gr-gsmConfig.cmake
ptrkrysikec6306b2014-12-13 11:40:35 +0100265 DESTINATION lib${LIB_SUFFIX}/cmake/grgsm
piotr437f5462014-02-04 17:57:25 +0100266)
Piotr Krysik7765bbd2016-04-14 13:20:38 +0200267
268########################################################################
Piotr Krysikbb961c12017-08-24 15:35:42 +0200269# Print summary
270########################################################################
271message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
Piotr Krysikdea05742017-08-25 21:55:41 +0200272message(STATUS "Building for version: ${VERSION} / ${LIBVER}")