1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-12 11:26:11 -05:00

Merge pull request #1249 from srcejon/mac_package

Update cmake scripts to build a .dmg
This commit is contained in:
Edouard Griffiths 2022-05-18 12:49:23 +02:00 committed by GitHub
commit d79d121a6b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 581 additions and 110 deletions

View File

@ -281,17 +281,21 @@ elseif (WIN32)
)
endif()
# TODO: check if(DEFINED) and fix macports -D
# fix install path
set(CMAKE_INSTALL_RPATH
"${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}" CACHE
PATH "Library Install RPath" FORCE)
# Allow RPATH to files outside the build tree
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
# force full path
set(CMAKE_INSTALL_NAME_DIR
"${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}" CACHE
PATH "Library Install Name Destination Directory" FORCE)
# When building a bundle on MacOS, we want to keep build paths in the library
# so macdeployqt can find them. The following code is only for installing
if (NOT BUNDLE)
# TODO: check if(DEFINED) and fix macports -D
# fix install path
set(CMAKE_INSTALL_RPATH
"${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}" CACHE
PATH "Library Install RPath" FORCE)
# Allow RPATH to files outside the build tree
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
# force full path
set(CMAKE_INSTALL_NAME_DIR
"${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}" CACHE
PATH "Library Install Name Destination Directory" FORCE)
endif()
# enable 24 bit receiving path
if (RX_SAMPLE_24BIT)
@ -346,21 +350,7 @@ endif()
# other requirements
find_package(PkgConfig REQUIRED)
find_package(Boost REQUIRED)
find_package(FFTW3F REQUIRED)
find_package(LibUSB REQUIRED) # used by so many packages
find_package(OpenCV OPTIONAL_COMPONENTS core highgui imgproc imgcodecs videoio) # channeltx/modatv
find_package(LibSigMF) # SigMF recording files support
if(NOT WIN32)
find_package(ZLIB) # For DAB
find_package(FAAD) # For DAB
endif()
if (LIBSIGMF_FOUND AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_definitions(-DHAS_LIBSIGMF)
endif()
# macOS compatibility
if(APPLE)
find_package(ICONV)
endif()
@ -388,14 +378,20 @@ if(WIN32)
)
endif()
# include external cmake if needed
# When ENABLE_EXTERNAL_LIBRARIES is ON, we can build most of the required 3rd party libraries from source
if(ENABLE_EXTERNAL_LIBRARIES)
add_subdirectory(external)
find_package(Boost REQUIRED)
else()
find_package(Boost REQUIRED)
find_package(FFTW3F REQUIRED)
find_package(LibUSB REQUIRED) # used by so many packages
find_package(OpenCV OPTIONAL_COMPONENTS core highgui imgproc imgcodecs videoio) # channeltx/modatv
find_package(LibSigMF) # SigMF recording files support
find_package(ZLIB) # For DAB
find_package(FAAD) # For DAB
find_package(Codec2)
if (NOT APPLE)
find_package(CM256cc)
endif()
find_package(CM256cc)
find_package(LibMbe)
find_package(SerialDV REQUIRED)
find_package(LibDSDcc)
@ -404,6 +400,10 @@ else()
find_package(LibDAB)
endif()
if (LIBSIGMF_FOUND AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_definitions(-DHAS_LIBSIGMF)
endif()
# Devices
if(ENABLE_AIRSPY)
find_package(LibAIRSPY)

View File

@ -133,6 +133,13 @@ static int runQtApplication(int argc, char* argv[], qtwebapp::LoggerWithFile *lo
int main(int argc, char* argv[])
{
#ifdef __APPLE__
// Enable WebGL in QtWebEngine when OpenGL is only version 2.1 (Needed for 3D Map)
// This can be removed when we eventually request a 4.1 OpenGL context
// This needs to be executed before any other Qt code
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blacklist");
#endif
qtwebapp::LoggerWithFile *logger = new qtwebapp::LoggerWithFile(qApp);
logger->installMsgHandler();
int res = runQtApplication(argc, argv, logger);

View File

@ -12,6 +12,7 @@ endfunction (QUERY_QMAKE)
query_qmake (QT_INSTALL_PLUGINS QT_PLUGINS_DIR)
query_qmake (QT_INSTALL_IMPORTS QT_IMPORTS_DIR)
query_qmake (QT_INSTALL_QML QT_QML_DIR)
query_qmake (QT_INSTALL_LIBS QT_LIBS_DIR)
if(APPLE AND BUNDLE AND BUILD_GUI)
@ -26,44 +27,17 @@ if(APPLE AND BUNDLE AND BUILD_GUI)
set (CPACK_MACOS_PACKAGE_ARCHITECTURE noarch)
endif (SW_VERS_PROGRAM)
# Create script that runs macdeployqt
configure_file("${CMAKE_SOURCE_DIR}/cmake/cpack/deploy_mac.cmake.in" "${PROJECT_BINARY_DIR}/deploy_mac.cmake" @ONLY)
set(CPACK_GENERATOR "Bundle")
set(CPACK_BINARY_DRAGNDROP ON)
set(CPACK_BUNDLE_NAME "${APPLICATION_NAME}")
set(CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/cmake/cpack/sdrangel_icon.icns")
set(CPACK_BUNDLE_PLIST "${CMAKE_BINARY_DIR}/Info.plist")
set(CPACK_BUNDLE_STARTUP_COMMAND "${CMAKE_SOURCE_DIR}/cmake/cpack/sdrangel.sh")
set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/cmake/cpack/sdrangel_icon.icns")
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION}_${CPACK_MACOS_PACKAGE_ARCHITECTURE}_${CMAKE_SYSTEM_PROCESSOR}")
# Copy Qt Plugins; fixup_bundle doesn't do that
install (
DIRECTORY
"${QT_PLUGINS_DIR}/platforms"
"${QT_PLUGINS_DIR}/audio"
"${QT_PLUGINS_DIR}/accessible"
"${QT_PLUGINS_DIR}/imageformats"
"${QT_PLUGINS_DIR}/mediaservice"
"${QT_PLUGINS_DIR}/playlistformats"
"${QT_PLUGINS_DIR}/styles"
"${QT_PLUGINS_DIR}/iconengines"
DESTINATION "../PlugIns"
CONFIGURATIONS Release MinSizeRel
COMPONENT runtime
FILES_MATCHING PATTERN "*${CMAKE_SHARED_LIBRARY_SUFFIX}"
PATTERN "*minimal*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
PATTERN "*offscreen*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
PATTERN "*quick*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
PATTERN "*_debug${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
)
# add plugins path for Mac Bundle
install (CODE "
get_filename_component (the_qt_conf \"\${CMAKE_INSTALL_PREFIX}/qt.conf\" REALPATH)
file (WRITE \"\${the_qt_conf}\"
\"
[Paths]
Plugins = ../PlugIns
\")"
)
set(CPACK_PRE_BUILD_SCRIPTS "${PROJECT_BINARY_DIR}/deploy_mac.cmake")
# copy SoapySDR Modules
# probably libmirsdrapi-rsp.dylib can't be re-distribuited
@ -79,18 +53,6 @@ Plugins = ../PlugIns
endforeach()
endif()
install(CODE "
file(GLOB_RECURSE SDRANGEL_PLUGINS
\"\${CMAKE_INSTALL_PREFIX}/${INSTALL_PLUGINS_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
file(GLOB_RECURSE SDRANGEL_PLUGINSSRV
\"\${CMAKE_INSTALL_PREFIX}/${INSTALL_PLUGINSSRV_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
file(GLOB_RECURSE QTPLUGINS \"\${CMAKE_INSTALL_PREFIX}/../PlugIns/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
file(GLOB_RECURSE SOAPYSDR_PLUGINS \"\${CMAKE_INSTALL_PREFIX}/../Frameworks/SoapySDR/modules${SOAPY_SDR_ABI_VERSION}/*.so\")
set(BU_CHMOD_BUNDLE_ITEMS ON)
include(BundleUtilities)
fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/${CMAKE_PROJECT_NAME}\" \"\${SDRANGEL_PLUGINS};\${SDRANGEL_PLUGINSSRV};\${QTPLUGINS};\${SOAPYSDR_PLUGINS}\" \"${CMAKE_LIBRARY_OUTPUT_DIRECTORY};${MACOS_EXTERNAL_LIBS_FIXUP}\")
# remove non distribuitable file
if(ENABLE_MIRSDRAPI AND OFF)
message(STATUS \"Remove libmirsdrapi-rsp.dylib - not distribuitable\")
@ -102,7 +64,6 @@ Plugins = ../PlugIns
foreach(file \${SDRANGEL_REMOVE_LIB})
file(REMOVE \"\${file}\")
endforeach()
" COMPONENT Runtime)
# TODO: code/dmg signature
# see https://github.com/cjcliffe/CubicSDR

View File

@ -0,0 +1,42 @@
# This CPACK_PRE_BUILD_SCRIPTS script is used to copy all required Qt and other 3rd party libraries (SDR drivers and codecs) in to the .app bundle
# It is run in a staging area (${CPACK_TEMPORARY_INSTALL_DIRECTORY}/SDRangel.app) after all targets have been installed (E.g. sdrangel exe and plugins)
# The copying of frameworks and libraries is mostly done by 'macdeployqt', however, in order for 'macdeployqt' to copy libraries built by external/CMakeLists.txt,
# we first need to add RPATHs into the libraries giving the locations of any libraries they might depend on.
# These paths are in the variable MACOS_EXTERNAL_LIBS_FIXUP set in externals/CMakeLists.txt
# Is there an easier way to this?
# Copy executable that will be run when icon in /Applications is clicked
message ("Copying default executable to SDRangel.app/Contents/MacOS/SDRangel")
execute_process (COMMAND mkdir ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/SDRangel.app/Contents/MacOS/)
execute_process (COMMAND cp /opt/build/sdrangel/build/sdrangel ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/SDRangel.app/Contents/MacOS/SDRangel)
# Add RPATHS to libraries so macdeployqt can find out and copy all dependencies
message ("Adding RPATHs to executables and libraries")
# Get list of 3rd party library directories
set (EXTERNAL_LIB_DIRS @MACOS_EXTERNAL_LIBS_FIXUP@)
list (REMOVE_DUPLICATES EXTERNAL_LIB_DIRS)
# Add RPATH to exectuable in staging area
foreach(RPATH_DIR ${EXTERNAL_LIB_DIRS})
message("Add RPATH ${RPATH_DIR}")
execute_process(COMMAND /usr/bin/install_name_tool -add_rpath ${RPATH_DIR} ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/SDRangel.app/Contents/MacOS/SDRangel)
endforeach()
# Add RPATH to libraries in build directory
foreach(RPATH_DIR_1 ${EXTERNAL_LIB_DIRS})
file(GLOB LIBS_TO_FIX ${RPATH_DIR_1}/*.dylib)
foreach (LIB_TO_FIX ${LIBS_TO_FIX})
foreach(RPATH_DIR @MACOS_EXTERNAL_LIBS_FIXUP@)
message("Add RPATH ${RPATH_DIR} to ${LIB_TO_FIX}")
# We set ERROR_QUIET to ignore errors regarding failing to add duplicate paths
execute_process(COMMAND /usr/bin/install_name_tool -add_rpath ${RPATH_DIR} ${LIB_TO_FIX} ERROR_QUIET)
endforeach()
endforeach()
endforeach()
# Run macdeployqt which should copy all libraries and frameworks and Qt plugins and qml
message ("Running macdeployqt in ${CPACK_TEMPORARY_INSTALL_DIRECTORY}")
execute_process ( COMMAND macdeployqt ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/SDRangel.app -always-overwrite -verbose=1 -qmldir=@CMAKE_CURRENT_SOURCE_DIR@/../../plugins/feature/map )

View File

@ -169,6 +169,8 @@ if (WIN32)
install(FILES "${EXTERNAL_LIBRARY_FOLDER}/vcredist/${VCREDIST_FILE}" DESTINATION "${INSTALL_BIN_DIR}")
endif (WIN32)
set(MACOS_EXTERNAL_LIBS_FIXUP "${CMAKE_BINARY_DIR}/${INSTALL_LIB_DIR}")
if (AUTO_EXTERNAL_LIBRARIES)
find_package(Codec2)
find_package(CM256cc)
@ -182,9 +184,384 @@ if (AUTO_EXTERNAL_LIBRARIES)
find_package(LibAIRSPYHF)
find_package(LibPerseus)
find_package(LibRTLSDR)
find_package(LibUSB)
find_package(Opus)
find_package(Boost)
find_package(ZLIB)
find_package(UHD)
find_package(FFmpeg COMPONENTS AVCODEC AVFORMAT AVUTIL SWSCALE)
find_package(FAAD)
find_package(FFTW3F)
find_package(OpenCV OPTIONAL_COMPONENTS core highgui imgproc imgcodecs videoio)
endif (AUTO_EXTERNAL_LIBRARIES)
if (NOT WIN32 AND (NOT CODEC2_FOUND OR CODEC2_EXTERNAL))
# While some of the following projects are not installed (to save time & space), some have to
# be so that on MacOS, the paths embedded in the libraries to other libraries are correct (as they are set to
# install path, not build). This is required for macdeployqt to be able to find them
# Some of the following projects are currently built only for MacOS
# For WIN32, we use precompiled versions from sdrangel-windows-libraries
# For LINUX, we require system pacakges to be installed
if (MACOS)
set(USE_PRECOMPILED_LIBS FALSE)
else()
set(USE_PRECOMPILED_LIBS TRUE)
endif()
if (NOT LIBUSB_FOUND AND NOT USE_PRECOMPILED_LIBS)
# Cloning git repo doesn't include configure, so we download the bz2 which does
ExternalProject_Add(libusb
URL https://github.com/libusb/libusb/releases/download/v1.0.26/libusb-1.0.26.tar.bz2
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/libusb"
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
BUILD_COMMAND ${MAKE}
TEST_COMMAND ""
)
ExternalProject_Get_Property(libusb install_dir)
set(LIBUSB_DEPENDS libusb CACHE INTERNAL "")
set(LIBUSB_FOUND ON CACHE INTERNAL "")
set(LIBUSB_EXTERNAL ON CACHE INTERNAL "")
set(LIBUSB_INCLUDE_DIR "${install_dir}/include/libusb-1.0" CACHE INTERNAL "")
if (WIN32)
set(LIBUSB_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/libusb.lib" CACHE INTERNAL "")
elseif (LINUX)
set(LIBUSB_LIBRARIES "${install_dir}/lib${LIB_SUFFIX}/libusb-1.0${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
elseif (APPLE)
set(LIBUSB_LIBRARIES "${install_dir}/lib/libusb-1.0${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${install_dir}/lib")
endif ()
endif (NOT LIBUSB_FOUND AND NOT USE_PRECOMPILED_LIBS)
if (NOT OPUS_FOUND AND NOT USE_PRECOMPILED_LIBS)
ExternalProject_Add(opus
GIT_REPOSITORY https://github.com/xiph/opus
GIT_TAG v1.3.1
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/opus"
CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DOPUS_BUILD_SHARED_LIBRARY=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
TEST_COMMAND ""
)
ExternalProject_Get_Property(opus install_dir)
set(OPUS_DEPENDS opus CACHE INTERNAL "")
set(OPUS_FOUND ON CACHE INTERNAL "")
set(OPUS_EXTERNAL ON CACHE INTERNAL "")
set(OPUS_INCLUDE_DIRS "${install_dir}/include" CACHE INTERNAL "")
set(OPUS_PKG_CONFIG_DIR "${install_dir}/lib/pkgconfig" CACHE INTERNAL "")
if (WIN32)
set(OPUS_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/libopus.lib" CACHE INTERNAL "")
elseif (LINUX)
set(OPUS_LIBRARIES "${install_dir}/lib${LIB_SUFFIX}/libopus${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
elseif (APPLE)
set(OPUS_LIBRARIES "${install_dir}/lib/libopus${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${install_dir}/lib")
endif ()
endif (NOT OPUS_FOUND AND NOT USE_PRECOMPILED_LIBS)
if (NOT ZLIB_FOUND AND NOT USE_PRECOMPILED_LIBS)
ExternalProject_Add(zlib
URL https://zlib.net/zlib-1.2.12.tar.gz
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/zlib"
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
TEST_COMMAND ""
)
ExternalProject_Get_Property(zlib install_dir)
set(ZLIB_DEPENDS zlib CACHE INTERNAL "")
set(ZLIB_FOUND ON CACHE INTERNAL "")
set(ZLIB_EXTERNAL ON CACHE INTERNAL "")
set(ZLIB_INCLUDE_DIRS "${install_dir}/include" CACHE INTERNAL "")
if (WIN32)
set(ZLIB_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/libz.lib" CACHE INTERNAL "")
elseif (LINUX)
set(ZLIB_LIBRARIES "${install_dir}/lib${LIB_SUFFIX}/libz${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
elseif (APPLE)
set(ZLIB_LIBRARIES "${install_dir}/lib/libz${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${install_dir}/lib")
endif ()
endif (NOT ZLIB_FOUND AND NOT USE_PRECOMPILED_LIBS)
if (NOT FAAD_FOUND AND NOT USE_PRECOMPILED_LIBS)
ExternalProject_Add(faad
URL https://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.8.0/faad2-2.8.8.tar.gz
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/faad"
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
TEST_COMMAND ""
)
ExternalProject_Get_Property(faad source_dir binary_dir install_dir)
set(FAAD_DEPENDS faad CACHE INTERNAL "")
set(FAAD_FOUND ON CACHE INTERNAL "")
set(FAAD_EXTERNAL ON CACHE INTERNAL "")
set(FAAD_INCLUDE_DIR "${install_dir}/include" CACHE INTERNAL "")
if (WIN32)
set(FAAD_LIBRARY "${SDRANGEL_BINARY_LIB_DIR}/libfaad.lib" CACHE INTERNAL "")
elseif (LINUX)
set(FAAD_LIBRARY "${install_dir}/lib${LIB_SUFFIX}/libfaad${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
elseif (APPLE)
set(FAAD_LIBRARY "${install_dir}/lib/libfaad${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${install_dir}/lib")
endif ()
endif (NOT FAAD_FOUND AND NOT USE_PRECOMPILED_LIBS)
if (NOT FFTW3F_FOUND AND NOT USE_PRECOMPILED_LIBS)
ExternalProject_Add(fftw3f
URL http://fftw.org/fftw-3.3.10.tar.gz
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/fftw3f"
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --enable-float
BUILD_COMMAND ${MAKE}
INSTALL_COMMAND ""
TEST_COMMAND ""
)
ExternalProject_Get_Property(fftw3f source_dir binary_dir)
set(FFTW3F_DEPENDS fftw3f CACHE INTERNAL "")
set(FFTW3F_FOUND ON CACHE INTERNAL "")
set(FFTW3F_EXTERNAL ON CACHE INTERNAL "")
set(FFTW3F_INCLUDE_DIRS "${source_dir}/api" "${binary_dir}" CACHE INTERNAL "")
if (WIN32)
set(FFTW3F_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/libfftw3f.lib" CACHE INTERNAL "")
elseif (LINUX)
set(FFTW3F_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libfftw3f${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
elseif (APPLE)
set(FFTW3F_LIBRARIES "${binary_dir}/.libs/libfftw3f.a" CACHE INTERNAL "")
endif ()
endif (NOT FFTW3F_FOUND AND NOT USE_PRECOMPILED_LIBS)
# Can't build Boost using ExternalProject_Add, as we want to use find_package(Boost) as it defines many variables,
# and using find_package requires Boost to have already been built
# So instead, we use FetchContent and build Boost at CMake configure time
include(FetchContent)
FetchContent_Declare(boost
URL https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.tar.gz
)
find_package(Boost QUIET)
if (NOT Boost_FOUND AND NOT USE_PRECOMPILED_LIBS)
message("Downloading Boost")
FetchContent_MakeAvailable(boost)
# Add path to where Boost is built
set(CMAKE_PREFIX_PATH ${boost_BINARY_DIR})
# Check to see if already built - Don't build again
find_package(Boost QUIET)
if(NOT Boost_FOUND)
execute_process(
COMMAND ./bootstrap.sh --prefix=${boost_BINARY_DIR}
WORKING_DIRECTORY ${boost_SOURCE_DIR}
)
execute_process(
COMMAND ./b2
WORKING_DIRECTORY ${boost_SOURCE_DIR}
)
execute_process(
COMMAND ./b2 install
WORKING_DIRECTORY ${boost_SOURCE_DIR}
)
message("Boost built in ${boost_BINARY_DIR}")
endif()
# Cache binary dir so we know it was built in subsequent builds
set(boost_BINARY_DIR ${boost_BINARY_DIR} CACHE INTERNAL "")
# Check it was built and import the variables
find_package(Boost REQUIRED)
if (APPLE)
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${boost_BINARY_DIR}/lib")
endif()
else()
if (DEFINED boost_BINARY_DIR)
if (APPLE)
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${boost_BINARY_DIR}/lib")
endif()
endif()
endif()
if (NOT FFMEG_FOUND AND NOT USE_PRECOMPILED_LIBS)
# Libs only used by ffmpeg
# They are installed so ffmpeg can use pkg-config to find them
if (NOT X264_FOUND OR X264_EXTERNAL)
# x264's configure script forces a full rebuild each time, so set UPDATE_DISCONNECTED
# so it's only downloaded
ExternalProject_Add(x264
GIT_REPOSITORY https://code.videolan.org/videolan/x264.git
UPDATE_DISCONNECTED TRUE
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/x264"
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --enable-shared
BUILD_COMMAND ${MAKE}
TEST_COMMAND ""
)
ExternalProject_Get_Property(x264 install_dir)
set(X264_DEPENDS x264 CACHE INTERNAL "")
set(X264_PKG_CONFIG_DIR "${install_dir}/lib/pkgconfig")
set(X264_FOUND ON CACHE INTERNAL "")
set(X264_EXTERNAL ON CACHE INTERNAL "")
if (APPLE)
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${install_dir}/lib")
endif ()
endif (NOT X264_FOUND OR X264_EXTERNAL)
if (NOT X265_FOUND OR X265_EXTERNAL)
ExternalProject_Add(x265
GIT_REPOSITORY https://bitbucket.org/multicoreware/x265_git.git
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/x265"
SOURCE_SUBDIR "source"
CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
TEST_COMMAND ""
)
ExternalProject_Get_Property(x265 install_dir)
set(X265_DEPENDS x265 CACHE INTERNAL "")
set(X265_PKG_CONFIG_DIR "${install_dir}/lib/pkgconfig")
set(X265_FOUND ON CACHE INTERNAL "")
set(X265_EXTERNAL ON CACHE INTERNAL "")
if (APPLE)
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${install_dir}/lib")
endif ()
endif (NOT X265_FOUND OR X265_EXTERNAL)
if (NOT FDK_AAC_FOUND OR FDK_AAC_EXTERNAL)
ExternalProject_Add(fdk_aac
GIT_REPOSITORY https://github.com/mstorsjo/fdk-aac.git
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/fdk-aac"
CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
TEST_COMMAND ""
)
ExternalProject_Get_Property(fdk_aac install_dir)
set(FDK_AAC_DEPENDS fdk_aac CACHE INTERNAL "")
set(FDK_AAC_PKG_CONFIG_DIR "${install_dir}/lib/pkgconfig")
set(FDK_AAC_FOUND ON CACHE INTERNAL "")
set(FDK_AAC_EXTERNAL ON CACHE INTERNAL "")
if (APPLE)
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${install_dir}/lib")
endif ()
endif (NOT FDK_AAC_FOUND OR FDK_AAC_EXTERNAL)
# https://www.mpg123.de/download.shtml
if (NOT MPG123_FOUND OR MPG123_EXTERNAL)
ExternalProject_Add(mpg123
URL https://downloads.sourceforge.net/project/mpg123/mpg123/1.29.3/mpg123-1.29.3.tar.bz2
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/mpg123"
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --enable-shared
BUILD_COMMAND ${MAKE}
TEST_COMMAND ""
)
ExternalProject_Get_Property(mpg123 install_dir)
set(MPG123_DEPENDS mpg123 CACHE INTERNAL "")
set(MPG123_PKG_CONFIG_DIR "${install_dir}/lib/pkgconfig")
set(MPG123_FOUND ON CACHE INTERNAL "")
set(MPG123_EXTERNAL ON CACHE INTERNAL "")
if (APPLE)
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${install_dir}/lib")
endif ()
endif (NOT MPG123_FOUND OR MPG123_EXTERNAL)
if (NOT LAME_FOUND OR LAME_EXTERNAL)
ExternalProject_Add(lame
SVN_REPOSITORY http://svn.code.sf.net/p/lame/svn/trunk/lame
UPDATE_DISCONNECTED TRUE
DEPENDS ${MPG123_DEPENDS}
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/lame"
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${MPG123_PKG_CONFIG_DIR} <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --enable-shared
BUILD_COMMAND ${MAKE}
TEST_COMMAND ""
)
ExternalProject_Get_Property(lame install_dir)
set(LAME_DEPENDS lame CACHE INTERNAL "")
# ffmpeg doesn't try to use pkg-config for lame, as it doesn't include a .pc file
#set(LAME_PKG_CONFIG_DIR "${install_dir}/lib/pkgconfig")
set(LAME_EXTRA_CFLAGS "-I${install_dir}/include")
set(LAME_EXTRA_LDFLAGS "-L${install_dir}/lib")
set(LAME_FOUND ON CACHE INTERNAL "")
set(LAME_EXTERNAL ON CACHE INTERNAL "")
if (APPLE)
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${install_dir}/lib")
endif ()
endif (NOT LAME_FOUND OR LAME_EXTERNAL)
# We have to install this so OpenCV can find it
# OpenCV doesn't currently build with ffmpeg 5, so use 4
ExternalProject_Add(ffmpeg
GIT_REPOSITORY https://github.com/FFmpeg/FFmpeg.git
GIT_TAG n4.4.2
DEPENDS ${X264_DEPENDS} ${X265_DEPENDS} ${OPUS_DEPENDS} ${FDK_AAC_DEPENDS} ${LAME_DEPENDS}
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/ffmpeg"
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${X264_PKG_CONFIG_DIR}:${X265_PKG_CONFIG_DIR}:${OPUS_PKG_CONFIG_DIR}:${FDK_AAC_PKG_CONFIG_DIR} <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --enable-shared --enable-gpl --enable-nonfree --enable-libx264 --enable-libx265 --enable-libopus --enable-libfdk-aac --enable-libmp3lame --extra-ldflags=${LAME_EXTRA_LDFLAGS} --extra-cflags=${LAME_EXTRA_CFLAGS}
BUILD_COMMAND ${MAKE}
TEST_COMMAND ""
)
ExternalProject_Get_Property(ffmpeg install_dir)
set(FFMPEG_DEPENDS ffmpeg CACHE INTERNAL "")
set(FFMPEG_INSTALL_DIR "${install_dir}")
set(FFMPEG_FOUND ON CACHE INTERNAL "")
set(FFMPEG_EXTERNAL ON CACHE INTERNAL "")
set(FFMPEG_INCLUDE_DIRS "${install_dir}/include" CACHE INTERNAL "")
set(AVCODEC_INCLUDE_DIRS "${install_dir}/include" CACHE INTERNAL "")
set(AVFORMAT_INCLUDE_DIRS "${install_dir}/include" CACHE INTERNAL "")
set(AVUTIL_INCLUDE_DIRS "${install_dir}/include" CACHE INTERNAL "")
set(SWRESAMPLE_INCLUDE_DIRS "${install_dir}/include" CACHE INTERNAL "")
set(SWSCALE_INCLUDE_DIRS "${install_dir}/include" CACHE INTERNAL "")
set(AVCODEC_LIBRARIES "${install_dir}/lib/libavcodec${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
set(AVFORMAT_LIBRARIES "${install_dir}/lib/libavformat${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
set(AVUTIL_LIBRARIES "${install_dir}/lib/libavutil${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
set(SWRESAMPLE_LIBRARIES "${install_dir}/lib/libswresample${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
set(SWSCALE_LIBRARIES "${install_dir}/lib/libswscale${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
if (APPLE)
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${install_dir}/lib")
endif ()
endif (NOT FFMPEG_FOUND AND NOT USE_PRECOMPILED_LIBS)
if (NOT OpenCV_FOUND AND NOT USE_PRECOMPILED_LIBS)
ExternalProject_Add(opencv
GIT_REPOSITORY https://github.com/opencv/opencv.git
GIT_TAG 4.5.5
DEPENDS "${FFMPEG_DEPENDS}"
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/opencv"
CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DWITH_FFMPEG=ON -DCMAKE_PREFIX_PATH=${FFMPEG_INSTALL_DIR}
INSTALL_COMMAND ""
TEST_COMMAND ""
)
ExternalProject_Get_Property(opencv source_dir binary_dir)
set(OpenCV_DEPENDS opencv CACHE INTERNAL "")
set(OpenCV_FOUND ON CACHE INTERNAL "")
set(OpenCV_EXTERNAL ON CACHE INTERNAL "")
set(OpenCV_INCLUDE_DIRS
"${source_dir}/modules/calib3d/include"
"${source_dir}/modules/core/include"
"${source_dir}/modules/dnn/include"
"${source_dir}/modules/features2d/include"
"${source_dir}/modules/flann/include"
"${source_dir}/modules/gapi/include"
"${source_dir}/modules/highgui/include"
"${source_dir}/modules/imgcodecs/include"
"${source_dir}/modules/imgproc/include"
"${source_dir}/modules/java/include"
"${source_dir}/modules/java/include"
"${source_dir}/modules/js/include"
"${source_dir}/modules/ml/include"
"${source_dir}/modules/obj/include"
"${source_dir}/modules/objdetect/include"
"${source_dir}/modules/photo/include"
"${source_dir}/modules/python/include"
"${source_dir}/modules/stitching/include"
"${source_dir}/modules/ts/include"
"${source_dir}/modules/video/include"
"${source_dir}/modules/videoio/include"
"${source_dir}/modules/world/include"
"${binary_dir}"
CACHE INTERNAL "")
if (WIN32)
set(OpenCV_LIBS "${SDRANGEL_BINARY_LIB_DIR}/libopencv.lib" CACHE INTERNAL "")
elseif (LINUX)
set(OpenCV_LIBS "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libopencv${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
elseif (APPLE)
set(OpenCV_LIBS "${binary_dir}/lib/libopencv_core${CMAKE_SHARED_LIBRARY_SUFFIX};${binary_dir}/lib/libopencv_core${CMAKE_SHARED_LIBRARY_SUFFIX};${binary_dir}/lib/libopencv_highgui${CMAKE_SHARED_LIBRARY_SUFFIX};${binary_dir}/lib/libopencv_video${CMAKE_SHARED_LIBRARY_SUFFIX};${binary_dir}/lib/libopencv_videoio${CMAKE_SHARED_LIBRARY_SUFFIX};${binary_dir}/lib/libopencv_imgproc${CMAKE_SHARED_LIBRARY_SUFFIX};${binary_dir}/lib/libopencv_imgcodecs${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/lib")
endif ()
endif (NOT OpenCV_FOUND AND NOT USE_PRECOMPILED_LIBS)
if ((NOT CODEC2_FOUND OR CODEC2_EXTERNAL) AND NOT USE_PRECOMPILED_LIBS)
# needs speexdsp
if (WIN32)
set(CODEC2_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/codec2.lib" CACHE INTERNAL "")
@ -201,6 +578,7 @@ if (NOT WIN32 AND (NOT CODEC2_FOUND OR CODEC2_EXTERNAL))
TEST_COMMAND ""
)
ExternalProject_Get_Property(codec2 source_dir binary_dir)
set(CODEC2_DEPENDS codec2 CACHE INTERNAL "")
set(CODEC2_FOUND ON CACHE INTERNAL "")
set(CODEC2_EXTERNAL ON CACHE INTERNAL "")
set(CODEC2_INCLUDE_DIR "${source_dir}/src" "${binary_dir}" CACHE INTERNAL "")
@ -210,14 +588,15 @@ if (NOT WIN32 AND (NOT CODEC2_FOUND OR CODEC2_EXTERNAL))
elseif (LINUX)
set(CODEC2_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libcodec2${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
makeLink("${source_dir}/src" "${source_dir}/src/codec2" codec2)
else ()
elseif (APPLE)
set(CODEC2_LIBRARIES "${binary_dir}/src/libcodec2${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
# some source include "codec2/comp.h" and some without codec2
makeLink("${source_dir}/src" "${source_dir}/src/codec2" codec2)
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/src")
endif ()
endif (NOT WIN32 AND (NOT CODEC2_FOUND OR CODEC2_EXTERNAL))
endif ((NOT CODEC2_FOUND OR CODEC2_EXTERNAL) AND NOT USE_PRECOMPILED_LIBS)
if (NOT APPLE AND (NOT CM256CC_FOUND OR CM256CC_EXTERNAL))
if (NOT CM256CC_FOUND OR CM256CC_EXTERNAL)
# needs boost
if (WIN32)
set(CM256CC_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/cm256cc.lib" CACHE INTERNAL "")
@ -234,11 +613,13 @@ if (NOT APPLE AND (NOT CM256CC_FOUND OR CM256CC_EXTERNAL))
-DBUILD_TOOLS=OFF
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_SEP}
-DENABLE_DISTRIBUTION=ON
-DBoost_INCLUDE_DIR=${Boost_INCLUDE_DIR}
BUILD_BYPRODUCTS "${CM256CC_LIBRARIES}"
INSTALL_COMMAND ""
TEST_COMMAND ""
)
ExternalProject_Get_Property(cm256cc source_dir binary_dir)
set(CM256CC_DEPENDS cm256cc CACHE INTERNAL "")
set(CM256CC_FOUND ON CACHE INTERNAL "")
set(CM256CC_EXTERNAL ON CACHE INTERNAL "")
# we need cm256cc/library.h
@ -251,7 +632,7 @@ if (NOT APPLE AND (NOT CM256CC_FOUND OR CM256CC_EXTERNAL))
FILES_MATCHING PATTERN "libcm256cc*${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}")
endif ()
endif (NOT APPLE AND (NOT CM256CC_FOUND OR CM256CC_EXTERNAL))
endif (NOT CM256CC_FOUND OR CM256CC_EXTERNAL)
if ((NOT LIBDSDCC_FOUND OR LIBDSDCC_EXTERNAL) AND (NOT LIBMBE_FOUND OR LIBMBE_EXTERNAL))
set(USE_MBELIB OFF)
@ -375,6 +756,7 @@ ExternalProject_Add(apt
TEST_COMMAND ""
)
ExternalProject_Get_Property(apt source_dir binary_dir)
set(APT_DEPENDS apt CACHE INTERNAL "")
set(APT_FOUND ON CACHE INTERNAL "")
set(APT_EXTERNAL ON CACHE INTERNAL "")
set(APT_INCLUDE_DIR "${EXTERNAL_BUILD_LIBRARIES}/apt/src/apt/src" CACHE INTERNAL "")
@ -405,16 +787,17 @@ ExternalProject_Add(sgp4
TEST_COMMAND ""
)
ExternalProject_Get_Property(sgp4 source_dir binary_dir)
set(SGP4_DEPENDS sgp4 CACHE INTERNAL "")
set(SGP4_FOUND ON CACHE INTERNAL "")
set(SGP4_EXTERNAL ON CACHE INTERNAL "")
set(SGP4_INCLUDE_DIR "${EXTERNAL_BUILD_LIBRARIES}/sgp4/src/sgp4/libsgp4" CACHE INTERNAL "")
if (WIN32)
install(FILES "${SDRANGEL_BINARY_BIN_DIR}/sgp4s${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}")
elseif (APPLE)
set(SGP4_LIBRARIES "${binary_dir}/libsgp4s${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
install(DIRECTORY "${binary_dir}/" DESTINATION "${INSTALL_LIB_DIR}"
set(SGP4_LIBRARIES "${binary_dir}/libsgp4/libsgp4s${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
install(DIRECTORY "${binary_dir}/libsgp4" DESTINATION "${INSTALL_LIB_DIR}"
FILES_MATCHING PATTERN "libsgp4s*${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/libsgp4")
endif ()
@ -473,6 +856,7 @@ if (ZLIB_FOUND AND FAAD_FOUND)
ExternalProject_Add(dab
GIT_REPOSITORY https://github.com/srcejon/dab-cmdline.git
GIT_TAG msvc
DEPENDS ${ZLIB_DEPENDS} ${FAAD_DEPENDS}
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/dab"
SOURCE_SUBDIR "library"
CMAKE_ARGS ${COMMON_CMAKE_ARGS}
@ -488,6 +872,7 @@ if (ZLIB_FOUND AND FAAD_FOUND)
)
endif(WIN32)
ExternalProject_Get_Property(dab source_dir binary_dir)
set(DAB_DEPENDS dab CACHE INTERNAL "")
set(DAB_FOUND ON CACHE INTERNAL "")
set(DAB_EXTERNAL ON CACHE INTERNAL "")
set(DAB_INCLUDE_DIR "${EXTERNAL_BUILD_LIBRARIES}/dab/src/dab" CACHE INTERNAL "")
@ -663,7 +1048,7 @@ if (WIN32 OR APPLE)
ExternalProject_Add(rtlsdr
GIT_REPOSITORY https://github.com/osmocom/rtl-sdr.git
GIT_TAG ${RTLSDR_TAG}
DEPENDS ${PTHREADS4W_DEPENDS}
DEPENDS ${PTHREADS4W_DEPENDS} ${LIBUSB_DEPENDS}
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/rtlsdr"
CMAKE_ARGS ${COMMON_CMAKE_ARGS}
-DINSTALL_UDEV_RULES=${RTLSDR_UDEV}
@ -692,14 +1077,17 @@ if (WIN32 OR APPLE)
if (ENABLE_LIMESUITE)
# needs pkgconfig, libusb
# We have to install this, as makeCopy("${source_dir}/src/limeRFE/limeRFE.h" "${source_dir}/src/lime/limeRFE.h" limesuite)
# causes git stash to fail
if (WIN32)
set(LIMESUITE_LIBRARY "${SDRANGEL_BINARY_LIB_DIR}/LimeSuite.lib" CACHE INTERNAL "")
endif ()
ExternalProject_Add(limesuite
GIT_REPOSITORY https://github.com/f4exb/LimeSuite.git
GIT_TAG "msvc_fix"
DEPENDS ${LIBUSB_DEPENDS}
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/limesuite"
CMAKE_ARGS ${COMMON_CMAKE_ARGS}
CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-DLIME_SUITE_EXTVER=release
-DENABLE_GUI=OFF
-DENABLE_NOVENARF7=OFF
@ -707,25 +1095,27 @@ if (WIN32 OR APPLE)
-DENABLE_OCTAVE=OFF
-DENABLE_QUICKTEST=OFF
-DENABLE_EXAMPLES=OFF
-DENABLE_LIME_UTIL=OFF
-DENABLE_LIME_UTIL=ON
-DENABLE_SIMD_FLAGS=SSE3
-DENABLE_FX3=ON
-DFX3_SDK_PATH=${FX3SDK_DIR}
-DLIBUSB_1_LIBRARY=${LIBUSB_LIBRARIES}
-DLIBUSB_1_INCLUDE_DIR=${LIBUSB_INCLUDE_DIR}
BUILD_BYPRODUCTS "${LIMESUITE_LIBRARY}"
INSTALL_COMMAND ""
TEST_COMMAND ""
)
ExternalProject_Get_Property(limesuite source_dir binary_dir)
ExternalProject_Get_Property(limesuite source_dir binary_dir install_dir)
set(LIMESUITE_FOUND ON CACHE INTERNAL "")
set(LIMESUITE_EXTERNAL ON CACHE INTERNAL "")
set(LIMESUITE_INCLUDE_DIR "${source_dir}/src" CACHE INTERNAL "")
set(LIMESUITE_INCLUDE_DIR "${install_dir}/include" CACHE INTERNAL "")
if (WIN32)
install(FILES "${SDRANGEL_BINARY_BIN_DIR}/LimeSuite${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}")
makeCopy("${source_dir}/src/limeRFE/limeRFE.h" "${source_dir}/src/lime/limeRFE.h" limesuite)
elseif (APPLE)
set(LIMESUITE_LIBRARY "${binary_dir}/src/libLimeSuite${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
install(DIRECTORY "${binary_dir}/src/" DESTINATION "${INSTALL_LIB_DIR}"
set(LIMESUITE_LIBRARY "${install_dir}/lib/libLimeSuite${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
install(DIRECTORY "${intstall_dir}/lib/" DESTINATION "${INSTALL_LIB_DIR}"
FILES_MATCHING PATTERN "libLimeSuite*${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/src/")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${install_dir}/lib/")
endif ()
endif (ENABLE_LIMESUITE)
@ -736,6 +1126,7 @@ if (WIN32 OR APPLE)
ExternalProject_Add(soapysdr
GIT_REPOSITORY https://github.com/pothosware/SoapySDR.git
GIT_TAG ${SOAPYSDR_TAG}
DEPENDS ${LIBUSB_DEPENDS}
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/soapysdr"
CMAKE_ARGS ${COMMON_CMAKE_ARGS}
-DENABLE_PYTHON=OFF
@ -768,10 +1159,12 @@ if (WIN32 OR APPLE)
set(AIRSPY_LIBUSB_INCLUDE_DIR ${LIBUSB_INCLUDE_DIR}/libusb-1.0)
endif ()
# needs libusb, pthreads
# We need to set CMAKE_INSTALL_NAME_DIR, otherwise path to libs is set to install path of /usr/local/
# but as we don't install, macdeployqt will fail to find them
ExternalProject_Add(airspy
GIT_REPOSITORY https://github.com/airspy/airspyone_host
GIT_TAG ${AIRSPY_TAG}
DEPENDS ${PTHREADS4W_DEPENDS}
DEPENDS ${PTHREADS4W_DEPENDS} ${LIBUSB_DEPENDS}
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/airspy"
SOURCE_SUBDIR "libairspy"
CMAKE_ARGS ${COMMON_CMAKE_ARGS}
@ -779,11 +1172,14 @@ if (WIN32 OR APPLE)
-DLIBUSB_INCLUDE_DIR=${AIRSPY_LIBUSB_INCLUDE_DIR}
-DTHREADS_PTHREADS_INCLUDE_DIR=${PTHREADS4W_INCLUDE_DIR}
-DTHREADS_PTHREADS_WIN32_LIBRARY=${PTHREADS4W_LIBRARIES}
-DCMAKE_INSTALL_NAME_DIR=<BINARY_DIR>/src
BUILD_BYPRODUCTS "${LIBAIRSPY_LIBRARIES}"
INSTALL_COMMAND ""
TEST_COMMAND ""
)
add_dependencies(airspy pthreads4w)
if (WIN32)
add_dependencies(airspy pthreads4w)
endif ()
ExternalProject_Get_Property(airspy source_dir binary_dir)
set(LIBAIRSPY_FOUND ON CACHE INTERNAL "")
set(LIBAIRSPY_EXTERNAL ON CACHE INTERNAL "")
@ -793,11 +1189,11 @@ if (WIN32 OR APPLE)
makeCopy("${binary_dir}/../airspy-tools/src/airspy${CMAKE_SHARED_LIBRARY_SUFFIX}" "${SDRANGEL_BINARY_BIN_DIR}/airspy${CMAKE_SHARED_LIBRARY_SUFFIX}" airspy)
install(FILES "${SDRANGEL_BINARY_BIN_DIR}/airspy${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}")
elseif (APPLE)
set(LIBAIRSPY_LIBRARIES "${binary_dir}/libairspy/src/libairspy${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
set(LIBAIRSPY_LIBRARIES "${binary_dir}/src/libairspy${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
makeLink("${source_dir}/libairspy/src" "${source_dir}/libairspy/src/libairspy" airspy)
install(DIRECTORY "${binary_dir}/libairspy/src/" DESTINATION "${INSTALL_LIB_DIR}"
FILES_MATCHING PATTERN "libairspy*${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/libairspy/src")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/src")
endif ()
endif (ENABLE_AIRSPY)
@ -811,18 +1207,21 @@ if (WIN32 OR APPLE)
ExternalProject_Add(airspyhf
GIT_REPOSITORY https://github.com/airspy/airspyhf.git
GIT_TAG ${AIRSPYHF_TAG}
DEPENDS ${PTHREADS4W_DEPENDS}
DEPENDS ${PTHREADS4W_DEPENDS} ${LIBUSB_DEPENDS}
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/airspyhf"
CMAKE_ARGS ${COMMON_CMAKE_ARGS}
-DLIBUSB_LIBRARIES=${LIBUSB_LIBRARIES}
-DLIBUSB_INCLUDE_DIR=${AIRSPYHF_LIBUSB_INCLUDE_DIR}
-DTHREADS_PTHREADS_INCLUDE_DIR=${PTHREADS4W_INCLUDE_DIR}
-DTHREADS_PTHREADS_WIN32_LIBRARY=${PTHREADS4W_LIBRARIES}
-DCMAKE_INSTALL_NAME_DIR=<BINARY_DIR>/libairspyhf/src
BUILD_BYPRODUCTS "${LIBAIRSPYHF_LIBRARIES}"
INSTALL_COMMAND ""
TEST_COMMAND ""
)
add_dependencies(airspyhf pthreads4w)
if (WIN32)
add_dependencies(airspyhf pthreads4w)
endif()
ExternalProject_Get_Property(airspyhf source_dir binary_dir)
set(LIBAIRSPYHF_FOUND ON CACHE INTERNAL "")
set(LIBAIRSPYHF_EXTERNAL ON CACHE INTERNAL "")
@ -851,7 +1250,7 @@ if (WIN32 OR APPLE)
GIT_REPOSITORY https://github.com/mossmann/hackrf.git
GIT_TAG ${HACKRF_TAG}
GIT_SUBMODULES ""
DEPENDS ${PTHREADS4W_DEPENDS}
DEPENDS ${PTHREADS4W_DEPENDS} ${LIBUSB_DEPENDS}
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/hackrf"
SOURCE_SUBDIR "host/libhackrf"
CMAKE_ARGS ${COMMON_CMAKE_ARGS}
@ -865,7 +1264,9 @@ if (WIN32 OR APPLE)
INSTALL_COMMAND ""
TEST_COMMAND ""
)
add_dependencies(hackrf pthreads4w)
if (WIN32)
add_dependencies(hackrf pthreads4w)
endif()
ExternalProject_Get_Property(hackrf source_dir binary_dir)
set(LIBHACKRF_FOUND ON CACHE INTERNAL "")
set(LIBHACKRF_EXTERNAL ON CACHE INTERNAL "")
@ -930,7 +1331,7 @@ if (WIN32 OR APPLE)
ExternalProject_Add(libiio
GIT_REPOSITORY https://github.com/analogdevicesinc/libiio.git
GIT_TAG ${LIBIIO_TAG}
DEPENDS ${PTHREADS4W_DEPENDS} ${LIBXML2_DEPENDS}
DEPENDS ${PTHREADS4W_DEPENDS} ${LIBXML2_DEPENDS} ${LIBUSB_DEPENDS}
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/libiio"
CMAKE_ARGS ${COMMON_CMAKE_ARGS}
-DLIBUSB_LIBRARIES=${LIBUSB_LIBRARIES}
@ -949,7 +1350,9 @@ if (WIN32 OR APPLE)
INSTALL_COMMAND ""
TEST_COMMAND ""
)
add_dependencies(libiio pthreads4w)
if (WIN32)
add_dependencies(libiio pthreads4w)
endif()
ExternalProject_Get_Property(libiio source_dir binary_dir)
set(LIBIIO_FOUND ON CACHE INTERNAL "")
set(LIBIIO_EXTERNAL ON CACHE INTERNAL "")
@ -960,7 +1363,7 @@ if (WIN32 OR APPLE)
set(LIBIIO_LIBRARIES "${binary_dir}/libiio${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
install(DIRECTORY "${binary_dir}/" DESTINATION "${INSTALL_LIB_DIR}"
FILES_MATCHING PATTERN "libiio*${CMAKE_SHARED_LIBRARY_SUFFIX}")
string(REPLACE "v" "" IIO_VERSION ${IIO_TAG})
string(REPLACE "v" "" IIO_VERSION ${LIBIIO_TAG})
makeCopy("${binary_dir}/libiio.framework/Versions/${IIO_VERSION}/libiio" "${binary_dir}/libiio${CMAKE_SHARED_LIBRARY_SUFFIX}" libiio)
add_custom_command(TARGET libiio POST_BUILD COMMAND install_name_tool -id "${binary_dir}/libiio${CMAKE_SHARED_LIBRARY_SUFFIX}" "${binary_dir}/libiio${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}")
@ -971,18 +1374,21 @@ if (WIN32 OR APPLE)
# needs pkgconfig, libusb, pthreads
if (WIN32)
set(LIBBLADERF_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/bladeRF.lib" CACHE INTERNAL "")
set(LIBBLADERF_LIBUSB_HEADER_FILE ${LIBUSB_INCLUDE_DIR}/libusb-1.0/libusb.h)
else ()
set(LIBBLADERF_LIBUSB_HEADER_FILE ${LIBUSB_INCLUDE_DIR}/libusb.h)
endif ()
ExternalProject_Add(bladerf
GIT_REPOSITORY https://github.com/Nuand/bladeRF.git
GIT_TAG ${BLADERF_TAG}
DEPENDS ${PTHREADS4W_DEPENDS}
DEPENDS ${PTHREADS4W_DEPENDS} ${LIBUSB_DEPENDS}
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/bladerf"
SOURCE_SUBDIR "host"
CMAKE_ARGS ${COMMON_CMAKE_ARGS}
-DPKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}
-DENABLE_BACKEND_USB=ON
-DENABLE_BACKEND_LIBUSB=ON
-DLIBUSB_HEADER_FILE=${LIBUSB_INCLUDE_DIR}/libusb-1.0/libusb.h
-DLIBUSB_HEADER_FILE=${LIBBLADERF_LIBUSB_HEADER_FILE}
-Dusb_LIBRARY=${LIBUSB_LIBRARIES}
-DLIBUSB_PATH=${EXTERNAL_LIBRARY_FOLDER}/libusb
-DTHREADS_PTHREADS_INCLUDE_DIR=${PTHREADS4W_INCLUDE_DIR}
@ -996,7 +1402,9 @@ if (WIN32 OR APPLE)
INSTALL_COMMAND ""
TEST_COMMAND ""
)
add_dependencies(bladerf pthreads4w)
if (WIN32)
add_dependencies(bladerf pthreads4w)
endif()
ExternalProject_Get_Property(bladerf source_dir binary_dir)
set(LIBBLADERF_FOUND ON CACHE INTERNAL "")
set(LIBBLADERF_EXTERNAL ON CACHE INTERNAL "")
@ -1004,10 +1412,43 @@ if (WIN32 OR APPLE)
if (WIN32)
install(FILES "${SDRANGEL_BINARY_BIN_DIR}/bladeRF${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}")
elseif (APPLE)
set(LIBBLADERF_LIBRARIES "${binary_dir}/host/output/libbladeRF${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
install(DIRECTORY "${binary_dir}/host/output/" DESTINATION "${INSTALL_LIB_DIR}"
set(LIBBLADERF_LIBRARIES "${binary_dir}/output/libbladeRF${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
install(DIRECTORY "${binary_dir}/output/" DESTINATION "${INSTALL_LIB_DIR}"
FILES_MATCHING PATTERN "libbladeRF*${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/host/output")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/output")
endif ()
endif (ENABLE_BLADERF)
if (ENABLE_USRP AND Boost_FOUND AND NOT WIN32)
ExternalProject_Add(uhd
GIT_REPOSITORY https://github.com/EttusResearch/uhd.git
GIT_TAG v4.2.0.0
DEPENDS ${LIBUSB_DEPENDS} ${Boost_DEPENDS}
PREFIX "${EXTERNAL_BUILD_LIBRARIES}/uhd"
SOURCE_SUBDIR "host"
CMAKE_ARGS ${COMMON_CMAKE_ARGS}
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-DBoost_INCLUDE_DIR=${Boost_INCLUDE_DIR}
-DLIBUSB_LIBRARIES=${LIBUSB_LIBRARIES}
-DLIBUSB_INCLUDE_DIR=${LIBUSB_INCLUDE_DIR}
-DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
-DCMAKE_INSTALL_NAME_DIR=<INSTALL_DIR>/lib
TEST_COMMAND ""
)
ExternalProject_Get_Property(uhd install_dir)
set(UHD_FOUND ON CACHE INTERNAL "")
set(UHD_EXTERNAL ON CACHE INTERNAL "")
set(UHD_INCLUDE_DIR "${install_dir}/include" CACHE INTERNAL "")
if (WIN32)
install(FILES "${SDRANGEL_BINARY_BIN_DIR}/uhd${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}")
elseif (APPLE)
set(UHD_LIBRARIES "${install_dir}/lib/libuhd${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "")
set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${install_dir}/lib")
endif ()
endif (ENABLE_USRP AND Boost_FOUND AND NOT WIN32)
endif (WIN32 OR APPLE)
# Set CACHE so variable is visible in cpack CMakeFile
set(MACOS_EXTERNAL_LIBS_FIXUP ${MACOS_EXTERNAL_LIBS_FIXUP} CACHE INTERNAL "")

View File

@ -64,7 +64,7 @@ if(NOT SERVER_MODE)
if(WIN32)
add_subdirectory(demoddatv)
else()
if((AVUTIL_VERSION VERSION_GREATER "55.27.99") AND (AVCODEC_VERSION VERSION_GREATER "57.48.101"))
if(((AVUTIL_VERSION VERSION_GREATER "55.27.99") AND (AVCODEC_VERSION VERSION_GREATER "57.48.101")) OR FFMPEG_EXTERNAL)
message(STATUS "Include demoddatv")
add_subdirectory(demoddatv)
else()

View File

@ -102,6 +102,10 @@ if (LINUX)
install(TARGETS ldpctool DESTINATION ${INSTALL_BIN_DIR})
endif()
if(FFMPEG_EXTERNAL)
add_dependencies(${TARGET_NAME} ffmpeg)
endif()
install(TARGETS ${TARGET_NAME} DESTINATION ${INSTALL_FOLDER})
# Install debug symbols

View File

@ -61,6 +61,10 @@ target_link_libraries(${TARGET_NAME}
"${OpenCV_LIBS}"
)
if(OpenCV_EXTERNAL)
add_dependencies(${TARGET_NAME} opencv)
endif()
install(TARGETS ${TARGET_NAME} DESTINATION ${INSTALL_FOLDER})
# Install debug symbols

View File

@ -87,6 +87,10 @@ target_link_libraries(${TARGET_NAME}
${SWRESAMPLE_LIBRARIES}
)
if(FFMPEG_EXTERNAL)
add_dependencies(${TARGET_NAME} ffmpeg)
endif()
install(TARGETS ${TARGET_NAME} DESTINATION ${INSTALL_FOLDER})
# Install debug symbols

View File

@ -475,6 +475,14 @@ if(LIBSERIALDV_EXTERNAL)
add_dependencies(sdrbase serialdv)
endif()
if(DEFINED FFTW3F_DEPENDS)
add_dependencies(sdrbase "${FFTW3F_DEPENDS}")
endif()
if(DEFINED OPUS_DEPENDS)
add_dependencies(sdrbase "${OPUS_DEPENDS}")
endif()
target_link_libraries(sdrbase
${OPUS_LIBRARIES}
${sdrbase_FFTW3F_LIB}

View File

@ -1399,8 +1399,8 @@ QString MainWindow::openGLVersion()
int minor = glCurrentContext->format().minorVersion();
bool es = glCurrentContext->isOpenGLES();
QString version = QString("%1.%2%3").arg(major).arg(minor).arg(es ? " ES" : "");
// Waterfall doesn't work if major version is less than 3, so display in red
if (major < 3) {
// Waterfall doesn't work if version is less than 2.1, so display in red
if ((major < 2) || ((major == 2) && (minor == 0))) {
version = "<span style=\"color:red\">" + version + "</span>";
}
return version;