diff --git a/CMakeLists.txt b/CMakeLists.txt index 50c0df38..6b653c30 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,9 @@ set(PROJECT_VERSION 1.8.4) set(PROJECT_DESCRIPTION "HF Digital Voice for Radio Amateurs") set(PROJECT_HOMEPAGE_URL "https://freedv.org") +# Makes FreeDV overridden CMake platform available for ARM MinGW builds. +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") + if(APPLE) project( ${PROJECT_NAME} @@ -368,12 +371,8 @@ if(NOT USE_STATIC_SAMPLERATE) list(APPEND FREEDV_LINK_LIBS ${LIBSAMPLERATE}) include_directories(${LIBSAMPLERATE_INCLUDE_DIR}) else(LIBSTAMPLERATE AND LIBSAMPLERATE_INCLUDE_DIR) - message(FATAL_ERROR "samplerate library not found. -On Linux systems try installing: - samplerate-devel (RPM based systems) - libsamplerate-dev (DEB based systems) -On Windows it's easiest to use the cmake option: USE_STATIC_SAMPLERATE" - ) + message(STATUS "Will attempt static build of samplerate.") + include(cmake/BuildSamplerate.cmake) endif(LIBSAMPLERATE AND LIBSAMPLERATE_INCLUDE_DIR) else(NOT USE_STATIC_SAMPLERATE) message(STATUS "Will attempt static build of samplerate.") @@ -392,12 +391,8 @@ if(NOT USE_STATIC_SNDFILE) if(LIBSNDFILE AND LIBSNDFILE_INCLUDE_DIR) list(APPEND FREEDV_LINK_LIBS ${LIBSNDFILE}) else(LIBSNDFILE AND LIBSNDFILE_INCLUDE_DIR) - message(FATAL_ERROR "sndfile library not found. -On Linux systems try installing: - libsndfile-devel (RPM based systems) - libsndfile-dev (DEB based systems) -On Windows it's easiest to use the cmake option: USE_STATIC_SNDFILE" - ) + message(STATUS "Will attempt static build of sndfile.") + include(cmake/BuildSndfile.cmake) endif(LIBSNDFILE AND LIBSNDFILE_INCLUDE_DIR) else(NOT USE_STATIC_SNDFILE) message(STATUS "Will attempt static build of sndfile.") @@ -510,13 +505,6 @@ add_subdirectory(contrib) message(STATUS "Build type will be: ${CMAKE_BUILD_TYPE}") -# Adds support for "make dist" target. -set(ARCHIVE_NAME "freedv-${FREEDV_VERSION_MAJOR}.${FREEDV_VERSION_MINOR}.${FREEDV_VERSION_PATCH}") -add_custom_target(dist - COMMAND git archive --prefix=${ARCHIVE_NAME}/ HEAD - | bzip2 > ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2 - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) - # CPack configuration for Windows and Linux. set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "HF Digital Voice for Radio Amateurs") set(CPACK_PACKAGE_VENDOR "CMake") diff --git a/cmake/BuildCodec2.cmake b/cmake/BuildCodec2.cmake index fc4c42e3..73e4fda6 100644 --- a/cmake/BuildCodec2.cmake +++ b/cmake/BuildCodec2.cmake @@ -11,7 +11,7 @@ endif(BUILD_OSX_UNIVERSAL) # Bootstrap lpcnetfreedv library include(cmake/BuildLPCNet.cmake) -# Build final codec2 library with lpcnetfreedv +# Build codec2 library with lpcnetfreedv set(CODEC2_CMAKE_ARGS ${CODEC2_CMAKE_ARGS} -DLPCNET_BUILD_DIR=${CMAKE_BINARY_DIR}/LPCNet_build) include(ExternalProject) ExternalProject_Add(build_codec2 @@ -19,7 +19,7 @@ ExternalProject_Add(build_codec2 BINARY_DIR codec2_build GIT_REPOSITORY https://github.com/drowe67/codec2.git GIT_TAG origin/master - CMAKE_ARGS ${CODEC2_CMAKE_ARGS} ${SPEEXDSP_CMAKE_ARGS} + CMAKE_ARGS ${CODEC2_CMAKE_ARGS} CMAKE_CACHE_ARGS -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET} INSTALL_COMMAND "" ) diff --git a/cmake/BuildHamlib.cmake b/cmake/BuildHamlib.cmake index 247bd900..45f74ace 100644 --- a/cmake/BuildHamlib.cmake +++ b/cmake/BuildHamlib.cmake @@ -1,3 +1,6 @@ +if(MINGW AND CMAKE_CROSSCOMPILING) + set(CONFIGURE_COMMAND ./configure --host=${HOST} --target=${HOST} --disable-shared --prefix=${CMAKE_BINARY_DIR}/external/dist) +else(MINGW AND CMAKE_CROSSCOMPILING) if(APPLE) if(BUILD_OSX_UNIVERSAL) set(CONFIGURE_COMMAND ./configure --disable-shared --prefix=${CMAKE_BINARY_DIR}/external/dist CFLAGS=-g\ -O2\ -mmacosx-version-min=10.9\ -arch\ x86_64\ -arch\ arm64 CXXFLAGS=-g\ -O2\ -mmacosx-version-min=10.9\ -arch\ x86_64\ -arch\ arm64) @@ -5,8 +8,9 @@ else() set(CONFIGURE_COMMAND ./configure --disable-shared --prefix=${CMAKE_BINARY_DIR}/external/dist CFLAGS=-g\ -O2\ -mmacosx-version-min=10.9 CXXFLAGS=-g\ -O2\ -mmacosx-version-min=10.9) endif(BUILD_OSX_UNIVERSAL) else() - set(CONFIGURE_COMMAND ./configure --disable-shared --prefix=${CMAKE_BINARY_DIR}/external/dist) + set(CONFIGURE_COMMAND ./configure --disable-shared --prefix=${CMAKE_BINARY_DIR}/external/dist CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER}) endif() +endif(MINGW AND CMAKE_CROSSCOMPILING) include(ExternalProject) ExternalProject_Add(hamlib diff --git a/cmake/BuildSamplerate.cmake b/cmake/BuildSamplerate.cmake index dd369231..f024b6da 100644 --- a/cmake/BuildSamplerate.cmake +++ b/cmake/BuildSamplerate.cmake @@ -1,35 +1,21 @@ -set(SAMPLERATE_TARBALL "libsamplerate-0.1.9") +set(SAMPLERATE_VERSION "0.2.2") -set(PATCH_COMMAND patch -p0 < ${CMAKE_BINARY_DIR}/../patch-samplerate.diff) -if(MINGW AND CMAKE_CROSSCOMPILING) - set(CONFIGURE_COMMAND ./configure --host=${HOST} --target=${HOST} --prefix=${CMAKE_BINARY_DIR}/external/dist --disable-sndfile --disable-fftw) -elseif(APPLE) -if(BUILD_OSX_UNIVERSAL) - set(CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/external/dist CFLAGS=-g\ -O2\ -mmacosx-version-min=10.9\ -arch\ arm64\ -arch\ x86_64) -else() - set(CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/external/dist CFLAGS=-g\ -O2\ -mmacosx-version-min=10.9) -endif(BUILD_OSX_UNIVERSAL) -else() - set(CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/external/dist) +include(FetchContent) +FetchContent_Declare( + samplerate + GIT_REPOSITORY https://github.com/libsndfile/libsamplerate.git + GIT_SHALLOW TRUE + GIT_PROGRESS TRUE + GIT_TAG master +) + +FetchContent_GetProperties(samplerate) +if(NOT samplerate_POPULATED) + FetchContent_Populate(samplerate) + add_subdirectory(${samplerate_SOURCE_DIR} ${samplerate_BINARY_DIR} EXCLUDE_FROM_ALL) endif() -include(ExternalProject) -ExternalProject_Add(samplerate - URL http://www.mega-nerd.com/SRC/${SAMPLERATE_TARBALL}.tar.gz - BUILD_IN_SOURCE 1 - INSTALL_DIR external/dist - PATCH_COMMAND ${PATCH_COMMAND} - CONFIGURE_COMMAND ${CONFIGURE_COMMAND} - BUILD_COMMAND $(MAKE) - INSTALL_COMMAND $(MAKE) install -) -if(WIN32) - set(SAMPLERATE_LIBRARIES - ${CMAKE_BINARY_DIR}/external/dist/lib/libsamplerate.a) -else(WIN32) - set(SAMPLERATE_LIBRARIES - ${CMAKE_BINARY_DIR}/external/dist/lib/libsamplerate.a) -endif(WIN32) -include_directories(${CMAKE_BINARY_DIR}/external/dist/include) -list(APPEND FREEDV_LINK_LIBS ${SAMPLERATE_LIBRARIES}) -list(APPEND FREEDV_STATIC_DEPS samplerate) +list(APPEND FREEDV_LINK_LIBS samplerate) + +target_include_directories(samplerate BEFORE PRIVATE ${samplerate_BINARY_DIR}) +include_directories(${samplerate_SOURCE_DIR}/include) diff --git a/cmake/BuildSpeex.cmake b/cmake/BuildSpeex.cmake index 8f6dead8..a2c87e3c 100644 --- a/cmake/BuildSpeex.cmake +++ b/cmake/BuildSpeex.cmake @@ -1,21 +1,20 @@ -set(SPEEXDSP_TARBALL "speexdsp-1.2rc3.tar.gz") - if(MINGW AND CMAKE_CROSSCOMPILING) include(cmake/MinGW.cmake) - set(CONFIGURE_COMMAND ./configure --host=${HOST} --prefix=${CMAKE_BINARY_DIR}/external/dist --disable-examples) + set(CONFIGURE_COMMAND ./autogen.sh && ./configure --host=${HOST} --prefix=${CMAKE_BINARY_DIR}/external/dist --disable-examples) elseif(APPLE) if(BUILD_OSX_UNIVERSAL) - set(CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/../configure_speexdsp_osx_universal.sh ${CMAKE_BINARY_DIR}/external/dist) + set(CONFIGURE_COMMAND ./autogen.sh && ${CMAKE_BINARY_DIR}/../configure_speexdsp_osx_universal.sh ${CMAKE_BINARY_DIR}/external/dist) else() - set(CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/../configure_speexdsp_osx.sh ${CMAKE_BINARY_DIR}/external/dist) + set(CONFIGURE_COMMAND ./autogen.sh && ${CMAKE_BINARY_DIR}/../configure_speexdsp_osx.sh ${CMAKE_BINARY_DIR}/external/dist) endif(BUILD_OSX_UNIVERSAL) else() - set(CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/external/dist --disable-examples) + set(CONFIGURE_COMMAND ./autogen.sh && ./configure --prefix=${CMAKE_BINARY_DIR}/external/dist --disable-examples) endif() include(ExternalProject) ExternalProject_Add(speex - URL http://downloads.xiph.org/releases/speex/${SPEEXDSP_TARBALL} + GIT_REPOSITORY https://gitlab.xiph.org/xiph/speexdsp.git + GIT_TAG origin/master BUILD_IN_SOURCE 1 INSTALL_DIR external/dist CONFIGURE_COMMAND ${CONFIGURE_COMMAND} diff --git a/cmake/MinGW.cmake b/cmake/MinGW.cmake index 63cbce90..520c72c3 100644 --- a/cmake/MinGW.cmake +++ b/cmake/MinGW.cmake @@ -1,10 +1,14 @@ # If we're cross-compiling then we need to set the target host manually. if(MINGW AND CMAKE_CROSSCOMPILING) - if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) - set(HOST x86_64-w64-mingw32) - set(BUILD x86_64-redhat-linux-gnu) - else() - set(HOST i686-w64-mingw32) - set(BUILD i686-redhat-linux-gnu) + if(CMAKE_C_COMPILER_TARGET) + set(HOST ${CMAKE_C_COMPILER_TARGET}) + else() + if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) + set(HOST x86_64-w64-mingw32) + set(BUILD x86_64-redhat-linux-gnu) + else() + set(HOST i686-w64-mingw32) + set(BUILD i686-redhat-linux-gnu) + endif() endif() endif() diff --git a/freedv-llvm-aarch64.cmake b/freedv-llvm-aarch64.cmake new file mode 100644 index 00000000..6ec9aca6 --- /dev/null +++ b/freedv-llvm-aarch64.cmake @@ -0,0 +1,11 @@ +set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSTEM_PROCESSOR aarch64) + +set(triple ${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32) + +set(CMAKE_C_COMPILER ${triple}-clang) +set(CMAKE_C_COMPILER_TARGET ${triple}) +set(CMAKE_CXX_COMPILER ${triple}-clang++) +set(CMAKE_CXX_COMPILER_TARGET ${triple}) + +SET(CMAKE_RC_COMPILER ${triple}-windres)