Update dev branch to latest cmake configuration.
authorhobbes1069 <hobbes1069@01035d8c-6547-0410-b346-abe4f91aad63>
Sun, 2 Nov 2014 16:57:36 +0000 (16:57 +0000)
committerhobbes1069 <hobbes1069@01035d8c-6547-0410-b346-abe4f91aad63>
Sun, 2 Nov 2014 16:57:36 +0000 (16:57 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1923 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/CMakeLists.txt
codec2-dev/src/CMakeLists.txt
codec2-dev/unittest/CMakeLists.txt

index fdd60b4a84e2fb5f5bf52a489fc3c4860b381594..1e8c501e7de7f7311bca1c08504b72776484992a 100644 (file)
@@ -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)
index f84442ef26bf209e4441350dc65e67ded914fdf0..86dada4e733ce23384a11c8e103b0ce9c21ef0f6 100644 (file)
@@ -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}
 )
index 45bcd3d346272dca3d1c9ab9e29c114b0b17fabe..31910c2c1cf5c3f411bb444acc2d2c444bc26b7c 100644 (file)
@@ -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