summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt113
-rw-r--r--cmake/Modules/targetConfig.cmake.in26
-rw-r--r--lib/CMakeLists.txt41
-rw-r--r--python/__init__.py2
-rw-r--r--swig/CMakeLists.txt22
5 files changed, 152 insertions, 52 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1306830..fdbdfe7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,7 +21,8 @@
########################################################################
# Project setup
########################################################################
-cmake_minimum_required(VERSION 2.6)
+cmake_minimum_required(VERSION 3.8)
+include(GNUInstallDirs)
project(gr-iqbalance CXX C)
enable_testing()
@@ -32,32 +33,53 @@ if(NOT CMAKE_BUILD_TYPE)
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 search path for cmake modules to OOT, Gnuradio
+########################################################################
+list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
+find_package(Gnuradio "3.8" REQUIRED runtime)
+
+# Set the version information here
+set(VERSION_INFO_MAJOR_VERSION 3)
+set(VERSION_INFO_API_COMPAT 8)
+set(VERSION_INFO_MINOR_VERSION 0)
+set(VERSION_INFO_MAINT_VERSION "")
+include(GrVersion) #setup version info
########################################################################
# 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()
+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()
+
########################################################################
# 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 system)
+find_package(Boost "1.67" REQUIRED system)
if(NOT Boost_FOUND)
message(FATAL_ERROR "Boost required to compile iqbalance")
@@ -68,7 +90,7 @@ endif()
########################################################################
find_package(FFTW3f)
-if(NOT FFTW3F_FOUND)
+if(NOT FFTW3f_FOUND)
message(FATAL_ERROR "FFTW3 required to compile iqbalance")
endif()
@@ -78,23 +100,33 @@ endif()
find_package(LibOsmoDSP)
if(LIBOSMODSP_FOUND)
- set(LIBOSMODSP_SOURCES "")
+ set(LIBOSMODSP_SEL_INCLUDE_DIRS ${LIBOSMODSP_INCLUDE_DIRS})
+ set(LIBOSMODSP_SEL_LIBRARIES ${LIBOSMODSP_LIBRARIES})
+ set(LIBOSMODSP_SEL_LIBRARY_DIRS ${LIBOSMODSP_LIBRARY_DIRS})
+ set(LIBOSMODSP_SEL_SOURCES "")
endif()
if(NOT LIBOSMODSP_FOUND)
message(STATUS "libosmodsp not found, using local checkout")
- set(LIBOSMODSP_INCLUDE_DIRS "libosmo-dsp/include/")
- set(LIBOSMODSP_LIBRARIES ${FFTW3F_LIBRARIES})
- set(LIBOSMODSP_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/libosmo-dsp/src/cxvec.c ${CMAKE_CURRENT_SOURCE_DIR}/libosmo-dsp/src/iqbal.c)
+ set(LIBOSMODSP_SEL_INCLUDE_DIRS ${FFTW3f_INCLUDE_DIRS} "libosmo-dsp/include/")
+ set(LIBOSMODSP_SEL_LIBRARIES ${FFTW3f_LIBRARIES})
+ set(LIBOSMODSP_SEL_LIBRARY_DIRS ${FFTW3f_LIBRARY_DIRS})
+ set(LIBOSMODSP_SEL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/libosmo-dsp/src/cxvec.c ${CMAKE_CURRENT_SOURCE_DIR}/libosmo-dsp/src/iqbal.c)
endif()
########################################################################
# Install directories
########################################################################
include(GrPlatform) #define LIB_SUFFIX
+
+if(NOT CMAKE_MODULES_DIR)
+ set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
+endif(NOT CMAKE_MODULES_DIR)
+
set(GR_RUNTIME_DIR bin)
set(GR_LIBRARY_DIR lib${LIB_SUFFIX})
set(GR_INCLUDE_DIR include)
+SET(GR_CMAKE_DIR ${CMAKE_MODULES_DIR}/gr-iqbal)
set(GR_DATA_DIR share)
set(GR_PKG_DATA_DIR ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
set(GR_DOC_DIR ${GR_DATA_DIR}/doc)
@@ -106,14 +138,28 @@ set(GR_PKG_LIBEXEC_DIR ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
set(GRC_BLOCKS_DIR ${GR_PKG_DATA_DIR}/grc/blocks)
########################################################################
-# Find gnuradio build dependencies
+# On Apple only, set install name and use rpath correctly, if not already set
########################################################################
-set(GR_REQUIRED_COMPONENTS RUNTIME)
-find_package(Gnuradio "3.7.0")
-if(NOT GNURADIO_RUNTIME_FOUND)
- message(FATAL_ERROR "GnuRadio Runtime required to compile iqbalance")
-endif()
+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
+########################################################################
find_package(Doxygen)
########################################################################
@@ -122,15 +168,13 @@ find_package(Doxygen)
include_directories(
${CMAKE_SOURCE_DIR}/include
${Boost_INCLUDE_DIRS}
- ${FFTW3F_INCLUDE_DIRS}
- ${LIBOSMODSP_INCLUDE_DIRS}
+ ${LIBOSMODSP_SEL_INCLUDE_DIRS}
${GNURADIO_ALL_INCLUDE_DIRS}
)
link_directories(
${Boost_LIBRARY_DIRS}
- ${FFTW3F_LIBRARY_DIRS}
- ${LIBOSMODSP_LIBRARY_DIRS}
+ ${LIBOSMODSP_SEL_LIBRARY_DIRS}
${GNURADIO_ALL_LIBRARY_DIRS}
)
@@ -178,3 +222,10 @@ install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-iqbalance.pc
DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
)
+
+########################################################################
+# Install cmake search helper for this library
+########################################################################
+#install(FILES cmake/Modules/gnuradio-iqbalanceConfig.cmake
+# DESTINATION ${CMAKE_MODULES_DIR}/gnuradio-iqbalance
+#)
diff --git a/cmake/Modules/targetConfig.cmake.in b/cmake/Modules/targetConfig.cmake.in
new file mode 100644
index 0000000..79e4a28
--- /dev/null
+++ b/cmake/Modules/targetConfig.cmake.in
@@ -0,0 +1,26 @@
+# Copyright 2018 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.
+
+include(CMakeFindDependencyMacro)
+
+set(target_deps "@TARGET_DEPENDENCIES@")
+foreach(dep IN LISTS target_deps)
+ find_dependency(${dep})
+endforeach()
+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 6e5df60..5fb9812 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -1,4 +1,7 @@
-# Copyright 2011 Free Software Foundation, Inc.
+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
+#
+# This file was generated by gr_modtool, a tool from the GNU Radio framework
+# This file is a part of gr-iqbal
#
# 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
@@ -20,26 +23,39 @@
########################################################################
include(GrPlatform) #define LIB_SUFFIX
-include_directories(${Boost_INCLUDE_DIR})
-link_directories(${Boost_LIBRARY_DIRS})
-
list(APPEND iqbalance_sources
fix_cc.cc
optimize_c.cc
)
-add_library(gnuradio-iqbalance SHARED ${iqbalance_sources} ${LIBOSMODSP_SOURCES})
-target_link_libraries(gnuradio-iqbalance ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} ${LIBOSMODSP_LIBRARIES})
+add_library(gnuradio-iqbalance SHARED ${iqbalance_sources} ${LIBOSMODSP_SEL_SOURCES})
+target_link_libraries(gnuradio-iqbalance gnuradio::gnuradio-runtime ${LIBOSMODSP_SEL_LIBRARIES})
+target_include_directories(gnuradio-iqbalance
+ PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
+ PUBLIC $<INSTALL_INTERFACE:include>
+ )
+set_target_properties(gnuradio-iqbalance PROPERTIES OUTPUT_NAME gnuradio-iqbalance)
set_target_properties(gnuradio-iqbalance PROPERTIES DEFINE_SYMBOL "gnuradio_iqbalance_EXPORTS")
+if(APPLE)
+ set_target_properties(gnuradio-iqbalance PROPERTIES
+ INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"
+ )
+endif(APPLE)
+
########################################################################
# Install built library files
########################################################################
-install(TARGETS gnuradio-iqbalance
- LIBRARY DESTINATION lib${LIB_SUFFIX} # .so/.dylib file
- ARCHIVE DESTINATION lib${LIB_SUFFIX} # .lib file
- RUNTIME DESTINATION bin # .dll file
-)
+include(GrMiscUtils)
+set(VERSION "3.8.0")
+set(LIBVER "3.8.0")
+GR_LIBRARY_FOO(gnuradio-iqbalance)
+
+########################################################################
+# Print summary
+########################################################################
+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
########################################################################
# Build and register unit test
@@ -47,7 +63,6 @@ install(TARGETS gnuradio-iqbalance
find_package(Boost COMPONENTS unit_test_framework)
include(GrTest)
-set(GR_TEST_TARGET_DEPS gnuradio-iqbalance)
+list(APPEND GR_TEST_TARGET_DEPS gnuradio-iqbalance)
#turn each test cpp file into an executable with an int main() function
add_definitions(-DBOOST_TEST_DYN_LINK -DBOOST_TEST_MAIN)
-
diff --git a/python/__init__.py b/python/__init__.py
index 63a8e51..36e4bbc 100644
--- a/python/__init__.py
+++ b/python/__init__.py
@@ -24,7 +24,7 @@ description here (python/__init__.py).
'''
# import swig generated symbols into the iqbalance namespace
-from iqbalance_swig import *
+from .iqbalance_swig import *
# import any pure python here
#
diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
index bac10ad..15a3b48 100644
--- a/swig/CMakeLists.txt
+++ b/swig/CMakeLists.txt
@@ -18,30 +18,38 @@
# Boston, MA 02110-1301, USA.
########################################################################
-# Setup swig generation
+# Include swig generation macros
########################################################################
find_package(SWIG)
-find_package(PythonLibs 2)
+find_package(PythonLibs 3)
if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
return()
endif()
include(GrSwig)
include(GrPython)
-foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
- list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
-endforeach(incdir)
+########################################################################
+# Setup swig generation
+########################################################################
+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
+
+set(GR_SWIG_LIBRARIES gnuradio-iqbalance)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/iqbalance_swig_doc.i)
set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include/gnuradio/iqbalance)
set(GR_SWIG_DOCS_TARGET_DEPS runtime_swig_swig_doc)
-set(GR_SWIG_LIBRARIES gnuradio-iqbalance)
-
GR_SWIG_MAKE(iqbalance_swig iqbalance_swig.i)
+########################################################################
+# Install the build swig module
+########################################################################
GR_SWIG_INSTALL(TARGETS iqbalance_swig DESTINATION ${GR_PYTHON_DIR}/gnuradio/iqbalance)
+########################################################################
+# Install swig .i files for development
+########################################################################
install(
FILES
iqbalance_swig.i