2016-02-28 16:03:37 -05:00
|
|
|
cmake_minimum_required(VERSION 3.1.0)
|
2014-11-05 07:34:33 -05:00
|
|
|
|
2019-05-02 02:07:05 -04:00
|
|
|
project(sdrangel)
|
|
|
|
|
2019-05-01 05:54:58 -04:00
|
|
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
|
2016-02-24 05:51:36 -05:00
|
|
|
|
2019-05-03 11:46:01 -04:00
|
|
|
# disable only when needed
|
|
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
|
2019-05-02 15:34:25 -04:00
|
|
|
# For some external project macros
|
|
|
|
include(ExternalProject)
|
|
|
|
|
2019-05-02 05:03:40 -04:00
|
|
|
# configure version
|
2019-05-03 11:46:01 -04:00
|
|
|
set(sdrangel_VERSION_MAJOR "4")
|
2019-05-03 14:14:23 -04:00
|
|
|
set(sdrangel_VERSION_MINOR "6")
|
|
|
|
set(sdrangel_VERSION_PATCH "0")
|
2019-05-03 11:46:01 -04:00
|
|
|
set(sdrangel_VERSION_SUFFIX "")
|
|
|
|
|
2019-05-04 08:26:19 -04:00
|
|
|
# SDRAngel cmake options
|
|
|
|
option(DEBUG_OUTPUT "Print debug messages" OFF)
|
|
|
|
option(SANITIZE_ADDRESS "Activate memory address sanitization" OFF)
|
|
|
|
option(RX_SAMPLE_24BIT "Internal 24 bit Rx DSP" ON)
|
|
|
|
option(BUILD_SERVER "Build Server" ON)
|
|
|
|
option(BUILD_GUI "Build GUI" ON)
|
|
|
|
option(BUNDLE "Enable distribution bundle" OFF)
|
|
|
|
option(FORCE_SSSE3 "Compile with SSSE3 instruction only" OFF)
|
|
|
|
option(FORCE_SSE41 "Compile with SSE4.1 instruction only" OFF)
|
|
|
|
option(ENABLE_EXTERNAL_LIBRARIES "Build external libraries" OFF)
|
|
|
|
option(ENABLE_AIRSPY "Enable AirSpy support" ON)
|
|
|
|
option(ENABLE_AIRSPYHF "Enable AirSpyHF support" ON)
|
|
|
|
option(ENABLE_BLADERF "Enable bladeRF support" ON)
|
|
|
|
option(ENABLE_FUNCUBE "Enable FUNcube support" ON)
|
|
|
|
option(ENABLE_HACKRF "Enable HackRF support" ON)
|
|
|
|
option(ENABLE_IIO "Enable liniio support like PlutoSDR" ON)
|
|
|
|
option(ENABLE_LIMESUITE "Enable limesuite support" ON)
|
|
|
|
option(ENABLE_MIRISDR "Enable LibMiri for old SDRPlay" ON)
|
|
|
|
option(ENABLE_PERSEUS "Enable perseus support" ON)
|
|
|
|
option(ENABLE_RTLSDR "Enable rtl-sdr support" ON)
|
|
|
|
option(ENABLE_SOAPYSDR "Enable SoapySDR support" ON)
|
|
|
|
option(ENABLE_XTRX "Enable XTRX support" ON)
|
|
|
|
|
2019-05-03 11:46:01 -04:00
|
|
|
# Set additional project information
|
|
|
|
set(COMPANY "f4exb")
|
|
|
|
add_definitions("-DCOMPANY=\"${COMPANY}\"")
|
|
|
|
set(APPLICATION_NAME "SDRangel")
|
|
|
|
add_definitions("-DAPPLICATION_NAME=\"${APPLICATION_NAME}\"")
|
2019-05-04 07:46:03 -04:00
|
|
|
set(APPLICATION_MAINTAINER="Edouard Griffiths, F4EXB <f4exb06@gmail.com>")
|
2019-05-03 11:46:01 -04:00
|
|
|
set(COPYRIGHT "Copyright (c) 2019 Edouard Griffiths. All rights reserved.")
|
|
|
|
add_definitions("-DCOPYRIGHT=\"${COPYRIGHT}\"")
|
|
|
|
set(IDENTIFIER "com.${COMPANY}.${APPLICATION_NAME}")
|
|
|
|
add_definitions("-DIDENTIFIER=\"${IDENTIFIER}\"")
|
2019-05-02 05:03:40 -04:00
|
|
|
|
|
|
|
find_package(Git)
|
2019-05-03 11:46:01 -04:00
|
|
|
if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git/")
|
|
|
|
execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse --short HEAD
|
|
|
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
|
|
|
RESULT_VARIABLE res
|
|
|
|
OUTPUT_VARIABLE out
|
|
|
|
ERROR_QUIET
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
if(NOT res)
|
|
|
|
set(sdrangel_VERSION_SUFFIX "-${out}")
|
2019-05-02 05:03:40 -04:00
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2019-05-03 11:46:01 -04:00
|
|
|
set(sdrangel_VERSION "${sdrangel_VERSION_MAJOR}.${sdrangel_VERSION_MINOR}.${sdrangel_VERSION_PATCH}${sdrangel_VERSION_SUFFIX}")
|
|
|
|
message(STATUS "${APPLICATION_NAME} Version: ${sdrangel_VERSION}")
|
|
|
|
add_definitions("-DSDRANGEL_LIB_VERSION=\"${sdrangel_VERSION_MAJOR}.${sdrangel_VERSION_MINOR}.${sdrangel_VERSION_PATCH}\"")
|
|
|
|
add_definitions("-DSDRANGEL_VERSION=\"${sdrangel_VERSION}\"")
|
|
|
|
|
|
|
|
# configure CPACK infomation
|
2019-05-04 08:26:19 -04:00
|
|
|
set(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
|
2019-05-03 11:46:01 -04:00
|
|
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "SDR Rx/Tx software for Airspy, Airspy HF+, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube")
|
|
|
|
set(CPACK_PACKAGE_VENDOR "${COMPANY}")
|
|
|
|
set(CPACK_PACKAGE_CONTACT "https://github.com/f4exb/sdrangel")
|
|
|
|
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/Readme.md")
|
|
|
|
set(CPACK_PACKAGE_VERSION "${sdrangel_VERSION}")
|
|
|
|
set(CPACK_PACKAGE_VERSION_MAJOR ${sdrangel_VERSION_MAJOR})
|
|
|
|
set(CPACK_PACKAGE_VERSION_MINOR ${sdrangel_VERSION_MINOR})
|
|
|
|
set(CPACK_PACKAGE_VERSION_PATCH ${sdrangel_VERSION_PATCH})
|
|
|
|
set(CPACK_SOURCE_STRIP_FILES true)
|
|
|
|
set(CPACK_STRIP_FILES true)
|
|
|
|
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
|
|
|
|
set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/Readme.md")
|
|
|
|
set(CPACK_SOURCE_IGNORE_FILES "${PROJECT_BINARY_DIR};/.git/;.gitignore;menu.yml;.travis.yml;.appveyor.yml;default.nix;.envrc;TODOs.org;/.scripts/")
|
|
|
|
set(CPACK_SOURCE_GENERATOR "ZIP;TGZ")
|
|
|
|
set(CPACK_GENERATOR "ZIP;TGZ")
|
2016-02-24 05:51:36 -05:00
|
|
|
|
2019-05-01 13:16:37 -04:00
|
|
|
# if we don't set build_type
|
2019-05-03 11:46:01 -04:00
|
|
|
if(NOT DEFINED CMAKE_BUILD_TYPE OR "${CMAKE_BUILD_TYPE}" STREQUAL "")
|
|
|
|
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
|
2019-05-01 13:16:37 -04:00
|
|
|
endif()
|
2019-05-03 11:46:01 -04:00
|
|
|
message(STATUS "Build type set to ${CMAKE_BUILD_TYPE}")
|
2019-05-01 13:16:37 -04:00
|
|
|
|
|
|
|
# as default disable qDebug()
|
2019-05-01 05:54:58 -04:00
|
|
|
if(NOT DEBUG_OUTPUT)
|
2019-05-03 11:46:01 -04:00
|
|
|
add_definitions("-DQT_NO_DEBUG_OUTPUT")
|
2019-05-01 05:54:58 -04:00
|
|
|
endif()
|
2014-11-05 07:34:33 -05:00
|
|
|
|
2019-05-01 13:16:37 -04:00
|
|
|
# declare build structures
|
|
|
|
# !! change sdrbase/plugin/pluginmanager.cpp too !!
|
2019-05-02 10:04:43 -04:00
|
|
|
if(WIN32)
|
2019-05-04 08:26:19 -04:00
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
2019-05-02 10:04:43 -04:00
|
|
|
else()
|
2019-05-04 08:26:19 -04:00
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/)
|
2019-05-02 10:04:43 -04:00
|
|
|
endif()
|
2019-05-01 13:16:37 -04:00
|
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
|
|
set(BUILD_PLUGINS_DIR ${CMAKE_BINARY_DIR}/lib/plugins)
|
|
|
|
set(BUILD_PLUGINSSRV_DIR ${CMAKE_BINARY_DIR}/lib/pluginssrv)
|
2019-05-06 08:09:28 -04:00
|
|
|
set(INSTALL_BIN_DIR "bin")
|
2019-05-03 11:46:01 -04:00
|
|
|
# use only lib when create .app/.dmg
|
|
|
|
if(APPLE AND BUNDLE AND BUILD_GUI)
|
|
|
|
set(INSTALL_LIB_DIR "lib")
|
2019-05-06 08:09:28 -04:00
|
|
|
set(INSTALL_DOC_DIR "doc")
|
2019-05-03 11:46:01 -04:00
|
|
|
else()
|
|
|
|
set(INSTALL_LIB_DIR "lib/${CMAKE_PROJECT_NAME}")
|
2019-05-06 08:09:28 -04:00
|
|
|
set(INSTALL_DOC_DIR "share/${CMAKE_PROJECT_NAME}")
|
2019-05-03 11:46:01 -04:00
|
|
|
endif()
|
2019-05-01 13:16:37 -04:00
|
|
|
set(INSTALL_PLUGINS_DIR ${INSTALL_LIB_DIR}/plugins)
|
|
|
|
set(INSTALL_PLUGINSSRV_DIR ${INSTALL_LIB_DIR}/pluginssrv)
|
2019-05-02 15:34:25 -04:00
|
|
|
set(EXTERNAL_BUILD_LIBRARIES "${CMAKE_BINARY_DIR}/external_build")
|
|
|
|
set(EXTERNAL_INSTALL_LIBRARIES "${CMAKE_BINARY_DIR}/external")
|
2019-05-01 13:16:37 -04:00
|
|
|
|
2019-05-04 08:26:19 -04:00
|
|
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
|
|
|
set(LINUX TRUE)
|
|
|
|
# populate distribution name
|
|
|
|
# LSB_CODENAME will hold trusty
|
|
|
|
find_program(LSB_RELEASE_EXECUTABLE lsb_release)
|
|
|
|
if(LSB_RELEASE_EXECUTABLE)
|
|
|
|
execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -cs
|
|
|
|
OUTPUT_VARIABLE LSB_CODENAME
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
|
)
|
|
|
|
endif()
|
2019-05-06 08:09:28 -04:00
|
|
|
configure_file("${CMAKE_SOURCE_DIR}/custom/desktop/${CMAKE_PROJECT_NAME}.desktop.in"
|
|
|
|
"${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.desktop" @ONLY)
|
2019-05-04 08:26:19 -04:00
|
|
|
elseif(APPLE)
|
2019-05-04 07:46:03 -04:00
|
|
|
# check
|
|
|
|
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9")
|
|
|
|
message(STATUS "Build for macOS version: ${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
2019-05-03 11:46:01 -04:00
|
|
|
set(CMAKE_MACOSX_RPATH ON)
|
2019-05-06 08:09:28 -04:00
|
|
|
|
|
|
|
configure_file("${CMAKE_SOURCE_DIR}/custom/desktop/MacOSXBundleInfo.plist.in"
|
|
|
|
"${CMAKE_BINARY_DIR}/Info.plist" @ONLY)
|
2019-05-04 08:26:19 -04:00
|
|
|
elseif (WIN32)
|
2019-05-03 11:46:01 -04:00
|
|
|
set(EXTERNAL_LIBRARY_FOLDER "${CMAKE_SOURCE_DIR}/external/windows")
|
|
|
|
set(BOOST_ROOT "${EXTERNAL_LIBRARY_FOLDER}/boot")
|
|
|
|
set(FFTW3F_INCLUDE_DIRS="${EXTERNAL_LIBRARY_FOLDER}/fftw-3/include")
|
|
|
|
set(FFTW3F_LIBRARIES="${EXTERNAL_LIBRARY_FOLDER}/fftw-3/libfftw3f-3.dll")
|
|
|
|
set(LIBUSB_INCLUDE_DIR="${EXTERNAL_LIBRARY_FOLDER}/libusb/include")
|
|
|
|
set(LIBUSB_LIBRARIES="${EXTERNAL_LIBRARY_FOLDER}/libusb/libusb-1.0.x64.dll")
|
|
|
|
set(OpenCV_INCLUDE_DIRS="${EXTERNAL_LIBRARY_FOLDER}/opencv/include")
|
|
|
|
set(OpenCV_LIBS="${EXTERNAL_LIBRARY_FOLDER}/opencv/opencv_ffmpeg410_64.dll")
|
2019-05-02 10:56:07 -04:00
|
|
|
endif()
|
2019-05-01 13:16:37 -04:00
|
|
|
|
2019-05-02 15:34:25 -04:00
|
|
|
# enable 24 bit receiving path
|
|
|
|
if (RX_SAMPLE_24BIT)
|
|
|
|
message(STATUS "Compiling for 24 bit Rx DSP chain")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSDR_RX_SAMPLE_24BIT")
|
|
|
|
else()
|
|
|
|
message(STATUS "Compiling for 16 bit Rx DSP chain")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if (SANITIZE_ADDRESS)
|
|
|
|
message(STATUS "Activate address sanitization")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
|
|
|
|
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fsanitize=address")
|
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address")
|
|
|
|
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} -fsanitize=address")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if (C_CLANG OR C_GCC)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wvla -Woverloaded-virtual -ffast-math -ftree-vectorize ${EXTRA_FLAGS}")
|
|
|
|
elseif (C_MSVC)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W3 -MP ${EXTRA_FLAGS}")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if (C_CLANG)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ferror-limit=1")
|
|
|
|
elseif (C_GCC)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmax-errors=1")
|
|
|
|
endif()
|
|
|
|
|
2019-05-01 05:54:58 -04:00
|
|
|
# set compiler
|
|
|
|
include(FindCompiler)
|
2014-05-18 11:52:39 -04:00
|
|
|
|
2019-05-01 05:54:58 -04:00
|
|
|
# find cpu flags (and set compiler)
|
|
|
|
include(FindCPUflags)
|
2014-05-18 11:52:39 -04:00
|
|
|
|
2019-05-01 05:54:58 -04:00
|
|
|
# Instruct CMake to run moc automatically when needed
|
2014-05-18 11:52:39 -04:00
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
|
|
|
2019-05-01 05:54:58 -04:00
|
|
|
# Create code from a list of Qt designer ui files
|
|
|
|
set(CMAKE_AUTOUIC ON)
|
|
|
|
|
|
|
|
# https://cmake.org/cmake/help/v3.0/manual/cmake-qt.7.html#autorcc
|
|
|
|
set(CMAKE_AUTORCC TRUE)
|
|
|
|
|
|
|
|
# As moc files are generated in the binary dir,
|
|
|
|
# tell CMake to always look for includes there:
|
|
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
|
|
|
|
# Qt requirements
|
2019-05-03 11:46:01 -04:00
|
|
|
set(_required_qt_version "5.6.0")
|
2019-05-01 05:54:58 -04:00
|
|
|
find_package(Qt5 COMPONENTS Core REQUIRED)
|
|
|
|
find_package(Qt5 COMPONENTS Widgets REQUIRED)
|
|
|
|
find_package(Qt5 COMPONENTS Multimedia REQUIRED)
|
|
|
|
find_package(Qt5 COMPONENTS MultimediaWidgets REQUIRED)
|
|
|
|
|
|
|
|
# for the server we don't need OpenGL components
|
|
|
|
if (BUILD_GUI)
|
2019-05-02 02:07:05 -04:00
|
|
|
find_package(OpenGL REQUIRED)
|
2019-05-01 05:54:58 -04:00
|
|
|
find_package(Qt5 COMPONENTS OpenGL REQUIRED)
|
2019-04-15 04:54:27 -04:00
|
|
|
endif()
|
|
|
|
|
2019-05-01 05:54:58 -04:00
|
|
|
# other requirements
|
|
|
|
find_package(PkgConfig REQUIRED)
|
2017-08-12 06:07:51 -04:00
|
|
|
find_package(Boost REQUIRED)
|
2019-05-01 05:54:58 -04:00
|
|
|
find_package(FFTW3F REQUIRED)
|
2019-05-02 15:34:25 -04:00
|
|
|
find_package(LibUSB REQUIRED) # used by so many packages
|
2019-05-01 05:54:58 -04:00
|
|
|
find_package(OpenCV) # channeltx/modatv
|
2016-10-25 18:57:46 -04:00
|
|
|
|
2019-05-01 05:54:58 -04:00
|
|
|
# macOS compatibility
|
2016-06-28 04:20:47 -04:00
|
|
|
if(APPLE)
|
2019-05-04 07:46:03 -04:00
|
|
|
find_package(Iconv)
|
2015-10-21 20:19:07 -04:00
|
|
|
endif()
|
|
|
|
|
2019-05-02 15:34:25 -04:00
|
|
|
# include external cmake if needed
|
|
|
|
if(ENABLE_EXTERNAL_LIBRARIES)
|
|
|
|
add_subdirectory(external)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# after external libraries
|
|
|
|
find_package(LibDSDcc)
|
|
|
|
find_package(LibMbe)
|
|
|
|
find_package(SerialDV)
|
|
|
|
find_package(CM256cc)
|
|
|
|
find_package(Codec2)
|
|
|
|
|
2019-05-01 05:54:58 -04:00
|
|
|
# Devices
|
|
|
|
if(ENABLE_AIRSPY)
|
|
|
|
find_package(LibAIRSPY)
|
2014-05-18 11:52:39 -04:00
|
|
|
endif()
|
2019-05-01 05:54:58 -04:00
|
|
|
if(ENABLE_AIRSPYHF)
|
|
|
|
find_package(LibAIRSPYHF)
|
2017-09-05 02:27:15 -04:00
|
|
|
endif()
|
2019-05-01 05:54:58 -04:00
|
|
|
if(ENABLE_BLADERF)
|
|
|
|
find_package(LibBLADERF)
|
2019-04-15 15:43:48 -04:00
|
|
|
endif()
|
2019-05-01 05:54:58 -04:00
|
|
|
if(ENABLE_HACKRF)
|
|
|
|
find_package(LibHACKRF)
|
2019-04-15 15:43:48 -04:00
|
|
|
endif()
|
2019-05-01 05:54:58 -04:00
|
|
|
if(ENABLE_LIMESUITE)
|
|
|
|
find_package(LimeSuite)
|
2019-04-15 15:43:48 -04:00
|
|
|
endif()
|
2019-05-01 05:54:58 -04:00
|
|
|
if(ENABLE_IIO) # PlutoSDR
|
|
|
|
find_package(LibIIO)
|
2019-04-15 15:43:48 -04:00
|
|
|
endif()
|
2019-05-01 05:54:58 -04:00
|
|
|
if(ENABLE_MIRISDR)
|
|
|
|
find_package(LibMiriSDR)
|
2019-04-15 15:43:48 -04:00
|
|
|
endif()
|
2019-05-01 05:54:58 -04:00
|
|
|
if(ENABLE_PERSEUS)
|
|
|
|
find_package(LibPerseus)
|
|
|
|
endif()
|
|
|
|
if(ENABLE_RTLSDR)
|
|
|
|
find_package(LibRTLSDR)
|
|
|
|
endif()
|
|
|
|
if(ENABLE_SOAPYSDR)
|
2019-05-02 02:07:05 -04:00
|
|
|
find_package(SoapySDR 0.4.0)
|
2019-05-01 05:54:58 -04:00
|
|
|
endif()
|
|
|
|
if(ENABLE_XTRX)
|
|
|
|
find_package(LibXTRX)
|
2017-09-05 02:27:15 -04:00
|
|
|
endif()
|
2019-05-01 05:54:58 -04:00
|
|
|
|
|
|
|
if (CODEC2_FOUND)
|
|
|
|
add_subdirectory(libfreedv)
|
|
|
|
endif(CODEC2_FOUND)
|
|
|
|
|
|
|
|
if(ENABLE_FUNCUBE AND UNIX AND LIBUSB_FOUND)
|
|
|
|
add_subdirectory(fcdlib)
|
|
|
|
add_subdirectory(fcdhid)
|
2018-12-03 19:39:41 -05:00
|
|
|
endif()
|
2019-05-01 05:54:58 -04:00
|
|
|
|
|
|
|
# base libraries
|
|
|
|
add_subdirectory(sdrbase)
|
2018-04-23 10:43:18 -04:00
|
|
|
add_subdirectory(sdrbench)
|
2017-11-11 05:11:44 -05:00
|
|
|
add_subdirectory(httpserver)
|
|
|
|
add_subdirectory(logging)
|
2018-02-22 12:43:28 -05:00
|
|
|
add_subdirectory(qrtplib)
|
2017-11-16 21:17:15 -05:00
|
|
|
add_subdirectory(swagger)
|
2019-05-01 05:54:58 -04:00
|
|
|
add_subdirectory(devices)
|
|
|
|
|
|
|
|
if (BUILD_GUI)
|
|
|
|
add_subdirectory(sdrgui)
|
|
|
|
add_subdirectory(plugins)
|
|
|
|
endif()
|
2014-05-18 11:52:39 -04:00
|
|
|
|
2019-05-01 05:54:58 -04:00
|
|
|
if (BUILD_SERVER)
|
|
|
|
add_subdirectory(sdrsrv)
|
|
|
|
set(SERVER_MODE ON)
|
|
|
|
add_definitions(-DSERVER_MODE)
|
|
|
|
add_subdirectory(pluginssrv)
|
|
|
|
remove_definitions(-DSERVER_MODE)
|
|
|
|
set(SERVER_MODE OFF)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# includes needed by the following target
|
2014-05-18 11:52:39 -04:00
|
|
|
include_directories(
|
2016-10-25 18:57:46 -04:00
|
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
|
|
${CMAKE_SOURCE_DIR}/sdrbase
|
2019-05-01 05:54:58 -04:00
|
|
|
${CMAKE_SOURCE_DIR}/exports
|
2017-10-22 13:12:43 -04:00
|
|
|
${CMAKE_SOURCE_DIR}/sdrgui
|
2019-05-01 05:54:58 -04:00
|
|
|
${CMAKE_SOURCE_DIR}/sdrsrv
|
|
|
|
${CMAKE_SOURCE_DIR}/sdrbench
|
2017-11-11 05:11:44 -05:00
|
|
|
${CMAKE_SOURCE_DIR}/logging
|
2016-10-25 18:57:46 -04:00
|
|
|
${OPENGL_INCLUDE_DIR}
|
2014-05-18 11:52:39 -04:00
|
|
|
)
|
|
|
|
|
2019-05-01 05:54:58 -04:00
|
|
|
############ build sdrangel benchmark ################
|
2018-04-23 10:43:18 -04:00
|
|
|
set(sdrangelbench_SOURCES
|
|
|
|
appbench/main.cpp
|
|
|
|
)
|
|
|
|
|
|
|
|
add_executable(sdrangelbench
|
|
|
|
${sdrangelbench_SOURCES}
|
|
|
|
)
|
|
|
|
|
|
|
|
target_link_libraries(sdrangelbench
|
2019-05-01 05:54:58 -04:00
|
|
|
Qt5::Multimedia
|
2018-04-23 10:43:18 -04:00
|
|
|
sdrbench
|
|
|
|
logging
|
|
|
|
)
|
|
|
|
|
2019-05-01 05:54:58 -04:00
|
|
|
############ build sdrangel gui ################
|
2018-12-03 19:39:41 -05:00
|
|
|
if (BUILD_GUI)
|
2019-05-01 05:54:58 -04:00
|
|
|
set(sdrangel_SOURCES
|
|
|
|
app/main.cpp
|
|
|
|
sdrgui/resources/sdrangel.rc
|
|
|
|
)
|
|
|
|
|
2019-05-06 08:09:28 -04:00
|
|
|
add_executable(${CMAKE_PROJECT_NAME}
|
2019-05-03 11:46:01 -04:00
|
|
|
${sdrangel_SOURCES}
|
2019-05-01 05:54:58 -04:00
|
|
|
)
|
|
|
|
|
2019-05-06 08:09:28 -04:00
|
|
|
target_link_libraries(${CMAKE_PROJECT_NAME}
|
2019-05-03 11:46:01 -04:00
|
|
|
${OPENGL_LIBRARIES}
|
|
|
|
Qt5::Widgets
|
|
|
|
Qt5::Multimedia
|
|
|
|
sdrbase
|
|
|
|
sdrgui
|
|
|
|
logging
|
2019-05-01 05:54:58 -04:00
|
|
|
)
|
2018-12-03 19:39:41 -05:00
|
|
|
endif()
|
2019-05-01 05:54:58 -04:00
|
|
|
|
|
|
|
############ build sdrangel server ################
|
2018-12-03 19:39:41 -05:00
|
|
|
if (BUILD_SERVER)
|
2019-05-06 08:09:28 -04:00
|
|
|
set(sdrangelsrv_SOURCES
|
|
|
|
appsrv/main.cpp
|
2019-05-01 05:54:58 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
add_executable(sdrangelsrv
|
|
|
|
${sdrangelsrv_SOURCES}
|
|
|
|
)
|
|
|
|
|
|
|
|
target_link_libraries(sdrangelsrv
|
|
|
|
Qt5::Multimedia
|
|
|
|
sdrbase
|
|
|
|
sdrsrv
|
|
|
|
logging
|
|
|
|
)
|
2018-12-03 19:39:41 -05:00
|
|
|
endif()
|
2016-02-17 13:42:26 -05:00
|
|
|
|
2019-05-06 08:09:28 -04:00
|
|
|
############ install ##################
|
2019-05-07 03:57:08 -04:00
|
|
|
if(NOT CMAKE_INSTALL_RPATH)
|
|
|
|
set(CMAKE_INSTALL_RPATH
|
|
|
|
${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR} CACHE
|
|
|
|
PATH "Library Install RPath" FORCE)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# force full path
|
|
|
|
if(APPLE AND NOT CMAKE_INSTALL_NAME_DIR)
|
|
|
|
set(CMAKE_INSTALL_NAME_DIR
|
|
|
|
${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR} CACHE
|
|
|
|
PATH "Library Install Name Destination Directory" FORCE)
|
|
|
|
endif()
|
|
|
|
|
2019-05-06 08:09:28 -04:00
|
|
|
install(TARGETS sdrangelbench DESTINATION ${INSTALL_BIN_DIR})
|
|
|
|
if (BUILD_GUI)
|
|
|
|
install(TARGETS ${CMAKE_PROJECT_NAME} DESTINATION ${INSTALL_BIN_DIR})
|
|
|
|
endif()
|
|
|
|
if (BUILD_SERVER)
|
|
|
|
install(TARGETS sdrangelsrv DESTINATION ${INSTALL_BIN_DIR})
|
|
|
|
endif()
|
2019-05-03 11:46:01 -04:00
|
|
|
|
2019-05-06 08:09:28 -04:00
|
|
|
# install documentation
|
|
|
|
# TODO maybe install readme for every plugins
|
|
|
|
if (LINUX OR APPLE)
|
|
|
|
install(FILES ${CMAKE_SOURCE_DIR}/Readme.md DESTINATION ${INSTALL_DOC_DIR})
|
|
|
|
install(FILES ${CMAKE_SOURCE_DIR}/CHANGELOG DESTINATION ${INSTALL_DOC_DIR})
|
|
|
|
install(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION ${INSTALL_DOC_DIR})
|
|
|
|
endif()
|
2019-05-03 11:46:01 -04:00
|
|
|
|
2019-05-06 08:09:28 -04:00
|
|
|
#install files and directories (linux specific)
|
|
|
|
if (LINUX)
|
|
|
|
install(FILES ${CMAKE_BINARY_DIR}/sdrangel.desktop DESTINATION share/applications)
|
|
|
|
install(FILES ${CMAKE_SOURCE_DIR}/custom/desktop/sdrangel_icon.png DESTINATION share/pixmaps)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
############ uninstall target ################
|
|
|
|
configure_file(
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/include/uninstall.cmake.in"
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake"
|
|
|
|
IMMEDIATE @ONLY)
|
|
|
|
|
|
|
|
add_custom_target(uninstall
|
|
|
|
COMMAND ${CMAKE_COMMAND} -P
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake)
|
|
|
|
|
|
|
|
############ packaging ################
|
|
|
|
if(APPLE AND BUNDLE AND BUILD_GUI)
|
2019-05-03 11:46:01 -04:00
|
|
|
|
|
|
|
set(CPACK_GENERATOR "Bundle")
|
|
|
|
set(CPACK_BINARY_DRAGNDROP ON)
|
|
|
|
set(CPACK_BUNDLE_NAME "${APPLICATION_NAME}")
|
|
|
|
set(CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/custom/desktop/sdrangel_icon.icns")
|
|
|
|
set(CPACK_BUNDLE_PLIST "${CMAKE_BINARY_DIR}/Info.plist")
|
2019-05-06 08:09:28 -04:00
|
|
|
set(CPACK_BUNDLE_STARTUP_COMMAND "${CMAKE_SOURCE_DIR}/cmake/sdrangel.sh")
|
2019-05-03 11:46:01 -04:00
|
|
|
set(CPACK_BUNDLE_STARTUP_COMMAND "${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}")
|
2019-05-06 08:09:28 -04:00
|
|
|
set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/custom/desktop/sdrangel_icon.icns")
|
2019-05-04 07:46:03 -04:00
|
|
|
|
2019-05-06 08:09:28 -04:00
|
|
|
# fixup_bundle() doesn't work correctly with RPATH so, I move on ;-)
|
|
|
|
# GET_TARGET_PROPERTY(_qmake_path Qt5::qmake IMPORTED_LOCATION)
|
|
|
|
# GET_FILENAME_COMPONENT(_qt_bindir ${_qmake_path} DIRECTORY)
|
|
|
|
# INSTALL(
|
|
|
|
# CODE "EXECUTE_PROCESS(COMMAND \"${_qt_bindir}/macdeployqt\" \"\${CMAKE_INSTALL_PREFIX}/../../\"
|
2019-05-07 03:57:08 -04:00
|
|
|
# -appstore-compliant
|
|
|
|
# -executable=\"\${CMAKE_INSTALL_PREFIX}/${INSTALL_BIN_DIR}/sdrangel\"
|
|
|
|
# -executable=\"\${CMAKE_INSTALL_PREFIX}/${INSTALL_BIN_DIR}/sdrangelsrv\"
|
|
|
|
# -executable=\"\${CMAKE_INSTALL_PREFIX}/${INSTALL_BIN_DIR}/sdrangelbench\")"
|
|
|
|
# -libpath=\"${CMAKE_LIBRARY_OUTPUT_DIRECTORY}\")"
|
2019-05-06 08:09:28 -04:00
|
|
|
# # -libpath=\"\${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}\")"
|
2019-05-07 03:57:08 -04:00
|
|
|
# COMPONENT applications)
|
2019-05-06 08:09:28 -04:00
|
|
|
|
2019-05-07 03:57:08 -04:00
|
|
|
INSTALL(CODE "
|
|
|
|
SET(BU_COPY_FULL_FRAMEWORK_CONTENTS ON)
|
|
|
|
include(BundleUtilities)
|
|
|
|
fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/../../../${CPACK_BUNDLE_NAME}.app\" \"\" \"/opt/local/lib;/usr/local/lib\")
|
|
|
|
" COMPONENT Runtime)
|
2019-05-03 11:46:01 -04:00
|
|
|
|
|
|
|
elseif(LINUX AND BUNDLE)
|
|
|
|
|
2019-05-06 08:09:28 -04:00
|
|
|
find_program (DPKG_BUILDER dpkg-buildpackage DOC "Debian package builder")
|
|
|
|
if (DPKG_BUILDER)
|
|
|
|
#
|
|
|
|
# Derive the correct filename for a Debian package because the DEB
|
|
|
|
# generator doesn't do this correctly at present.
|
|
|
|
#
|
|
|
|
find_program (DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems")
|
|
|
|
if (DPKG_PROGRAM)
|
|
|
|
execute_process (
|
|
|
|
COMMAND ${DPKG_PROGRAM} --print-architecture
|
|
|
|
OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
|
)
|
|
|
|
else (DPKG_PROGRAM)
|
|
|
|
set (CPACK_DEBIAN_PACKAGE_ARCHITECTURE noarch)
|
|
|
|
endif (DPKG_PROGRAM)
|
|
|
|
|
|
|
|
# TODO:
|
|
|
|
# - perseus package
|
|
|
|
# - CHANGELOG see https://github.com/xbmc/xbmc/pull/9987/commits/0152e8f50c0f11c8bddcfdc65e1596851fe8b310
|
|
|
|
# - verify dpkg info
|
|
|
|
# - Boost seems used through Qt
|
|
|
|
|
|
|
|
# needs dpkg
|
|
|
|
set(CPACK_GENERATOR "DEB")
|
|
|
|
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION}_${LSB_CODENAME}_${CMAKE_SYSTEM_PROCESSOR}")
|
|
|
|
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${APPLICATION_MAINTAINER}")
|
|
|
|
set(CPACK_DEBIAN_PACKAGE_SECTION "hamradio")
|
|
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libasound2, libfftw3-single3, libgcc1, libgl1-mesa-glx, libqt5core5a, libqt5gui5, libqt5multimedia5, libqt5network5, libqt5opengl5, libqt5widgets5, libqt5multimedia5-plugins, libstdc++6, libusb-1.0-0, pulseaudio, libxml2, ffmpeg, libopus0, codec2, libairspy0, libhackrf0, librtlsdr0, libbladerf1, libmirisdr0, libiio0, soapysdr-tools")
|
|
|
|
|
|
|
|
if ("${LSB_CODENAME}" STREQUAL "buster") # Debian 10
|
|
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, libavcodec58, libavformat58, libairspyhf1, libopencv-imgproc3.2, libopencv-highgui3.2, limesuite")
|
|
|
|
elseif("${LSB_CODENAME}" STREQUAL "stretch") # Debian 9
|
|
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, libavcodec57, libavformat57, libopencv-imgproc2.45v5, libopencv-highgu2.4-deb0, limesuite")
|
|
|
|
elseif("${LSB_CODENAME}" STREQUAL "bionic") # Ubuntu 18.04
|
|
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, libavcodec57, libavformat57, libairspyhf0, libopencv-imgproc3.2, libopencv-highgui3.2, limesuite")
|
|
|
|
elseif("${LSB_CODENAME}" STREQUAL "xenial") # Ubuntu 16.04
|
|
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, libavcodec-ffmpeg56, libavformat-ffmpeg56, libopencv-imgproc2.4v5, libopencv-highgui2.4v5")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
set (CPACK_DEBIAN_PACKAGE_PACKAGE_SHLIBDEPS ON)
|
|
|
|
endif (DPKG_BUILDER)
|
2019-05-03 11:46:01 -04:00
|
|
|
|
2019-05-06 08:09:28 -04:00
|
|
|
find_program (RPMBUILDER rpmbuild DOC "RPM package builder")
|
|
|
|
if (RPMBUILDER)
|
|
|
|
# TODO
|
|
|
|
#list(APPEND CPACK_GENERATOR "RPM")
|
|
|
|
#set(CPACK_RPM_PACKAGE_RELEASE "1")
|
|
|
|
#set(CPACK_RPM_PACKAGE_LICENSE "GPL-3.0")
|
|
|
|
#set(CPACK_RPM_PACKAGE_REQUIRES "libusb")
|
|
|
|
#set (CPACK_RPM_PACKAGE_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
|
|
|
|
endif (RPMBUILDER)
|
2019-05-03 11:46:01 -04:00
|
|
|
|
|
|
|
elseif((WIN32 OR MINGW) AND BUNDLE)
|
|
|
|
|
2019-05-04 07:46:03 -04:00
|
|
|
#set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
|
2019-05-03 11:46:01 -04:00
|
|
|
|
2019-05-06 08:09:28 -04:00
|
|
|
list(APPEND CPACK_GENERATOR "NSIS")
|
|
|
|
set(CPACK_NSIS_PACKAGE_NAME "${APPLICATION_NAME}")
|
|
|
|
set(CPACK_NSIS_CONTACT "${APPLICATION_MAINTAINER}")
|
|
|
|
set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
|
|
|
|
set(CPACK_NSIS_MODIFY_PATH ON)
|
2019-05-03 11:46:01 -04:00
|
|
|
|
|
|
|
else()
|
|
|
|
|
|
|
|
if(NOT CMAKE_INSTALL_RPATH)
|
|
|
|
set(CMAKE_INSTALL_RPATH
|
|
|
|
${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR} CACHE
|
|
|
|
PATH "Library Install RPath" FORCE)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# force full path
|
|
|
|
if(APPLE AND NOT CMAKE_INSTALL_NAME_DIR)
|
|
|
|
set(CMAKE_INSTALL_NAME_DIR
|
|
|
|
${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR} CACHE
|
|
|
|
PATH "Library Install Name Destination Directory" FORCE)
|
|
|
|
endif()
|
|
|
|
|
2019-05-04 08:26:19 -04:00
|
|
|
endif(APPLE AND BUNDLE AND BUILD_GUI)
|
2016-02-24 05:51:36 -05:00
|
|
|
|
2019-05-03 11:46:01 -04:00
|
|
|
message(STATUS "CPack generators: ${CPACK_GENERATOR}")
|
|
|
|
include(CPack)
|