# Copyright 2012 OSMOCOM Project
#
# This file is part of rtl-sdr
#
# 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.
########################################################################
# Project setup
########################################################################
cmake_minimum_required ( VERSION 2.6 )
project ( rtlsdr C )
#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 )
if ( NOT LIB_INSTALL_DIR )
set ( LIB_INSTALL_DIR lib )
endif ( )
# Set the version information here
set ( VERSION_INFO_MAJOR_VERSION 0 ) # increment major on api compatibility changes
set ( VERSION_INFO_MINOR_VERSION 6 ) # increment minor on feature-level changes
set ( VERSION_INFO_PATCH_VERSION git ) # increment patch for bug fixes and docs
include ( Version ) # setup version info
########################################################################
# Compiler specific setup
########################################################################
if ( CMAKE_COMPILER_IS_GNUCC AND NOT WIN32 )
ADD_DEFINITIONS ( -Wall )
ADD_DEFINITIONS ( -Wextra )
ADD_DEFINITIONS ( -Wno-unused-parameter )
ADD_DEFINITIONS ( -Wno-unused )
ADD_DEFINITIONS ( -Wsign-compare )
ADD_DEFINITIONS ( -Wdeclaration-after-statement )
#http://gcc.gnu.org/wiki/Visibility
add_definitions ( -fvisibility=hidden )
elseif ( MSVC14 OR MSVC14 )
#pthread-w32 issue, timespec is now part of time.h
ADD_DEFINITIONS ( -D_TIMESPEC_DEFINED )
endif ( )
########################################################################
# Find build dependencies
########################################################################
find_package ( PkgConfig )
find_package ( LibUSB )
if ( WIN32 AND NOT MINGW )
set ( THREADS_USE_PTHREADS_WIN32 true )
endif ( )
find_package ( Threads )
if ( NOT LIBUSB_FOUND )
message ( FATAL_ERROR "LibUSB 1.0 required to compile rtl-sdr" )
endif ( )
if ( NOT THREADS_FOUND )
message ( FATAL_ERROR "pthreads(-win32) required to compile rtl-sdr" )
endif ( )
########################################################################
# Setup the include and linker paths
########################################################################
include_directories (
$ { C M A K E _ S O U R C E _ D I R } / i n c l u d e
$ { L I B U S B _ I N C L U D E _ D I R }
$ { T H R E A D S _ P T H R E A D S _ I N C L U D E _ D I R }
)
#link_directories(
# ...
#)
# Set component parameters
#set(INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
########################################################################
# Create uninstall target
########################################################################
configure_file (
$ { C M A K E _ S O U R C E _ D I R } / c m a k e / c m a k e _ u n i n s t a l l . c m a k e . i n
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e _ u n i n s t a l l . c m a k e
@ O N L Y )
add_custom_target ( uninstall
$ { C M A K E _ C O M M A N D } - P $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e _ u n i n s t a l l . c m a k e
)
########################################################################
# Install udev rules
########################################################################
option ( INSTALL_UDEV_RULES "Install udev rules for RTL-SDR" OFF )
if ( INSTALL_UDEV_RULES )
install (
F I L E S r t l - s d r . r u l e s
D E S T I N A T I O N " / e t c / u d e v / r u l e s . d "
C O M P O N E N T " u d e v "
)
else ( INSTALL_UDEV_RULES )
message ( STATUS "Udev rules not being installed, install them with -DINSTALL_UDEV_RULES=ON" )
endif ( INSTALL_UDEV_RULES )
option ( DETACH_KERNEL_DRIVER "Detach kernel driver if loaded" OFF )
if ( DETACH_KERNEL_DRIVER )
message ( STATUS "Building with kernel driver detaching enabled" )
add_definitions ( -DDETACH_KERNEL_DRIVER=1 )
else ( DETACH_KERNEL_DRIVER )
message ( STATUS "Building with kernel driver detaching disabled, use -DDETACH_KERNEL_DRIVER=ON to enable" )
endif ( DETACH_KERNEL_DRIVER )
option ( ENABLE_ZEROCOPY "Enable usbfs zero-copy support" OFF )
if ( ENABLE_ZEROCOPY )
message ( STATUS "Building with usbfs zero-copy support enabled" )
add_definitions ( -DENABLE_ZEROCOPY=1 )
else ( ENABLE_ZEROCOPY )
message ( STATUS "Building with usbfs zero-copy support disabled, use -DENABLE_ZEROCOPY=ON to enable" )
endif ( ENABLE_ZEROCOPY )
########################################################################
# Add subdirectories
########################################################################
add_subdirectory ( include )
add_subdirectory ( src )
########################################################################
# Create Pkg Config File
########################################################################
FOREACH ( inc ${ LIBUSB_INCLUDE_DIR } )
LIST ( APPEND RTLSDR_PC_CFLAGS "-I${inc}" )
ENDFOREACH ( inc )
FOREACH ( lib ${ LIBUSB_LIBRARY_DIRS } )
LIST ( APPEND RTLSDR_PC_LIBS "-L${lib}" )
ENDFOREACH ( lib )
# use space-separation format for the pc file
STRING ( REPLACE ";" " " RTLSDR_PC_CFLAGS "${RTLSDR_PC_CFLAGS}" )
STRING ( REPLACE ";" " " RTLSDR_PC_LIBS "${RTLSDR_PC_LIBS}" )
# unset these vars to avoid hard-coded paths to cross environment
IF ( CMAKE_CROSSCOMPILING )
UNSET ( RTLSDR_PC_CFLAGS )
UNSET ( RTLSDR_PC_LIBS )
ENDIF ( CMAKE_CROSSCOMPILING )
set ( prefix ${ CMAKE_INSTALL_PREFIX } )
set ( exec_prefix \${prefix})
set ( libdir \${exec_prefix}/${LIB_INSTALL_DIR})
set ( includedir \${prefix}/include)
CONFIGURE_FILE (
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / l i b r t l s d r . p c . i n
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / l i b r t l s d r . p c
@ O N L Y )
INSTALL (
F I L E S $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / l i b r t l s d r . p c
D E S T I N A T I O N $ { L I B _ I N S T A L L _ D I R } / p k g c o n f i g
)
########################################################################
# Print Summary
########################################################################
MESSAGE ( STATUS "Building for version: ${VERSION} / ${LIBVER}" )
MESSAGE ( STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}" )