From 849f8efca42b659bf7e8fe17156ee0aa67b47233 Mon Sep 17 00:00:00 2001 From: Steve Markgraf Date: Wed, 26 Feb 2020 23:36:28 +0100 Subject: [PATCH] Modernize CMake New minimum version is CMake 3.7.2. This patch has been rebased to incorporate changes that happened since the creation of the original patch. Original Author: A. Maitland Bottoms , 07 Sep 2018 --- CMakeLists.txt | 78 +++++----- cmake/Modules/FindLibUSB.cmake | 55 ------- cmake/Modules/FindThreads.cmake | 246 -------------------------------- src/CMakeLists.txt | 121 ++++++++-------- 4 files changed, 105 insertions(+), 395 deletions(-) delete mode 100644 cmake/Modules/FindLibUSB.cmake delete mode 100644 cmake/Modules/FindThreads.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f34904d..419908a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,26 +19,20 @@ ######################################################################## # Project setup ######################################################################## -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.7.2) project(rtlsdr C) -# CMP0075 Include file check macros honor CMAKE_REQUIRED_LIBRARIES -if(POLICY CMP0075) - cmake_policy(SET CMP0075 NEW) -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 ${PROJECT_SOURCE_DIR}/cmake/Modules) -if(NOT LIB_INSTALL_DIR) - set(LIB_INSTALL_DIR lib) -endif() +include(GNUInstallDirs) +include(GenerateExportHeader) +include(CMakePackageConfigHelpers) # Set the version information here set(VERSION_INFO_MAJOR_VERSION 0) # increment major on api compatibility changes @@ -66,12 +60,12 @@ 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) +find_package(PkgConfig) +pkg_check_modules(LIBUSB libusb-1.0 IMPORTED_TARGET) if(NOT LIBUSB_FOUND) message(FATAL_ERROR "LibUSB 1.0 required to compile rtl-sdr") @@ -79,21 +73,6 @@ endif() if(NOT THREADS_FOUND) message(FATAL_ERROR "pthreads(-win32) required to compile rtl-sdr") endif() -######################################################################## -# Setup the include and linker paths -######################################################################## -include_directories( - ${PROJECT_SOURCE_DIR}/include - ${LIBUSB_INCLUDE_DIR} - ${THREADS_PTHREADS_INCLUDE_DIR} -) - -#link_directories( -# ... -#) - -# Set component parameters -#set(INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE) ######################################################################## # Create uninstall target @@ -137,10 +116,18 @@ else (ENABLE_ZEROCOPY) message (STATUS "Building with usbfs zero-copy support disabled, use -DENABLE_ZEROCOPY=ON to enable") endif (ENABLE_ZEROCOPY) +######################################################################## +# Install public header files +######################################################################## +install(FILES + include/rtl-sdr.h + include/rtl-sdr_export.h + DESTINATION include +) + ######################################################################## # Add subdirectories ######################################################################## -add_subdirectory(include) add_subdirectory(src) ######################################################################## @@ -164,11 +151,6 @@ IF(CMAKE_CROSSCOMPILING) 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( ${CMAKE_CURRENT_SOURCE_DIR}/librtlsdr.pc.in ${CMAKE_CURRENT_BINARY_DIR}/librtlsdr.pc @@ -176,9 +158,37 @@ CONFIGURE_FILE( INSTALL( FILES ${CMAKE_CURRENT_BINARY_DIR}/librtlsdr.pc - DESTINATION ${LIB_INSTALL_DIR}/pkgconfig + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig ) +######################################################################## +# Create CMake Config File +######################################################################## +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/rtlsdr/rtlsdrConfigVersion.cmake" + VERSION ${VERSION} + COMPATIBILITY AnyNewerVersion + ) + +configure_file(cmake/rtlsdrConfig.cmake + "${CMAKE_CURRENT_BINARY_DIR}/rtlsdr/rtlsdrConfig.cmake" + COPYONLY + ) + +set(ConfigPackageLocation lib/cmake/rtlsdr) +install(EXPORT RTLSDR-export + FILE rtlsdrTargets.cmake + NAMESPACE rtlsdr:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/rtlsdr/ + ) +install( + FILES + cmake/rtlsdrConfig.cmake + "${CMAKE_CURRENT_BINARY_DIR}/rtlsdr/rtlsdrConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/rtlsdr/ + COMPONENT Devel + ) + ######################################################################## # Print Summary ######################################################################## diff --git a/cmake/Modules/FindLibUSB.cmake b/cmake/Modules/FindLibUSB.cmake deleted file mode 100644 index abe6ee4..0000000 --- a/cmake/Modules/FindLibUSB.cmake +++ /dev/null @@ -1,55 +0,0 @@ -if(NOT LIBUSB_FOUND) - pkg_check_modules (LIBUSB_PKG libusb-1.0 libusb) - find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h - PATHS - ${LIBUSB_PKG_INCLUDE_DIRS} - /usr/include/libusb-1.0 - /usr/include - /usr/local/include - ) - -#standard library name for libusb-1.0 -set(libusb1_library_names usb-1.0 libusb-1.0) - -#libusb-1.0 compatible library on freebsd -if((CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") OR (CMAKE_SYSTEM_NAME STREQUAL "kFreeBSD") OR (CMAKE_SYSTEM_NAME STREQUAL "GNU")) - list(APPEND libusb1_library_names usb) -endif() - - find_library(LIBUSB_LIBRARIES - NAMES ${libusb1_library_names} - PATHS - ${LIBUSB_PKG_LIBRARY_DIRS} - /usr/lib - /usr/local/lib - ) - -include(CheckFunctionExists) -if(LIBUSB_INCLUDE_DIRS) - set(CMAKE_REQUIRED_INCLUDES ${LIBUSB_INCLUDE_DIRS}) -endif() -if(LIBUSB_LIBRARIES) - set(CMAKE_REQUIRED_LIBRARIES ${LIBUSB_LIBRARIES}) -endif() - -CHECK_FUNCTION_EXISTS("libusb_handle_events_timeout_completed" HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED) -if(HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED) - add_definitions(-DHAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED=1) -endif(HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED) - -CHECK_FUNCTION_EXISTS("libusb_error_name" HAVE_LIBUSB_ERROR_NAME) -if(HAVE_LIBUSB_ERROR_NAME) - add_definitions(-DHAVE_LIBUSB_ERROR_NAME=1) -endif(HAVE_LIBUSB_ERROR_NAME) - -if(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES) - set(LIBUSB_FOUND TRUE CACHE INTERNAL "libusb-1.0 found") - message(STATUS "Found libusb-1.0: ${LIBUSB_INCLUDE_DIR}, ${LIBUSB_LIBRARIES}") -else(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES) - set(LIBUSB_FOUND FALSE CACHE INTERNAL "libusb-1.0 found") - message(STATUS "libusb-1.0 not found.") -endif(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES) - -mark_as_advanced(LIBUSB_INCLUDE_DIR LIBUSB_LIBRARIES) - -endif(NOT LIBUSB_FOUND) diff --git a/cmake/Modules/FindThreads.cmake b/cmake/Modules/FindThreads.cmake deleted file mode 100644 index 8028b15..0000000 --- a/cmake/Modules/FindThreads.cmake +++ /dev/null @@ -1,246 +0,0 @@ -# Updated FindThreads.cmake that supports pthread-win32 -# Downloaded from http://www.vtk.org/Bug/bug_view_advanced_page.php?bug_id=6399 - -# - This module determines the thread library of the system. -# -# The following variables are set -# CMAKE_THREAD_LIBS_INIT - the thread library -# CMAKE_USE_SPROC_INIT - are we using sproc? -# CMAKE_USE_WIN32_THREADS_INIT - using WIN32 threads? -# CMAKE_USE_PTHREADS_INIT - are we using pthreads -# CMAKE_HP_PTHREADS_INIT - are we using hp pthreads -# -# If use of pthreads-win32 is desired, the following variables -# can be set. -# -# THREADS_USE_PTHREADS_WIN32 - -# Setting this to true searches for the pthreads-win32 -# port (since CMake 2.8.0) -# -# THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME -# C = no exceptions (default) -# (NOTE: This is the default scheme on most POSIX thread -# implementations and what you should probably be using) -# CE = C++ Exception Handling -# SE = Structure Exception Handling (MSVC only) -# (NOTE: Changing this option from the default may affect -# the portability of your application. See pthreads-win32 -# documentation for more details.) -# -#====================================================== -# Example usage where threading library -# is provided by the system: -# -# find_package(Threads REQUIRED) -# add_executable(foo foo.cc) -# target_link_libraries(foo ${CMAKE_THREAD_LIBS_INIT}) -# -# Example usage if pthreads-win32 is desired on Windows -# or a system provided thread library: -# -# set(THREADS_USE_PTHREADS_WIN32 true) -# find_package(Threads REQUIRED) -# include_directories(${THREADS_PTHREADS_INCLUDE_DIR}) -# -# add_executable(foo foo.cc) -# target_link_libraries(foo ${CMAKE_THREAD_LIBS_INIT}) -# - -INCLUDE (CheckIncludeFiles) -INCLUDE (CheckLibraryExists) -SET(Threads_FOUND FALSE) - -IF(WIN32 AND NOT CYGWIN AND THREADS_USE_PTHREADS_WIN32) - SET(_Threads_ptwin32 true) -ENDIF() - -# Do we have sproc? -IF(CMAKE_SYSTEM MATCHES IRIX) - CHECK_INCLUDE_FILES("sys/types.h;sys/prctl.h" CMAKE_HAVE_SPROC_H) -ENDIF() - -IF(CMAKE_HAVE_SPROC_H) - # We have sproc - SET(CMAKE_USE_SPROC_INIT 1) - -ELSEIF(_Threads_ptwin32) - - IF(NOT DEFINED THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME) - # Assign the default scheme - SET(THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME "C") - ELSE() - # Validate the scheme specified by the user - IF(NOT THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "C" AND - NOT THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "CE" AND - NOT THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "SE") - MESSAGE(FATAL_ERROR "See documentation for FindPthreads.cmake, only C, CE, and SE modes are allowed") - ENDIF() - IF(NOT MSVC AND THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "SE") - MESSAGE(FATAL_ERROR "Structured Exception Handling is only allowed for MSVC") - ENDIF(NOT MSVC AND THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "SE") - ENDIF() - - FIND_PATH(THREADS_PTHREADS_INCLUDE_DIR pthread.h) - - # Determine the library filename - IF(MSVC) - SET(_Threads_pthreads_libname - pthreadV${THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME}2) - ELSEIF(MINGW) - SET(_Threads_pthreads_libname - pthreadG${THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME}2) - ELSE() - MESSAGE(FATAL_ERROR "This should never happen") - ENDIF() - - # Use the include path to help find the library if possible - SET(_Threads_lib_paths "") - IF(THREADS_PTHREADS_INCLUDE_DIR) - GET_FILENAME_COMPONENT(_Threads_root_dir - ${THREADS_PTHREADS_INCLUDE_DIR} PATH) - SET(_Threads_lib_paths ${_Threads_root_dir}/lib) - ENDIF() - FIND_LIBRARY(THREADS_PTHREADS_WIN32_LIBRARY - NAMES ${_Threads_pthreads_libname} - PATHS ${_Threads_lib_paths} - DOC "The Portable Threads Library for Win32" - NO_SYSTEM_PATH - ) - - IF(THREADS_PTHREADS_INCLUDE_DIR AND THREADS_PTHREADS_WIN32_LIBRARY) - MARK_AS_ADVANCED(THREADS_PTHREADS_INCLUDE_DIR) - SET(CMAKE_THREAD_LIBS_INIT ${THREADS_PTHREADS_WIN32_LIBRARY}) - SET(CMAKE_HAVE_THREADS_LIBRARY 1) - SET(Threads_FOUND TRUE) - ENDIF() - - MARK_AS_ADVANCED(THREADS_PTHREADS_WIN32_LIBRARY) - -ELSE() - # Do we have pthreads? - CHECK_INCLUDE_FILES("pthread.h" CMAKE_HAVE_PTHREAD_H) - IF(CMAKE_HAVE_PTHREAD_H) - - # - # We have pthread.h - # Let's check for the library now. - # - SET(CMAKE_HAVE_THREADS_LIBRARY) - IF(NOT THREADS_HAVE_PTHREAD_ARG) - - # Do we have -lpthreads - CHECK_LIBRARY_EXISTS(pthreads pthread_create "" CMAKE_HAVE_PTHREADS_CREATE) - IF(CMAKE_HAVE_PTHREADS_CREATE) - SET(CMAKE_THREAD_LIBS_INIT "-lpthreads") - SET(CMAKE_HAVE_THREADS_LIBRARY 1) - SET(Threads_FOUND TRUE) - ENDIF() - - # Ok, how about -lpthread - CHECK_LIBRARY_EXISTS(pthread pthread_create "" CMAKE_HAVE_PTHREAD_CREATE) - IF(CMAKE_HAVE_PTHREAD_CREATE) - SET(CMAKE_THREAD_LIBS_INIT "-lpthread") - SET(Threads_FOUND TRUE) - SET(CMAKE_HAVE_THREADS_LIBRARY 1) - ENDIF() - - IF(CMAKE_SYSTEM MATCHES "SunOS.*") - # On sun also check for -lthread - CHECK_LIBRARY_EXISTS(thread thr_create "" CMAKE_HAVE_THR_CREATE) - IF(CMAKE_HAVE_THR_CREATE) - SET(CMAKE_THREAD_LIBS_INIT "-lthread") - SET(CMAKE_HAVE_THREADS_LIBRARY 1) - SET(Threads_FOUND TRUE) - ENDIF() - ENDIF(CMAKE_SYSTEM MATCHES "SunOS.*") - - ENDIF(NOT THREADS_HAVE_PTHREAD_ARG) - - IF(NOT CMAKE_HAVE_THREADS_LIBRARY) - # If we did not found -lpthread, -lpthread, or -lthread, look for -pthread - IF("THREADS_HAVE_PTHREAD_ARG" MATCHES "^THREADS_HAVE_PTHREAD_ARG") - MESSAGE(STATUS "Check if compiler accepts -pthread") - TRY_RUN(THREADS_PTHREAD_ARG THREADS_HAVE_PTHREAD_ARG - ${CMAKE_BINARY_DIR} - ${CMAKE_ROOT}/Modules/CheckForPthreads.c - CMAKE_FLAGS -DLINK_LIBRARIES:STRING=-pthread - COMPILE_OUTPUT_VARIABLE OUTPUT) - - IF(THREADS_HAVE_PTHREAD_ARG) - IF(THREADS_PTHREAD_ARG MATCHES "^2$") - SET(Threads_FOUND TRUE) - MESSAGE(STATUS "Check if compiler accepts -pthread - yes") - ELSE() - MESSAGE(STATUS "Check if compiler accepts -pthread - no") - FILE(APPEND - ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log - "Determining if compiler accepts -pthread returned ${THREADS_PTHREAD_ARG} instead of 2. The compiler had the following output:\n${OUTPUT}\n\n") - ENDIF() - ELSE() - MESSAGE(STATUS "Check if compiler accepts -pthread - no") - FILE(APPEND - ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log - "Determining if compiler accepts -pthread failed with the following output:\n${OUTPUT}\n\n") - ENDIF() - - ENDIF("THREADS_HAVE_PTHREAD_ARG" MATCHES "^THREADS_HAVE_PTHREAD_ARG") - - IF(THREADS_HAVE_PTHREAD_ARG) - SET(Threads_FOUND TRUE) - SET(CMAKE_THREAD_LIBS_INIT "-pthread") - ENDIF() - - ENDIF(NOT CMAKE_HAVE_THREADS_LIBRARY) - ENDIF(CMAKE_HAVE_PTHREAD_H) -ENDIF() - -IF(CMAKE_THREAD_LIBS_INIT) - SET(CMAKE_USE_PTHREADS_INIT 1) - SET(Threads_FOUND TRUE) -ENDIF() - -IF(CMAKE_SYSTEM MATCHES "Windows" - AND NOT THREADS_USE_PTHREADS_WIN32) - SET(CMAKE_USE_WIN32_THREADS_INIT 1) - SET(Threads_FOUND TRUE) -ENDIF() - -IF(CMAKE_USE_PTHREADS_INIT) - IF(CMAKE_SYSTEM MATCHES "HP-UX-*") - # Use libcma if it exists and can be used. It provides more - # symbols than the plain pthread library. CMA threads - # have actually been deprecated: - # http://docs.hp.com/en/B3920-90091/ch12s03.html#d0e11395 - # http://docs.hp.com/en/947/d8.html - # but we need to maintain compatibility here. - # The CMAKE_HP_PTHREADS setting actually indicates whether CMA threads - # are available. - CHECK_LIBRARY_EXISTS(cma pthread_attr_create "" CMAKE_HAVE_HP_CMA) - IF(CMAKE_HAVE_HP_CMA) - SET(CMAKE_THREAD_LIBS_INIT "-lcma") - SET(CMAKE_HP_PTHREADS_INIT 1) - SET(Threads_FOUND TRUE) - ENDIF(CMAKE_HAVE_HP_CMA) - SET(CMAKE_USE_PTHREADS_INIT 1) - ENDIF() - - IF(CMAKE_SYSTEM MATCHES "OSF1-V*") - SET(CMAKE_USE_PTHREADS_INIT 0) - SET(CMAKE_THREAD_LIBS_INIT ) - ENDIF() - - IF(CMAKE_SYSTEM MATCHES "CYGWIN_NT*") - SET(CMAKE_USE_PTHREADS_INIT 1) - SET(Threads_FOUND TRUE) - SET(CMAKE_THREAD_LIBS_INIT ) - SET(CMAKE_USE_WIN32_THREADS_INIT 0) - ENDIF() -ENDIF(CMAKE_USE_PTHREADS_INIT) - -INCLUDE(FindPackageHandleStandardArgs) -IF(_Threads_ptwin32) - FIND_PACKAGE_HANDLE_STANDARD_ARGS(Threads DEFAULT_MSG - THREADS_PTHREADS_WIN32_LIBRARY THREADS_PTHREADS_INCLUDE_DIR) -ELSE() - FIND_PACKAGE_HANDLE_STANDARD_ARGS(Threads DEFAULT_MSG Threads_FOUND) -ENDIF() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5d6aff0..33faee7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,69 +1,66 @@ -# Copyright 2012 OSMOCOM Project +# Copyright 2012-2020 Osmocom Project # # This file is part of rtl-sdr # -# GNU Radio is free software; you can redistribute it and/or modify +# This program 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. +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. # -# GNU Radio is distributed in the hope that it will be useful, +# This program 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. - -MACRO(RTLSDR_APPEND_SRCS) - LIST(APPEND rtlsdr_srcs ${ARGV}) -ENDMACRO(RTLSDR_APPEND_SRCS) - -RTLSDR_APPEND_SRCS( - librtlsdr.c - tuner_e4k.c - tuner_fc0012.c - tuner_fc0013.c - tuner_fc2580.c - tuner_r82xx.c -) - -######################################################################## -# Set up Windows DLL resource files -######################################################################## -IF(MSVC) - include(${PROJECT_SOURCE_DIR}/cmake/Modules/Version.cmake) - - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/rtlsdr.rc.in - ${CMAKE_CURRENT_BINARY_DIR}/rtlsdr.rc - @ONLY) - - RTLSDR_APPEND_SRCS(${CMAKE_CURRENT_BINARY_DIR}/rtlsdr.rc) -ENDIF(MSVC) +# along with this program. If not, see . ######################################################################## # Setup shared library variant ######################################################################## -add_library(rtlsdr_shared SHARED ${rtlsdr_srcs}) -target_link_libraries(rtlsdr_shared ${LIBUSB_LIBRARIES}) -set_target_properties(rtlsdr_shared PROPERTIES DEFINE_SYMBOL "rtlsdr_EXPORTS") -set_target_properties(rtlsdr_shared PROPERTIES OUTPUT_NAME rtlsdr) -set_target_properties(rtlsdr_shared PROPERTIES SOVERSION ${MAJOR_VERSION}) -set_target_properties(rtlsdr_shared PROPERTIES VERSION ${LIBVER}) +add_library(rtlsdr SHARED librtlsdr.c + tuner_e4k.c tuner_fc0012.c tuner_fc0013.c tuner_fc2580.c tuner_r82xx.c) +target_link_libraries(rtlsdr PkgConfig::LIBUSB) +target_include_directories(rtlsdr PUBLIC + $ + $ # /include + ) +set_target_properties(rtlsdr PROPERTIES DEFINE_SYMBOL "rtlsdr_EXPORTS") +set_target_properties(rtlsdr PROPERTIES OUTPUT_NAME rtlsdr) +set_target_properties(rtlsdr PROPERTIES SOVERSION ${MAJOR_VERSION}) +set_target_properties(rtlsdr PROPERTIES VERSION ${LIBVER}) +generate_export_header(rtlsdr) ######################################################################## # Setup static library variant ######################################################################## -add_library(rtlsdr_static STATIC ${rtlsdr_srcs}) -target_link_libraries(rtlsdr_static ${LIBUSB_LIBRARIES}) +add_library(rtlsdr_static STATIC librtlsdr.c + tuner_e4k.c tuner_fc0012.c tuner_fc0013.c tuner_fc2580.c tuner_r82xx.c) +target_link_libraries(rtlsdr_static PkgConfig::LIBUSB) +target_include_directories(rtlsdr_static PUBLIC + $ + $ # /include + ) set_property(TARGET rtlsdr_static APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" ) if(NOT WIN32) # Force same library filename for static and shared variants of the library set_target_properties(rtlsdr_static PROPERTIES OUTPUT_NAME rtlsdr) endif() +generate_export_header(rtlsdr_static) + +######################################################################## +# Set up Windows DLL resource files +######################################################################## +IF(MSVC) + include(${CMAKE_SOURCE_DIR}/cmake/Modules/Version.cmake) + + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/rtlsdr.rc.in + ${CMAKE_CURRENT_BINARY_DIR}/rtlsdr.rc + @ONLY) + target_sources(rtlsdr ${CMAKE_CURRENT_BINARY_DIR}/rtlsdr.rc) + target_sources(rtlsdr_static ${CMAKE_CURRENT_BINARY_DIR}/rtlsdr.rc) +ENDIF(MSVC) ######################################################################## # Setup libraries used in executables @@ -71,13 +68,14 @@ endif() add_library(convenience_static STATIC convenience/convenience.c ) - +target_include_directories(convenience_static + PRIVATE ${CMAKE_SOURCE_DIR}/include) if(WIN32) add_library(libgetopt_static STATIC getopt/getopt.c ) target_link_libraries(convenience_static - rtlsdr_shared + rtlsdr ) endif() @@ -92,41 +90,40 @@ add_executable(rtl_eeprom rtl_eeprom.c) add_executable(rtl_adsb rtl_adsb.c) add_executable(rtl_power rtl_power.c) add_executable(rtl_biast rtl_biast.c) -set(INSTALL_TARGETS rtlsdr_shared rtlsdr_static rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast) +set(INSTALL_TARGETS rtlsdr rtlsdr_static rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast) -target_link_libraries(rtl_sdr rtlsdr_shared convenience_static +target_link_libraries(rtl_sdr rtlsdr convenience_static ${LIBUSB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) -target_link_libraries(rtl_tcp rtlsdr_shared convenience_static +target_link_libraries(rtl_tcp rtlsdr convenience_static ${LIBUSB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) -target_link_libraries(rtl_test rtlsdr_shared convenience_static +target_link_libraries(rtl_test rtlsdr convenience_static ${LIBUSB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) -target_link_libraries(rtl_fm rtlsdr_shared convenience_static +target_link_libraries(rtl_fm rtlsdr convenience_static ${LIBUSB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) -target_link_libraries(rtl_eeprom rtlsdr_shared convenience_static +target_link_libraries(rtl_eeprom rtlsdr convenience_static ${LIBUSB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) -target_link_libraries(rtl_adsb rtlsdr_shared convenience_static +target_link_libraries(rtl_adsb rtlsdr convenience_static ${LIBUSB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) -target_link_libraries(rtl_power rtlsdr_shared convenience_static +target_link_libraries(rtl_power rtlsdr convenience_static ${LIBUSB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) -target_link_libraries(rtl_biast rtlsdr_shared convenience_static +target_link_libraries(rtl_biast rtlsdr convenience_static ${LIBUSB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) - if(UNIX) target_link_libraries(rtl_fm m) target_link_libraries(rtl_adsb m) @@ -159,8 +156,12 @@ endif() ######################################################################## # Install built library files & utilities ######################################################################## -install(TARGETS ${INSTALL_TARGETS} - LIBRARY DESTINATION ${LIB_INSTALL_DIR} # .so/.dylib file - ARCHIVE DESTINATION ${LIB_INSTALL_DIR} # .lib file - RUNTIME DESTINATION bin # .dll file -) +install(TARGETS rtlsdr EXPORT RTLSDR-export + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib file + ) +install(TARGETS rtlsdr_static EXPORT RTLSDR-export + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib file + ) +install(TARGETS rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power + DESTINATION ${CMAKE_INSTALL_BINDIR} + )