From: hobbes1069 Date: Wed, 24 Apr 2013 19:34:37 +0000 (+0000) Subject: Update cmake configuration including building static builds of most dependencies... X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=3aeaf2ab3e51bf8e7fea3d6a95627310ff968e1d;p=freetel-svn-tracking.git Update cmake configuration including building static builds of most dependencies. Update codec2 build to include basic cpack configuration. git-svn-id: https://svn.code.sf.net/p/freetel/code@1235 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/CMakeLists.txt b/codec2-dev/CMakeLists.txt index 729b09cc..411930c7 100644 --- a/codec2-dev/CMakeLists.txt +++ b/codec2-dev/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required (VERSION 2.8) +cmake_minimum_required(VERSION 2.8) # Prevent in-source builds set(CMAKE_DISABLE_SOURCE_CHANGES ON) @@ -24,38 +24,56 @@ endif() message(STATUS "codec2 version: ${PROJECT_VERSION}") +# +# Find the svn revision if this is a working copy. +# WORK IN PROGRESS +# Works ok if it is a working copy but errors out if not. +# +#find_package(Subversion) +#if(Subversion_FOUND) +# Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} CODEC2) +# message(STATUS "codec2 svn revision: ${CODEC2_WC_REVISION}") +#else(SUBVERSION_FOUND) +# message(WARNING "Subversion not found. Can not determine svn revision.") +#endif(SUBVERSION_FOUND) + # Set default C++ flags. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -O3 -g") # Build shared libraries by default -set(BUILD_SHARED_LIBS TRUE) +set(BUILD_SHARED_LIBS TRUE CACHE BOOL "Build shared library. Set to FALSE for static library.") # # Find some standard headers and functions. # Should we error out if one is not available? -# Do the results need to be written to a config.h? # -find_library(LIBM m ) -if(LIBM) - set(CMAKE_REQUIRED_INCLUDES math.h) - set(CMAKE_REQUIRED_LIBRARIES m) -endif(LIBM) + +# Math library is automatic on MSVC +if(UNIX) + set(CMAKE_REQUIRED_INCLUDES math.h) + set(CMAKE_REQUIRED_LIBRARIES m) +endif(UNIX) include(CheckIncludeFiles) check_include_files("stdlib.h" HAVE_STDLIB_H) check_include_files("string.h" HAVE_STRING_H) include(CheckFunctionExists) -check_function_exists(floor HAVE_FLOOR) -check_function_exists(ceil HAVE_CEIL) -check_function_exists(pow HAVE_POW) -check_function_exists(sqrt HAVE_SQRT) -check_function_exists(sin HAVE_SIN) -check_function_exists(cos HAVE_COS) -check_function_exists(atan2 HAVE_ATAN2) -check_function_exists(log10 HAVE_LOG10) +check_function_exists(floor HAVE_FLOOR) +check_function_exists(ceil HAVE_CEIL) +check_function_exists(pow HAVE_POW) +check_function_exists(sqrt HAVE_SQRT) +check_function_exists(sin HAVE_SIN) +check_function_exists(cos HAVE_COS) +check_function_exists(atan2 HAVE_ATAN2) +check_function_exists(log10 HAVE_LOG10) +check_function_exists(round HAVE_ROUND) +check_function_exists(getopt HAVE_GETOPT) +configure_file ("${PROJECT_SOURCE_DIR}/cmake/config.h.in" + "${PROJECT_BINARY_DIR}/config.h" ) +include_directories(${PROJECT_BINARY_DIR}) # # codec2 library @@ -72,5 +90,24 @@ if(INSTALL_EXAMPLES) endif() # -# Cpack configuration to go here... +# Cpack NSIS configuration for Windows. EXPERIMENTAL!!! # +if(WIN32) + include(InstallRequiredSystemLibraries) + set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Next-Generation Digital Voice for Two-Way Radio") + set(CPACK_PACKAGE_VENDOR "CMake") + set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") + set(CPACK_PACKAGE_VERSION_MAJOR ${PACKAGE_VERSION_MAJOR}) + set(CPACK_PACKAGE_VERSION_MINOR ${PACKAGE_VERSION_MINOR}) + set(CPACK_PACKAGE_VERSION_PATCH ${PACKAGE_VERSION_PATCH}) + set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") + # There is a bug in NSI that does not handle full unix paths properly. Make + # sure there is at least one set of four (4) backlasshes. + #set(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp") + set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\MyExecutable.exe") + set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} Codec2") + set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\codec2.org") + set(CPACK_NSIS_MODIFY_PATH ON) + include(CPack) +endif(WIN32) diff --git a/codec2-dev/cmake/config.h.in b/codec2-dev/cmake/config.h.in new file mode 100644 index 00000000..f5de5258 --- /dev/null +++ b/codec2-dev/cmake/config.h.in @@ -0,0 +1,21 @@ +/*-------------------------------------------------------------------------- + ** This file is autogenerated from config.h.in + ** during the cmake configuration of your project. If you need to make changes + ** edit the original file NOT THIS FILE. + ** --------------------------------------------------------------------------*/ +#ifndef _CONFIGURATION_HEADER_GUARD_H_ +#define _CONFIGURATION_HEADER_GUARD_H_ + +#define SIZEOF_INT @SIZEOF_INT@ +#cmakedefine HAVE_STDLIB_H @HAVE_STDLIB_H@ +#cmakedefine HAVE_STRING_H @HAVE_STRING_H@ +#cmakedefine HAVE_FLOOR @HAVE_FLOOR@ +#cmakedefine HAVE_CEIL @HAVE_CEIL@ +#cmakedefine HAVE_MEMSET @HAVE_MEMSET@ +#cmakedefine HAVE_POW @HAVE_POW@ +#cmakedefine HAVE_SQRT @HAVE_SQRT@ +#cmakedefine HAVE_SIN @HAVE_SIN@ +#cmakedefine HAVE_COS @HAVE_COS@ +#cmakedefine HAVE_ATAN2 @HAVE_ATAN2@ +#cmakedefine HAVE_LOG10 @HAVE_LOG10@ +#endif diff --git a/codec2-dev/src/CMakeLists.txt b/codec2-dev/src/CMakeLists.txt index fdf09e3f..9b926e30 100644 --- a/codec2-dev/src/CMakeLists.txt +++ b/codec2-dev/src/CMakeLists.txt @@ -1,3 +1,164 @@ +# +# Generated sources +# + +set(D ${CMAKE_CURRENT_SOURCE_DIR}/codebook) + +# lsp quantisers + +set(CODEBOOKS + ${D}/lsp1.txt + ${D}/lsp2.txt + ${D}/lsp3.txt + ${D}/lsp4.txt + ${D}/lsp5.txt + ${D}/lsp6.txt + ${D}/lsp7.txt + ${D}/lsp8.txt + ${D}/lsp9.txt + ${D}/lsp10.txt +) + +# lspd quantisers + +set(CODEBOOKSD + ${D}/dlsp1.txt + ${D}/dlsp2.txt + ${D}/dlsp3.txt + ${D}/dlsp4.txt + ${D}/dlsp5.txt + ${D}/dlsp6.txt + ${D}/dlsp7.txt + ${D}/dlsp8.txt + ${D}/dlsp9.txt + ${D}/dlsp10.txt +) + +# lspd VQ quantisers + +set(CODEBOOKSVQ + ${D}/lsp1.txt + ${D}/lsp2.txt + ${D}/lsp3.txt + ${D}/lsp4.txt + ${CMAKE_SOURCE_DIR}/unittest/lsp45678910.txt +) + +set(CODEBOOKSJND + ${D}/lsp1.txt + ${D}/lsp2.txt + ${D}/lsp3.txt + ${D}/lsp4.txt + ${CMAKE_SOURCE_DIR}/unittest/lspjnd5-10.txt +) + +set(CODEBOOKSDT + ${D}/lspdt1.txt + ${D}/lspdt2.txt + ${D}/lspdt3.txt + ${D}/lspdt4.txt + ${D}/lspdt5.txt + ${D}/lspdt6.txt + ${D}/lspdt7.txt + ${D}/lspdt8.txt + ${D}/lspdt9.txt + ${D}/lspdt10.txt +) + +set(CODEBOOKSJVM + ${D}/lspjvm1.txt + ${D}/lspjvm2.txt + ${D}/lspjvm3.txt +) + +set(CODEBOOKSVQANSSI + ${D}/lspvqanssi1.txt + ${D}/lspvqanssi2.txt + ${D}/lspvqanssi3.txt + ${D}/lspvqanssi4.txt +) + +set(CODEBOOKSGE ${D}/gecb.txt) + +# when crosscompiling import the executable targets from a file +if(CMAKE_CROSSCOMPILING) + SET(IMPORT_EXECUTABLES "IMPORTFILE-NOTFOUND" CACHE FILEPATH "Point it to the export file from a native build") + INCLUDE(${IMPORT_EXECUTABLES}) +endif(CMAKE_CROSSCOMPILING) + +# Build code generator binaries. These do not get installed. +if(NOT CMAKE_CROSSCOMPILING) + add_executable(generate_codebook generate_codebook.c) + target_link_libraries(generate_codebook ${CMAKE_REQUIRED_LIBRARIES}) + + add_executable(genlspdtcb genlspdtcb.c) + target_link_libraries(genlspdtcb ${CMAKE_REQUIRED_LIBRARIES}) +endif(NOT CMAKE_CROSSCOMPILING) + +# codebook.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebook.c + COMMAND generate_codebook lsp_cb ${CODEBOOKS} > ${CMAKE_CURRENT_BINARY_DIR}/codebook.c + DEPENDS generate_codebook ${CODEBOOKS} +) + +# codebookd.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c + COMMAND generate_codebook lsp_cbd ${CODEBOOKSD} > ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c + DEPENDS generate_codebook ${CODEBOOKSD} +) + +# codebookdt.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookdt.c + COMMAND generate_codebook lsp_cbdt ${CODEBOOKSDT} > ${CMAKE_CURRENT_BINARY_DIR}/codebookdt.c + DEPENDS generate_codebook ${CODEBOOKSDT} +) + +# codebookvq.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookvq.c + COMMAND generate_codebook lsp_cbvq ${CODEBOOKSVQ} > ${CMAKE_CURRENT_BINARY_DIR}/codebookvq.c + DEPENDS generate_codebook ${CODEBOOKSVQ} +) + +# codebookjnd.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookjnd.c + COMMAND generate_codebook lsp_cbjnd ${CODEBOOKSJND} > ${CMAKE_CURRENT_BINARY_DIR}/codebookjnd.c + DEPENDS generate_codebook ${CODEBOOKSJND} +) + +# codebookjvm.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookjvm.c + COMMAND generate_codebook lsp_cbjvm ${CODEBOOKSJVM} > ${CMAKE_CURRENT_BINARY_DIR}/codebookjvm.c + DEPENDS generate_codebook ${CODEBOOKSJVM} +) + +# codebookvqanssi.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookvqanssi.c + COMMAND generate_codebook lsp_cbvqanssi ${CODEBOOKSVQANSSI} > ${CMAKE_CURRENT_BINARY_DIR}/codebookvqanssi.c + DEPENDS generate_codebook ${CODEBOOKSVQANSSI} +) + +# codebookge.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookge.c + COMMAND generate_codebook ge_cb ${CODEBOOKSGE} > ${CMAKE_CURRENT_BINARY_DIR}/codebookge.c + DEPENDS generate_codebook ${CODEBOOKSGE} +) + +# Make native builds available for cross-compiling. +export(TARGETS generate_codebook genlspdtcb + FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake) + +# +# codec2 library sources +# + set(CODEC2_SRCS dump.c lpc.c @@ -21,9 +182,11 @@ set(CODEC2_SRCS codebookvqanssi.c codebookdt.c codebookge.c + golay23.c ) add_library(codec2 ${CODEC2_SRCS}) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(codec2 ${CMAKE_REQUIRED_LIBRARIES}) set_target_properties(codec2 PROPERTIES SOVERSION ${SOVERSION}) @@ -31,7 +194,6 @@ set(CODEC2_PUBLIC_HEADERS codec2.h codec2_fdmdv.h codec2_fifo.h - comp.h golay23.h ) diff --git a/fdmdv2/CMakeLists.txt b/fdmdv2/CMakeLists.txt index 4c0bcfab..f7ab1648 100644 --- a/fdmdv2/CMakeLists.txt +++ b/fdmdv2/CMakeLists.txt @@ -19,12 +19,38 @@ if(VERSION_PATCH) set(VERSION ${VERSION}.${VERSION_PATCH}) endif(VERSION_PATCH) +set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + # Work around for not using a svn working copy. add_definitions(-DSVN_REVISION="1234") # Set default build flags. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") +# +# Setup cmake options +# +set(USE_STATIC_DEPS FALSE CACHE BOOL + "Download and build static libraries instead of system libraries.") +set(USE_STATIC_PORTAUDIO FALSE CACHE BOOL + "Download and build static portaudio instead of the system library.") +set(USE_STATIC_SNDFILE FALSE CACHE BOOL + "Download and build static sndfile instead of the system library.") +set(USE_STATIC_SAMPLERATE FALSE CACHE BOOL + "Download and build static samplerate instead of the system library.") +set(USE_STATIC_SOX FALSE CACHE BOOL + "Download and build static sox instead of the system library.") +set(USE_STATIC_LIBCTB FALSE CACHE BOOL + "Download and build static libctb instead of the system library.") +if(USE_STATIC_DEPS) + set(USE_STATIC_PORTAUDIO TRUE FORCE) + set(USE_STATIC_SNDFILE TRUE FORCE) + set(USE_STATIC_SAMPLERATE TRUE FORCE) + set(USE_STATIC_SOX TRUE FORCE) + set(USE_STATIC_LIBCTB TRUE FORCE) +endif(USE_STATIC_DEPS) +set(FREEDV_STATIC_LIBS "") + # Setup empty list to add to set(FREEDV_LINK_LIBS "") @@ -64,7 +90,7 @@ endif(UNIX) # Find some standard headers and functions. include(CheckIncludeFiles) -check_include_files("limits.h" HAVE_STDINT_H) +check_include_files("limits.h" HAVE_LIMITS_H) check_include_files("stddef.h" HAVE_STDDEF_H) check_include_files("stdlib.h" HAVE_STDLIB_H) check_include_files("string.h" HAVE_STRING_H) @@ -82,57 +108,78 @@ configure_file ("${PROJECT_SOURCE_DIR}/cmake/config.h.in" "${PROJECT_BINARY_DIR}/config.h" ) include_directories(${PROJECT_BINARY_DIR}) -# Find portaudio Library -message(STATUS "Looking for portaudio...") -find_library(PORTAUDIO portaudio) -if(PORTAUDIO) - list(APPEND FREEDV_LINK_LIBS ${PORTAUDIO}) - message(STATUS " portaudio found: ${PORTAUDIO}") -else(PORTAUDIO) - message(FATAL_ERROR "portaudio library not found.") -endif(PORTAUDIO) +# Find or build portaudio Library +if(NOT USE_STATIC_PORTAUDIO) + message(STATUS "Looking for portaudio...") + find_library(PORTAUDIO portaudio) + if(PORTAUDIO) + list(APPEND FREEDV_LINK_LIBS ${PORTAUDIO}) + message(STATUS " portaudio found: ${PORTAUDIO}") + else(PORTAUDIO) + message(FATAL_ERROR "portaudio library not found.") + endif(PORTAUDIO) +else(NOT USE_STATIC_PORTAUDIO) + message(STATUS "Will attempt static build of portaudio.") + include(cmake/BuildPortaudio.cmake) + list(APPEND FREEDV_LINK_LIBS ${PORTAUDIO_LIBRARIES}) + include_directories(${PORTAUDIO_INCLUDES}) +endif(NOT USE_STATIC_PORTAUDIO) # Do we need this? -find_library(PORTAUDIOCPP portaudiocpp) +#find_library(PORTAUDIOCPP portaudiocpp) # Pthread Library -message(STATUS "Looking for pthread...") -find_library(PTHREAD pthread) -if(PTHREAD) - # Don't need to add linker flag, wx-config adds it already. - message(STATUS " pthread found: ${PTHREAD}") -else(PTHREAD) - message(FATAL_ERROR "pthread library not found.") -endif(PTHREAD) +find_package(Threads REQUIRED) +message(STATUS "Threads library flags: ${CMAKE_THREAD_LIBS_INIT}") # Samplerate Library -message(STATUS "Looking for samplerate...") -find_library(LIBSAMPLERATE samplerate) -if(LIBSAMPLERATE) - list(APPEND FREEDV_LINK_LIBS ${LIBSAMPLERATE}) - message(STATUS " samplerate found: ${LIBSAMPLERATE}") -else(LIBSTAMPLERATE) - message(FATAL_ERROR "samplerate library not found.") -endif(LIBSAMPLERATE) - +if(NOT USE_STATIC_SAMPLERATE) + message(STATUS "Looking for samplerate...") + find_library(LIBSAMPLERATE samplerate) + if(LIBSAMPLERATE) + list(APPEND FREEDV_LINK_LIBS ${LIBSAMPLERATE}) + message(STATUS " samplerate found: ${LIBSAMPLERATE}") + else(LIBSTAMPLERATE) + message(FATAL_ERROR "samplerate library not found.") + endif(LIBSAMPLERATE) +else(NOT USE_STATIC_SAMPLERATE) + message(STATUS "Will attempt static build of samplerate.") + include(cmake/BuildSamplerate.cmake) + list(APPEND FREEDV_LINK_LIBS ${SAMPLERATE_LIBRARIES}) + include_directories(${SAMPLERATE_INCLUDES}) +endif(NOT USE_STATIC_SAMPLERATE) + # sndfile Library -message(STATUS "Looking for sndfile...") -find_library(LIBSNDFILE sndfile) -if(LIBSNDFILE) - list(APPEND FREEDV_LINK_LIBS ${LIBSNDFILE}) - message(STATUS " sndfile found: ${LIBSNDFILE}") -else(LIBSNDFILE) - message(FATAL_ERROR "sndfile library not found.") -endif(LIBSNDFILE) +if(NOT USE_STATIC_SNDFILE) + message(STATUS "Looking for sndfile...") + find_library(LIBSNDFILE sndfile) + if(LIBSNDFILE) + list(APPEND FREEDV_LINK_LIBS ${LIBSNDFILE}) + message(STATUS " sndfile found: ${LIBSNDFILE}") + else(LIBSNDFILE) + message(FATAL_ERROR "sndfile library not found.") + endif(LIBSNDFILE) +else(NOT USE_STATIC_SNDFILE) + message(STATUS "Will attempt static build of sndfile.") + include(cmake/BuildSndfile.cmake) + list(APPEND FREEDV_LINK_LIBS ${SNDFILE_LIBRARIES}) + include_directories(${SNDFILE_INCLUDES}) +endif(NOT USE_STATIC_SNDFILE) # Find sox library -message(STATUS "Looking for sox...") -find_library(LIBSOX sox) -if(LIBSOX) - list(APPEND FREEDV_LINK_LIBS ${LIBSOX}) - message(STATUS " sox found: ${LIBSOX}") -else(LIBSOX) - message(FATAL_ERROR "sox library not found.") -endif(LIBSOX) +if(NOT USE_STATIC_SOX) + message(STATUS "Looking for sox...") + find_library(LIBSOX sox) + if(LIBSOX) + list(APPEND FREEDV_LINK_LIBS ${LIBSOX}) + message(STATUS " sox found: ${LIBSOX}") + else(LIBSOX) + message(FATAL_ERROR "sox library not found.") + endif(LIBSOX) +else(NOT USE_STATIC_SOX) + include(cmake/BuildSox.cmake) + list(APPEND FREEDV_LINK_LIBS ${SOX_LIBRARIES}) + include_directories(${SOX_INCLUDES}) +endif(NOT USE_STATIC_SOX) # Find wxWidgets set(WXCONFIG "" CACHE FILEPATH "Location of wx-config binary.") @@ -182,31 +229,33 @@ list(APPEND FREEDV_LINK_LIBS ${CODEC2_LIBRARY}) # # Find libctb. Assumes version 0.16 # -message(STATUS "Looking for libctb...") -find_path(LIBCTB_INCLUDE_DIR ctb.h - PATH_SUFFIXES ctb-0.16 - ) -find_library(LIBCTB_LIBRARY NAMES ctb ctb-0.16) -set(LIBCTB_LIBRARIES ${LIBCTB_LIBRARY}) -set(LIBCTB_INCLUDE_DIRS ${LIBCTB_INCLUDE_DIR}) -message(STATUS " libctb library: ${LIBCTB_LIBRARIES}") -message(STATUS " libctb headers: ${LIBCTB_INCLUDE_DIRS}") -# Check to make sure linking with libctb works. -include(CheckCXXSourceCompiles) -set(CMAKE_REQUIRED_LIBRARIES ${LIBCTB_LIBRARIES}) -check_cxx_source_compiles(" - #include - int main() { - ctb::SerialPort* m_serialPort; - m_serialPort = new ctb::SerialPort(); - };" - LIBCTB_LINKS) -if(NOT LIBCTB_LINKS) - message(FATAL_ERROR "Linking libctb failed.") -endif() +if(NOT USE_STATIC_LIBCTB) + message(STATUS "Looking for libctb...") + find_path(LIBCTB_INCLUDE_DIR ctb.h + PATH_SUFFIXES ctb-0.16 + ) + find_library(LIBCTB_LIBRARY NAMES ctb ctb-0.16) + message(STATUS " libctb library: ${LIBCTB_LIBRARY}") + message(STATUS " libctb headers: ${LIBCTB_INCLUDE_DIR}") + set(CMAKE_REQUIRED_LIBRARIES ${LIBCTB_LIBRARY}) + # Check to make sure linking with libctb works. + include(CheckCXXSourceCompiles) + check_cxx_source_compiles(" + #include + int main() { + ctb::SerialPort* m_serialPort; + m_serialPort = new ctb::SerialPort(); + };" + LIBCTB_LINKS) + if(NOT LIBCTB_LINKS) + message(FATAL_ERROR "Linking libctb failed.") + endif(NOT LIBCTB_LINKS) +else(NOT USE_STATIC_LIBCTB) + include(cmake/BuildLibctb.cmake) +endif(NOT USE_STATIC_LIBCTB) -include_directories(${LIBCTB_INCLUDE_DIRS}) -list(APPEND FREEDV_LINK_LIBS ${LIBCTB_LIBRARIES}) +include_directories(${LIBCTB_INCLUDE_DIR}) +list(APPEND FREEDV_LINK_LIBS ${LIBCTB_LIBRARY}) add_subdirectory(src) diff --git a/fdmdv2/cmake/BuildLibctb.cmake b/fdmdv2/cmake/BuildLibctb.cmake new file mode 100644 index 00000000..a91f7385 --- /dev/null +++ b/fdmdv2/cmake/BuildLibctb.cmake @@ -0,0 +1,20 @@ +set(LIBCTB_TARBALL "libctb-0.16") + +include(ExternalProject) +ExternalProject_Add(libctb + URL https://iftools.com/download/ctb/0.16/${LIBCTB_TARBALL}.tar.gz + # Project does not have configure. Abuse to change directory. + CONFIGURE_COMMAND "" + BINARY_DIR libctb-prefix/src/libctb/build + #BUILD_IN_SOURCE 1 + BUILD_COMMAND $(MAKE) -f GNUmakefile + INSTALL_DIR external/dist + INSTALL_COMMAND $(MAKE) install prefix=${CMAKE_BINARY_DIR}/external/dist +) +if(WIN32) + set(LIBCTB_LIBRARY ${CMAKE_BINARY_DIR}/external/dist/lib/ctb-0.16.lib) +else(WIN32) + set(LIBCTB_LIBRARY ${CMAKE_BINARY_DIR}/external/dist/lib/libctb-0.16.a) +endif(WIN32) +set(LIBCTB_INCLUDE_DIR external/dist/include) +list(APPEND FREEDV_STATIC_LIBS libctb) diff --git a/fdmdv2/cmake/BuildPortaudio.cmake b/fdmdv2/cmake/BuildPortaudio.cmake new file mode 100644 index 00000000..24163dcd --- /dev/null +++ b/fdmdv2/cmake/BuildPortaudio.cmake @@ -0,0 +1,25 @@ +set(PORTAUDIO_TARBALL "pa_stable_v19_20111121") + +include(ExternalProject) +ExternalProject_Add(portaudio + URL http://www.portaudio.com/archives/${PORTAUDIO_TARBALL}.tgz + BUILD_IN_SOURCE 1 + INSTALL_DIR external/dist + CONFIGURE_COMMAND ./configure --enable-cxx --without-jack --prefix=${CMAKE_BINARY_DIR}/external/dist + BUILD_COMMAND make + INSTALL_COMMAND make install +) +if(WIN32) + set(PORTAUDIO_LIBRARIES + ${CMAKE_BINARY_DIR}/external/dist/lib/portaudio.lib) +else(WIN32) + find_library(RT rt) + find_library(ASOUND asound) + set(PORTAUDIO_LIBRARIES + ${CMAKE_BINARY_DIR}/external/dist/lib/libportaudio.a + ${RT} + ${ASOUND} + ) +endif(WIN32) +set(PORTAUDIO_INCLUDES external/dist/include) +list(APPEND FREEDV_STATIC_LIBS portaudio) diff --git a/fdmdv2/cmake/BuildSamplerate.cmake b/fdmdv2/cmake/BuildSamplerate.cmake new file mode 100644 index 00000000..9e52854c --- /dev/null +++ b/fdmdv2/cmake/BuildSamplerate.cmake @@ -0,0 +1,20 @@ +set(SAMPLERATE_TARBALL "libsamplerate-0.1.8") + +include(ExternalProject) +ExternalProject_Add(samplerate + URL http://www.mega-nerd.com/SRC/${SAMPLERATE_TARBALL}.tar.gz + BUILD_IN_SOURCE 1 + INSTALL_DIR external/dist + CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/external/dist + BUILD_COMMAND make + INSTALL_COMMAND make install +) +if(WIN32) + set(SAMPLERATE_LIBRARIES + ${CMAKE_BINARY_DIR}/external/dist/lib/samplerate.lib) +else(WIN32) + set(SAMPLERATE_LIBRARIES + ${CMAKE_BINARY_DIR}/external/dist/lib/libsamplerate.a) +endif(WIN32) +set(SAMPLERATE_INCLUDES external/dist/include) +list(APPEND FREEDV_STATIC_LIBS samplerate) diff --git a/fdmdv2/cmake/BuildSndfile.cmake b/fdmdv2/cmake/BuildSndfile.cmake new file mode 100644 index 00000000..fbf677df --- /dev/null +++ b/fdmdv2/cmake/BuildSndfile.cmake @@ -0,0 +1,20 @@ +set(SNDFILE_TARBALL "libsndfile-1.0.25") + +include(ExternalProject) +ExternalProject_Add(sndfile + URL http://www.mega-nerd.com/libsndfile/files/${SNDFILE_TARBALL}.tar.gz + BUILD_IN_SOURCE 1 + INSTALL_DIR external/dist + CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/external/dist + BUILD_COMMAND make + INSTALL_COMMAND make install +) +if(WIN32) + set(SNDFILE_LIBRARIES + ${CMAKE_BINARY_DIR}/external/dist/lib/sndfile.lib) +else(WIN32) + set(SNDFILE_LIBRARIES + ${CMAKE_BINARY_DIR}/external/dist/lib/libsndfile.a) +endif(WIN32) +set(SNDFILE_INCLUDES external/dist/include) +list(APPEND FREEDV_STATIC_LIBS sndfile) diff --git a/fdmdv2/cmake/BuildSox.cmake b/fdmdv2/cmake/BuildSox.cmake new file mode 100644 index 00000000..566b2278 --- /dev/null +++ b/fdmdv2/cmake/BuildSox.cmake @@ -0,0 +1,31 @@ +set(SOX_TARBALL "sox-14.4.1") + +# required linking libraries on linux. Not sure about windows. +find_library(ALSA_LIBRARIES asound) +find_library(AO_LIBRARIES ao) + +include(ExternalProject) +ExternalProject_Add(sox + URL http://downloads.sourceforge.net/sox/${SOX_TARBALL}.tar.gz + BUILD_IN_SOURCE 1 + INSTALL_DIR external/dist + CONFIGURE_COMMAND ./configure --enable-shared=no --without-id3tag --without-png --disable-gomp --with-oggvorbis=no --with-oss=no --with-flac=no --with-amrnb=no --with-amrwb=no --with-mp3=no --disable-dl-sndfile --with-pulseaudio=no --without-magic --prefix=${CMAKE_BINARY_DIR}/external/dist + BUILD_COMMAND make + INSTALL_COMMAND make install +) +if(WIN32) + set(SOX_LIBRARIES + ${CMAKE_BINARY_DIR}/external/dist/lib/sox.lib) +else(WIN32) + set(SOX_LIBRARIES + ${CMAKE_BINARY_DIR}/external/dist/lib/libsox.a + ${ALSA_LIBRARIES} + ${AO_LIBRARIES} + ) +endif(WIN32) +set(SOX_INCLUDES external/dist/include) +list(APPEND FREEDV_STATIC_LIBS sox) + +if(USE_STATIC_SNDFILE) + add_dependencies(sox sndfile) +endif(USE_STATIC_SNDFILE) diff --git a/fdmdv2/cmake/config.h.in b/fdmdv2/cmake/config.h.in index c952b03f..8e3ab76b 100644 --- a/fdmdv2/cmake/config.h.in +++ b/fdmdv2/cmake/config.h.in @@ -7,7 +7,7 @@ #define _CONFIGURATION_HEADER_GUARD_H_ #define SIZEOF_INT @SIZEOF_INT@ -#cmakedefine HAVE_STDINT_H @HAVE_STDINT_H@ +#cmakedefine HAVE_LIMITS_H @HAVE_LIMITS_H@ #cmakedefine HAVE_STDINT_H @HAVE_STDINT_H@ #cmakedefine HAVE_STDDEF_H @HAVE_STDDEF_H@ #cmakedefine HAVE_STDLIB_H @HAVE_STDLIB_H@ diff --git a/fdmdv2/src/CMakeLists.txt b/fdmdv2/src/CMakeLists.txt index f3431517..6521942b 100644 --- a/fdmdv2/src/CMakeLists.txt +++ b/fdmdv2/src/CMakeLists.txt @@ -36,5 +36,8 @@ set(FREEDV_SOURCES add_executable(freedv ${FREEDV_SOURCES}) target_link_libraries(freedv ${FREEDV_LINK_LIBS}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +if(FREEDV_STATIC_LIBS) + add_dependencies(freedv ${FREEDV_STATIC_LIBS}) +endif(FREEDV_STATIC_LIBS) install(TARGETS freedv RUNTIME DESTINATION bin)