From 779c63f4aea1bafc3c6035915b50629f1769a219 Mon Sep 17 00:00:00 2001 From: hobbes1069 Date: Sun, 2 Nov 2014 16:57:36 +0000 Subject: [PATCH] Update dev branch to latest cmake configuration. git-svn-id: https://svn.code.sf.net/p/freetel/code@1923 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/CMakeLists.txt | 105 +++++++++++++++++------------ codec2-dev/src/CMakeLists.txt | 44 +++++++----- codec2-dev/unittest/CMakeLists.txt | 10 ++- 3 files changed, 98 insertions(+), 61 deletions(-) diff --git a/codec2-dev/CMakeLists.txt b/codec2-dev/CMakeLists.txt index fdd60b4a..1e8c501e 100644 --- a/codec2-dev/CMakeLists.txt +++ b/codec2-dev/CMakeLists.txt @@ -5,9 +5,17 @@ # Please report questions, comments, problems, or patches to the freetel # mailing list: https://lists.sourceforge.net/lists/listinfo/freetel-codec2 # +project(codec2) cmake_minimum_required(VERSION 2.8) +include(GNUInstallDirs) +mark_as_advanced(CLEAR + CMAKE_INSTALL_BINDIR + CMAKE_INSTALL_INCLUDEDIR + CMAKE_INSTALL_LIBDIR +) + # # Prevent in-source builds # If an in-source build is attempted, you will still need to clean up a few @@ -21,8 +29,6 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") "separate build directory and run cmake from there.") endif("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") -project(codec2) - # # Set project version information. This should probably be done via external @@ -30,35 +36,40 @@ project(codec2) # set(CODEC2_VERSION_MAJOR 0) set(CODEC2_VERSION_MINOR 3) -# Set to patch level is needed, otherwise leave FALSE. +# Set to patch level if needed, otherwise leave FALSE. set(CODEC2_VERSION_PATCH FALSE) set(CODEC2_VERSION "${CODEC2_VERSION_MAJOR}.${CODEC2_VERSION_MINOR}") # Patch level version bumps should not change API/ABI. set(SOVERSION "${CODEC2_VERSION_MAJOR}.${CODEC2_VERSION_MINOR}") if(CODEC2_VERSION_PATCH) - set(PROJECT_VERSION "${CODEC2_VERSION}.${CODEC2_VERSION_PATCH}") -endif(CODEC2_VERSION_PATCH) + set(CODEC2_VERSION "${CODEC2_VERSION}.${CODEC2_VERSION_PATCH}") +endif() message(STATUS "codec2 version: ${CODEC2_VERSION}") # Set default build type if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Debug") -endif(NOT CMAKE_BUILD_TYPE) -message(STATUS "Build type is: ${CMAKE_BUILD_TYPE}") +endif() + +# Set default C++ flags. +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") + +# -fPIC is implied on MinGW... +if(NOT WIN32) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") +endif() + + +message(STATUS "Build type is: " ${CMAKE_BUILD_TYPE}) +message(STATUS "Compiler Flags: " ${CMAKE_CXX_FLAGS}) # # Setup Windows/MinGW specifics here. # if(MINGW) message(STATUS "System is MinGW.") - foreach(RUNTIME - libgcc_s_sjlj-1.dll - libstdc++-6.dll) - message(STATUS "Checking for ${RUNTIME}") - find_library(${RUNTIME}_LIB ${RUNTIME}) - message(STATUS "runtime found: ${${RUNTIME}_LIB}") - list(APPEND CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${${RUNTIME}_LIB}) - endforeach() endif(MINGW) @@ -75,20 +86,18 @@ endif(MINGW) # 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") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall") # # Default options -#a +# option(BUILD_SHARED_LIBS "Build shared library. Set to OFF for static library." ON) option(UNITTEST "Build unittest binaries." ON) option(INSTALL_EXAMPLES "Install example code." OFF) if(INSTALL_EXAMPLES) install(DIRECTORY octave raw script voicing wav - DESTINATION share/codec2) + USE_SOURCE_PERMISSIONS + DESTINATION ${CMAKE_INSTALL_DATADIR}/codec2) endif() @@ -118,21 +127,13 @@ configure_file ("${PROJECT_SOURCE_DIR}/cmake/config.h.in" "${PROJECT_BINARY_DIR}/config.h" ) include_directories(${PROJECT_BINARY_DIR}) -# -# Find speex library -# -message(STATUS "Looking for Speex DSP library.") -find_path(SPEEXDSP_INCLUDE_DIR speex/speex.h) -find_library(SPEEXDSP_LIBRARY speexdsp) -message(STATUS " Speex DSP headers: ${SPEEXDSP_INCLUDE_DIR}") -message(STATUS " Speex DSP library: ${SPEEXDSP_LIBRARY}") -if(SPEEXDSP_INCLUDE_DIR AND SPEEXDSP_LIBRARY) - include_directories(${SPEEXDSP_INCLUDE_DIR}) - list(APPEND CMAKE_REQUIRED_LIBRARIES ${SPEEXDSP_LIBRARY}) -else(SPEEXDSP_INCLUDE_DIR AND SPEEXDSP_LIBRARY) - message(FATAL_ERROR "Speex DSP library not found!") -endif(SPEEXDSP_INCLUDE_DIR AND SPEEXDSP_LIBRARY) - +# CMake Package setup +include(CMakePackageConfigHelpers) +configure_package_config_file(cmake/codec2-config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/codec2-config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/codec2 + PATH_VARS CMAKE_INSTALL_INCLUDEDIR +) # # codec2 library @@ -143,6 +144,19 @@ if(UNITTEST) # Pthread Library find_package(Threads REQUIRED) message(STATUS "Threads library flags: ${CMAKE_THREAD_LIBS_INIT}") + + # + # Find speex library + # + message(STATUS "Looking for Speex DSP library.") + find_path(SPEEXDSP_INCLUDE_DIR speex/speex.h) + find_library(SPEEXDSP_LIBRARY speexdsp) + message(STATUS " Speex DSP headers: ${SPEEXDSP_INCLUDE_DIR}") + message(STATUS " Speex DSP library: ${SPEEXDSP_LIBRARY}") + if(NOT SPEEXDSP_INCLUDE_DIR AND NOT SPEEXDSP_LIBRARY) + message(FATAL_ERROR "Speex DSP library not found!") + endif() + add_subdirectory(unittest) endif(UNITTEST) @@ -154,7 +168,15 @@ endif(UNITTEST) # distribution packaging tools. # if(WIN32) - include(InstallRequiredSystemLibraries) + # Detect if we're doing a 32-bit or 64-bit windows build. + if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) + set(CMAKE_CL_64 TRUE) + endif() + + configure_file(cmake/GetDependencies.cmake.in cmake/GetDependencies.cmake + @ONLY + ) + install(SCRIPT ${CMAKE_BINARY_DIR}/cmake/GetDependencies.cmake) 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") @@ -163,14 +185,13 @@ if(WIN32) set(CPACK_PACKAGE_VERSION_MINOR ${CODEC2_VERSION_MINOR}) if(CODEC2_VERSION_PATCH) set(CPACK_PACKAGE_VERSION_PATCH ${CODEC2_VERSION_PATCH}) - endif(CODEC2_VERSION_PATCH) + else() + set(CPACK_PACKAGE_VERSION_PATCH 0) + endif() 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_CREATE_DESKTOP_LINKS "") set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}") - set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\codec2.org") + set(CPACK_NSIS_URL_INFO_ABOUT "http://codec2.org") set(CPACK_NSIS_MODIFY_PATH ON) include(CPack) endif(WIN32) diff --git a/codec2-dev/src/CMakeLists.txt b/codec2-dev/src/CMakeLists.txt index f84442ef..86dada4e 100644 --- a/codec2-dev/src/CMakeLists.txt +++ b/codec2-dev/src/CMakeLists.txt @@ -82,12 +82,10 @@ 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) - + set(IMPORT_EXECUTABLES "IMPORTFILE-NOTFOUND" CACHE FILEPATH "Point to the export file from a native build") + include(${IMPORT_EXECUTABLES}) +else(CMAKE_CROSSCOMPILING) # Build code generator binaries. These do not get installed. -if(NOT CMAKE_CROSSCOMPILING) # generate_codebook add_executable(generate_codebook generate_codebook.c) target_link_libraries(generate_codebook ${CMAKE_REQUIRED_LIBRARIES}) @@ -97,7 +95,8 @@ if(NOT CMAKE_CROSSCOMPILING) # Make native builds available for cross-compiling. export(TARGETS generate_codebook genlspdtcb FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake) -endif(NOT CMAKE_CROSSCOMPILING) +endif(CMAKE_CROSSCOMPILING) + # codebook.c add_custom_command( @@ -187,21 +186,23 @@ set(CODEC2_SRCS varicode.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}) - set(CODEC2_PUBLIC_HEADERS + golay23.h codec2.h codec2_fdmdv.h codec2_fifo.h comp.h - golay23.h ) -install(FILES ${CODEC2_PUBLIC_HEADERS} - DESTINATION include/codec2 +# +# Setup the codec2 library +# +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} + PUBLIC_HEADER "${CODEC2_PUBLIC_HEADERS}" ) add_executable(c2demo c2demo.c) @@ -249,9 +250,18 @@ target_link_libraries(freedv_tx ${CMAKE_REQUIRED_LIBRARIES} codec2) add_executable(freedv_rx freedv_rx.c) target_link_libraries(freedv_rx ${CMAKE_REQUIRED_LIBRARIES} codec2) +install(TARGETS codec2 EXPORT codec2-config + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/codec2 +) + +#install(EXPORT codec2-config +# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/codec2 +#) install(TARGETS - codec2 c2demo c2demo c2enc @@ -264,7 +274,5 @@ install(TARGETS insert_errors fec_enc fec_dec - LIBRARY DESTINATION lib${LIB_SUFFIX} - ARCHIVE DESTINATION lib${LIB_SUFFIX} - RUNTIME DESTINATION bin + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) diff --git a/codec2-dev/unittest/CMakeLists.txt b/codec2-dev/unittest/CMakeLists.txt index 45bcd3d3..31910c2c 100644 --- a/codec2-dev/unittest/CMakeLists.txt +++ b/codec2-dev/unittest/CMakeLists.txt @@ -57,6 +57,9 @@ target_link_libraries(t16_8 codec2) add_executable(t16_8_short t16_8_short.c ../src/fdmdv.c ../src/kiss_fft.c) target_link_libraries(t16_8_short codec2) +#add_executable(t48_8 t48_8.c ../src/fdmdv.c ../src/kiss_fft.c) +#target_link_libraries(t48_8 codec2) + add_executable(lspsync lspsync.c ../src/quantise.c ../src/lpc.c ../src/lsp.c ../src/dump.c ../src/kiss_fft.c ../src/codec2.c ../src/sine.c ../src/nlp.c ../src/postfilter.c ../src/phase.c ../src/interp.c ../src/pack.c ${CODEBOOKS}) target_link_libraries(lspsync codec2) @@ -80,10 +83,15 @@ target_link_libraries(tfifo codec2 ${CMAKE_THREAD_LIBS_INIT}) add_executable(speexnoisesup speexnoisesup.c) target_link_libraries(speexnoisesup ${SPEEXDSP_LIBRARY}) +set_target_properties(speexnoisesup + PROPERTIES INCLUDE_DIRECTORIES ${SPEEXDSP_INCLUDE_DIR} +) add_executable(fdmdv_mem fdmdv_mem.c) +add_executable(raw2h raw2h.c) +target_link_libraries(raw2h codec2) + add_definitions(-D__UNITTEST__) add_executable(c2validate c2validate.c) target_link_libraries(c2validate codec2) -#c2validate_LDADD = $(lib_LTLIBRARIES) ../src/libcodec2.la -- 2.25.1