+#
+# Codec2 - Next-Generation Digital Voice for Two-Way Radio
+#
+# CMake configuration contributed by Richard Shaw (KF5OIM)
+# Please report questions, comments, problems, or patches to the freetel
+# mailing list: https://lists.sourceforge.net/lists/listinfo/freetel-codec2
+#
+
cmake_minimum_required(VERSION 2.8)
# Prevent in-source builds
+# If an in-source build is attempted, you will still need to clean up a few
+# files manually.
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
# Set project version information. This should probably be done via external
# file at some point.
#
-set(PROJECT_VERSION_MAJOR 0)
-set(PROJECT_VERSION_MINOR 2)
+set(CODEC2_VERSION_MAJOR 0)
+set(CODEC2_VERSION_MINOR 2)
# Set to patch level is needed, otherwise leave FALSE.
-set(PROJECT_VERSION_PATCH FALSE)
-set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
+set(CODEC2_VERSION_PATCH FALSE)
+set(CODEC2_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
# Patch level version bumps should not change API/ABI.
-set(SOVERSION ${PROJECT_VERSION})
-if(PROJECT_VERSION_PATCH)
- set(PROJECT_VERSION "${PROJECT_VERSION}.${PROJECT_VERSION_PATCH}")
+set(SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
+if(CODEC2_VERSION_PATCH)
+ set(PROJECT_VERSION "${CODEC2_VERSION}.${PROJECT_VERSION_PATCH}")
endif()
-message(STATUS "codec2 version: ${PROJECT_VERSION}")
+# Set default build type
+set(CMAKE_BUILD_TYPE "Release")
+
+message(STATUS "codec2 version: ${CODEC2_VERSION}")
#
# Find the svn revision if this is a working copy.
#
#find_package(Subversion)
#if(Subversion_FOUND)
-# Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} CODEC2)
-# message(STATUS "codec2 svn revision: ${CODEC2_WC_REVISION}")
+# 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.")
+# 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")
+
+#
+# Default options
+#
# Build shared libraries by default
set(BUILD_SHARED_LIBS TRUE CACHE BOOL "Build shared library. Set to FALSE for static library.")
+# Do not install example code by default.
+option(INSTALL_EXAMPLES "Install example code." OFF)
+if(INSTALL_EXAMPLES)
+ install(DIRECTORY octave raw script voicing wav
+ DESTINATION share/codec2)
+endif()
#
# Math library is automatic on MSVC
if(UNIX)
- set(CMAKE_REQUIRED_INCLUDES math.h)
- set(CMAKE_REQUIRED_LIBRARIES m)
+ set(CMAKE_REQUIRED_INCLUDES math.h)
+ set(CMAKE_REQUIRED_LIBRARIES m)
endif(UNIX)
include(CheckIncludeFiles)
#
add_subdirectory(src)
-#
-# Install example code? Defaults to no.
-#
-option(INSTALL_EXAMPLES "Install example code." OFF)
-if(INSTALL_EXAMPLES)
- install(DIRECTORY octave raw script voicing wav
- DESTINATION share/codec2)
-endif()
#
-# Cpack NSIS configuration for Windows. EXPERIMENTAL!!!
+# Cpack NSIS installer configuration for Windows. EXPERIMENTAL!!!
+# See: http://nsis.sourceforge.net/Download
+#
+# *nix systems should use "make install" and/or appropriate
+# distribution packaging tools.
#
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)
+ 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 ${CODEC2_VERSION_MAJOR})
+ set(CPACK_PACKAGE_VERSION_MINOR ${CODEC2_VERSION_MINOR})
+ if(PROJECT_VERSION_PATCH)
+ set(CPACK_PACKAGE_VERSION_PATCH ${CODEC2_VERSION_PATCH})
+ endif(PROJECT_VERSION_PATCH)
+ set(CPACK_PACKAGE_INSTALL_DIRECTORY "Codec2")
+ # 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}")
+ set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\codec2.org")
+ set(CPACK_NSIS_MODIFY_PATH ON)
+ include(CPack)
endif(WIN32)
# 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
+ ${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
+ ${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
+ ${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
+ ${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
+ ${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
+ ${D}/lspjvm1.txt
+ ${D}/lspjvm2.txt
+ ${D}/lspjvm3.txt
)
set(CODEBOOKSVQANSSI
- ${D}/lspvqanssi1.txt
- ${D}/lspvqanssi2.txt
- ${D}/lspvqanssi3.txt
- ${D}/lspvqanssi4.txt
+ ${D}/lspvqanssi1.txt
+ ${D}/lspvqanssi2.txt
+ ${D}/lspvqanssi3.txt
+ ${D}/lspvqanssi4.txt
)
-set(CODEBOOKSGE ${D}/gecb.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})
+ 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})
+ # generate_codebook
+ add_executable(generate_codebook generate_codebook.c)
+ target_link_libraries(generate_codebook ${CMAKE_REQUIRED_LIBRARIES})
+ # genlspdtcb
+ 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}
+ 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}
+ 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}
+ 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}
+ 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}
+ 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}
+ 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}
+ 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}
+ 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)
+ FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake)
#
# codec2 library sources
#
set(CODEC2_SRCS
- dump.c
- lpc.c
- nlp.c
- postfilter.c
- sine.c
- codec2.c
- fifo.c
- fdmdv.c
- kiss_fft.c
- interp.c
- lsp.c
- phase.c
- quantise.c
- pack.c
- codebook.c
- codebookd.c
- codebookvq.c
- codebookjnd.c
- codebookjvm.c
- codebookvqanssi.c
- codebookdt.c
- codebookge.c
- golay23.c
+ dump.c
+ lpc.c
+ nlp.c
+ postfilter.c
+ sine.c
+ codec2.c
+ fifo.c
+ fdmdv.c
+ kiss_fft.c
+ interp.c
+ lsp.c
+ phase.c
+ quantise.c
+ pack.c
+ codebook.c
+ codebookd.c
+ codebookvq.c
+ codebookjnd.c
+ codebookjvm.c
+ codebookvqanssi.c
+ codebookdt.c
+ codebookge.c
+ golay23.c
)
add_library(codec2 ${CODEC2_SRCS})
set_target_properties(codec2 PROPERTIES SOVERSION ${SOVERSION})
set(CODEC2_PUBLIC_HEADERS
- codec2.h
- codec2_fdmdv.h
- codec2_fifo.h
- golay23.h
+ codec2.h
+ codec2_fdmdv.h
+ codec2_fifo.h
+ golay23.h
)
install(FILES ${CODEC2_PUBLIC_HEADERS}
- DESTINATION include/codec2
+ DESTINATION include/codec2
)
add_executable(c2demo c2demo.c)
target_link_libraries(fec_dec ${CMAKE_REQUIRED_LIBRARIES} codec2)
install(TARGETS
- codec2
- c2demo
- c2demo
- c2enc
- c2dec
- c2sim
- fdmdv_get_test_bits
- fdmdv_mod fdmdv_demod
- fdmdv_put_test_bits
- fdmdv_interleave
- insert_errors
- fec_enc
- fec_dec
- LIBRARY DESTINATION lib${LIB_SUFFIX}
- ARCHIVE DESTINATION lib${LIB_SUFFIX}
- RUNTIME DESTINATION bin
+ codec2
+ c2demo
+ c2demo
+ c2enc
+ c2dec
+ c2sim
+ fdmdv_get_test_bits
+ fdmdv_mod fdmdv_demod
+ fdmdv_put_test_bits
+ fdmdv_interleave
+ insert_errors
+ fec_enc
+ fec_dec
+ LIBRARY DESTINATION lib${LIB_SUFFIX}
+ ARCHIVE DESTINATION lib${LIB_SUFFIX}
+ RUNTIME DESTINATION bin
)
+#
+# FreeDV - HF Digital Voice for Radio Amateurs
+#
+# CMake configuration contributed by Richard Shaw (KF5OIM)
+# Please report questions, comments, problems, or patches to the freetel
+# mailing list: https://lists.sourceforge.net/lists/listinfo/freetel-codec2
+#
+
cmake_minimum_required(VERSION 2.8)
# Prevent in-source builds to protect automake/autoconf config.
+# If an in-source build is attempted, you will still need to clean up a few
+# files manually.
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
# Setup version.
# This should probably be pulled from an external file at some point.
#
-set(VERSION_MAJOR 0)
-set(VERSION_MINOR 2)
+set(FREEDV_VERSION_MAJOR 0)
+set(FREEDV_VERSION_MINOR 2)
# Set to value for patch level releases, otherwise leave as FALSE.
-set(VERSION_PATCH FALSE)
-set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}")
-if(VERSION_PATCH)
- set(VERSION ${VERSION}.${VERSION_PATCH})
-endif(VERSION_PATCH)
+set(FREEDV_VERSION_PATCH FALSE)
+set(FREEDV_VERSION "${FREEDV_VERSION_MAJOR}.${FREEDV_VERSION_MINOR}")
+if(FREEDV_VERSION_PATCH)
+ set(FREEDV_VERSION ${FREEDV_VERSION}.${FREEDV_VERSION_PATCH})
+endif(FREEDV_VERSION_PATCH)
+
+# Set default build type
+set(CMAKE_BUILD_TYPE "Release")
-set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
+message(STATUS "FreeDV version: ${FREEDV_VERSION}")
+
+#set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
# Work around for not using a svn working copy.
-add_definitions(-DSVN_REVISION="1234")
+add_definitions(-DSVN_REVISION="1238")
# 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.")
+ "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.")
+ "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.")
+ "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.")
+ "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.")
+ "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.")
+ "Download and build static libctb instead of the system library.")
+set(USE_STATIC_CODEC2 FALSE CACHE BOOL
+ "Download and build static codec2 instead of the system library.")
+set(USE_STATIC_WXWIDGETS FALSE CACHE BOOL
+ "Download and build static wxWidgets 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)
+ 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)
+ set(USE_STATIC_CODEC2 TRUE FORCE)
+ #set(USE_STATIC_WXWIDGETS TRUE FORCE)
endif(USE_STATIC_DEPS)
-set(FREEDV_STATIC_LIBS "")
-# Setup empty list to add to
+
+# Setup empty list to append to.
set(FREEDV_LINK_LIBS "")
+set(FREEDV_STATIC_LIBS "")
# Check for a bunch of libraries
# Would it be better to assume these are available?
if(MSVC)
- find_library(ADVAPI32 advapi32)
- find_library(COMCTL32 comctl32)
- find_library(COMDLG32 comdlg32)
- find_library(GDI32 gdi32)
- find_library(KERNEL32 kernel32)
- find_library(OLE32 ole32)
- find_library(OLEAUT32 oleaut32)
- find_library(RPCRT4 rpcrt4)
- find_library(SHELL32 shell32)
- find_library(USER32 user32)
- find_package(UUID uuid)
- find_library(WINMM winmm)
- find_library(WINSPOOL winspool)
- find_library(WSOCK32 wsock32)
- find_library(WXEXPAT wxexpat)
- find_library(WXJPEG wxjpeg)
- find_library(WXMSW29U wxmsw29u)
- find_library(WXPNG wxpng)
- find_library(WXREGEXU wxregexu)
- find_library(WXTIFF wxtiff)
- find_library(WXZLIB wxzlib)
+ find_library(ADVAPI32 advapi32)
+ find_library(COMCTL32 comctl32)
+ find_library(COMDLG32 comdlg32)
+ find_library(GDI32 gdi32)
+ find_library(KERNEL32 kernel32)
+ find_library(OLE32 ole32)
+ find_library(OLEAUT32 oleaut32)
+ find_library(RPCRT4 rpcrt4)
+ find_library(SHELL32 shell32)
+ find_library(USER32 user32)
+ find_package(UUID uuid)
+ find_library(WINMM winmm)
+ find_library(WINSPOOL winspool)
+ find_library(WSOCK32 wsock32)
+ find_library(WXEXPAT wxexpat)
+ find_library(WXJPEG wxjpeg)
+ find_library(WXMSW29U wxmsw29u)
+ find_library(WXPNG wxpng)
+ find_library(WXREGEXU wxregexu)
+ find_library(WXTIFF wxtiff)
+ find_library(WXZLIB wxzlib)
- list(APPEND FREEDV_LINK_LIBS ${ADVAPI32} ${COMCTL32} ${COMDLG32} ${GDI32} ${KERNEL32} ${OLE32} ${OLEAUT32} ${RPCRT4} ${SHELL32} ${USER32} ${UUID} ${WINMM} ${WINSPOOL} ${WINSOCK32} ${WZEXPAT} ${WXJPEG} ${WXMSW29U} ${WXPNG} ${WXREGEXU} ${WXTIFF} ${WXZLIB})
+ list(APPEND FREEDV_LINK_LIBS ${ADVAPI32} ${COMCTL32} ${COMDLG32} ${GDI32} ${KERNEL32} ${OLE32} ${OLEAUT32} ${RPCRT4} ${SHELL32} ${USER32} ${UUID} ${WINMM} ${WINSPOOL} ${WINSOCK32} ${WZEXPAT} ${WXJPEG} ${WXMSW29U} ${WXPNG} ${WXREGEXU} ${WXTIFF} ${WXZLIB})
endif(MSVC)
# Math library is automatic on MSVC
if(UNIX)
- set(CMAKE_REQUIRED_INCLUDES math.h)
- set(CMAKE_REQUIRED_LIBRARIES m)
+ set(CMAKE_REQUIRED_INCLUDES math.h)
+ set(CMAKE_REQUIRED_LIBRARIES m)
endif(UNIX)
# Find some standard headers and functions.
check_function_exists(pow HAVE_POW)
check_function_exists(sqrt HAVE_SQRT)
+# fdmdv2_main.h requires patching to find config.h as it current looks in the
+# source directory and the generated file goes in the binary directory.
configure_file ("${PROJECT_SOURCE_DIR}/cmake/config.h.in"
"${PROJECT_BINARY_DIR}/config.h" )
include_directories(${PROJECT_BINARY_DIR})
+add_definitions(-DHAVE_CONFIG_H)
# 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)
+ 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.
+On Linux systems try installing:
+ portaudio-devel (RPM based systems)
+ libportaudio-dev (DEB based systems)
+On Windows it's easiest to use the cmake option: USE_STATIC_PORTAUDIO"
+ )
+ 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})
+ message(STATUS "Will attempt static build of portaudio.")
+ include(cmake/BuildPortaudio.cmake)
endif(NOT USE_STATIC_PORTAUDIO)
# Do we need this?
#find_library(PORTAUDIOCPP portaudiocpp)
# Samplerate Library
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)
+ 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.
+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"
+ )
+ 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})
+ message(STATUS "Will attempt static build of samplerate.")
+ include(cmake/BuildSamplerate.cmake)
endif(NOT USE_STATIC_SAMPLERATE)
-
+
# sndfile Library
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)
+ 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.
+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"
+ )
+ 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})
+ message(STATUS "Will attempt static build of sndfile.")
+ include(cmake/BuildSndfile.cmake)
endif(NOT USE_STATIC_SNDFILE)
# Find sox library
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)
+ 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.
+On Linux systems try installing:
+ sox-devel (RPM based systems)
+ libsox-dev (DEB based systems)
+On Windows it's easiest to use the cmake option: USE_STATIC_SOX"
+ )
+ endif(LIBSOX)
else(NOT USE_STATIC_SOX)
- include(cmake/BuildSox.cmake)
- list(APPEND FREEDV_LINK_LIBS ${SOX_LIBRARIES})
- include_directories(${SOX_INCLUDES})
+ message(STATUS "Will attempt static build of sox.")
+ include(cmake/BuildSox.cmake)
endif(NOT USE_STATIC_SOX)
+#
# Find wxWidgets
+#
set(WXCONFIG "" CACHE FILEPATH "Location of wx-config binary.")
set(WXRC "" CACHE FILEPATH "Location of wxrc binary.")
-message(STATUS "Looking for wxWidgets...")
-if(WXCONFIG)
- set(wxWidgets_CONFIG_EXECUTABLE ${WXCONFIG})
-endif()
-if(WXRC)
- set(wxWidgets_wxrc_EXECUTABLE ${WXRC})
-endif()
-set(WX_VERSION_MIN 2.9.0)
-find_package(wxWidgets REQUIRED COMPONENTS core base aui html net adv REQUIRED)
-execute_process(COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" --version
- OUTPUT_VARIABLE WX_VERSION)
-if(WX_VERSION VERSION_EQUAL ${WX_VERSION_MIN}
- OR WX_VERSION VERSION_GREATER ${WX_VERSION_MIN})
- message(STATUS "wxWidgets version: ${WX_VERSION}")
-else()
- message(FATAL_ERROR "wxWidgets must be installed on your system.
-
- Please check that wx-config is in path, the directory
- where wxWidgets libraries are installed (returned by
- 'wx-config --libs' or 'wx-config --static --libs' command)
- is in LD_LIBRARY_PATH or equivalent variable and
- wxWidgets version is ${WX_VERSION_MIN} or above."
- )
-endif()
-if(wxWidgets_FOUND)
- include("${wxWidgets_USE_FILE}")
- list(APPEND FREEDV_LINK_LIBS ${wxWidgets_LIBRARIES})
-endif(wxWidgets_FOUND)
-
+if(USE_STATIC_WXWIDGETS)
+ include(cmake/BuildWxWidgets.cmake)
+else(USE_STATIC_WXWIDGETS)
+ message(STATUS "Looking for wxWidgets...")
+ if(WXCONFIG)
+ message(STATUS "wx-config: ${WXCONFIG}")
+ set(wxWidgets_CONFIG_EXECUTABLE ${WXCONFIG})
+ endif(WXCONFIG)
+ if(WXRC)
+ message(STATUS "wxrc: ${WXRC}")
+ set(wxWidgets_wxrc_EXECUTABLE ${WXRC})
+ endif(WXRC)
+ set(WX_VERSION_MIN 2.9.0)
+ find_package(wxWidgets REQUIRED COMPONENTS core base aui html net adv REQUIRED)
+ execute_process(COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" --version
+ OUTPUT_VARIABLE WX_VERSION)
+ if(WX_VERSION VERSION_EQUAL ${WX_VERSION_MIN}
+ OR WX_VERSION VERSION_GREATER ${WX_VERSION_MIN})
+ message(STATUS "wxWidgets version: ${WX_VERSION}")
+ else()
+ message(FATAL_ERROR "wxWidgets must be installed on your system.
+
+ Please check that wx-config is in path, the directory
+ where wxWidgets libraries are installed (returned by
+ 'wx-config --libs' or 'wx-config --static --libs' command)
+ is in LD_LIBRARY_PATH or equivalent variable and
+ wxWidgets version is ${WX_VERSION_MIN} or above."
+ )
+ endif()
+ if(wxWidgets_FOUND)
+ include("${wxWidgets_USE_FILE}")
+ list(APPEND FREEDV_LINK_LIBS ${wxWidgets_LIBRARIES})
+ endif(wxWidgets_FOUND)
+endif(USE_STATIC_WXWIDGETS)
#
# Find codec2
#
-message(STATUS "Looking for codec2...")
-find_path(CODEC2_INCLUDE_DIR codec2.h
- PATH_SUFFIXES codec2)
-find_library(CODEC2_LIBRARY NAMES codec2)
-message(STATUS " codec2 library: ${CODEC2_LIBRARY}")
-message(STATUS " codec2 headers: ${CODEC2_INCLUDE_DIR}")
-include_directories(${CODEC2_INCLUDE_DIR})
-list(APPEND FREEDV_LINK_LIBS ${CODEC2_LIBRARY})
+if(NOT USE_STATIC_CODEC2)
+ message(STATUS "Looking for codec2...")
+ find_path(CODEC2_INCLUDE_DIR codec2.h
+ PATH_SUFFIXES codec2)
+ find_library(CODEC2_LIBRARY NAMES codec2)
+ message(STATUS " codec2 library: ${CODEC2_LIBRARY}")
+ message(STATUS " codec2 headers: ${CODEC2_INCLUDE_DIR}")
+ if(CODEC2_INCLUDE_DIR AND CODEC2_LIBRARY)
+ include_directories(${CODEC2_INCLUDE_DIR})
+ list(APPEND FREEDV_LINK_LIBS ${CODEC2_LIBRARY})
+ else(CODEC2_INCLUDE_DIR AND CODEC2_LIBRARY)
+ message(FATAL_ERROR "codec2 library not found.
+Linux:
+Codec2 may not be in your distribution so build yourself or use the cmake option to build statically into FreeDV.
+Windws:
+It's easiest to use the cmake option: USE_STATIC_PORTAUDIO"
+ )
+ endif(CODEC2_INCLUDE_DIR AND CODEC2_LIBRARY)
+else(NOT USE_STATIC_CODEC2)
+ message(STATUS "Will attempt static build of codec2.")
+ include(cmake/BuildCodec2.cmake)
+endif(NOT USE_STATIC_CODEC2)
#
# Find libctb. Assumes version 0.16
#
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 <ctb-0.16/ctb.h>
- 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)
+ 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}")
+ if(LIBCTB_LIBRARY AND LIBCTB_INCLUDE_DIR)
+ set(CMAKE_REQUIRED_LIBRARIES ${LIBCTB_LIBRARY})
+ # Check to make sure linking with libctb works.
+ include(CheckCXXSourceCompiles)
+ check_cxx_source_compiles("
+ #include <ctb-0.16/ctb.h>
+ 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(LIBCTB_LIBRARY AND LIBCTB_INCLUDE_DIR)
+ message(FATAL_ERROR "libctb not found.
+Linux:
+ libctb may not be available in your distribution. Either build and install or use the cmake option to build statically.
+Windws:
+It's easiest to use the cmake option: USE_STATIC_LIBCTB"
+ )
+ endif(LIBCTB_LIBRARY AND LIBCTB_INCLUDE_DIR)
else(NOT USE_STATIC_LIBCTB)
- include(cmake/BuildLibctb.cmake)
+ include(cmake/BuildLibctb.cmake)
endif(NOT USE_STATIC_LIBCTB)
include_directories(${LIBCTB_INCLUDE_DIR})
list(APPEND FREEDV_LINK_LIBS ${LIBCTB_LIBRARY})
-
+# Freedv
add_subdirectory(src)
+
+# Icons and desktop file
+add_subdirectory(contrib)
+
+#
+# Cpack NSIS configuration for Windows. EXPERIMENTAL!!!
+#
+if(WIN32)
+ include(InstallRequiredSystemLibraries)
+ set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "HF Digital Voice for Radio Amateurs")
+ 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 ${FREEDV_VERSION_MAJOR})
+ set(CPACK_PACKAGE_VERSION_MINOR ${FREEDV_VERSION_MINOR})
+ if(FREEDV_VERSION_PATCH)
+ set(CPACK_PACKAGE_VERSION_PATCH ${FREEDV_VERSION_PATCH})
+ endif(FREEDV_VERSION_PATCH)
+ set(CPACK_PACKAGE_INSTALL_DIRECTORY "FreeDV")
+ # 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}")
+ set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\freedv.org")
+ set(CPACK_NSIS_MODIFY_PATH ON)
+ include(CPack)
+endif(WIN32)