#
# CMakeLists.txt: CMake configuration file for sigutils
#
# Copyright (C) 2019 Gonzalo José Carracedo Carballal
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program. If not, see
#
#
#
# Set the ABI version manually
set(SIGUTILS_ABI_VERSION 1)
# Late module imports that depend on project definitions
include(FindPkgConfig)
include(CodeAnalysis)
include(GNUInstallDirs)
include(RelativeFileMacro)
include(PcFileGenerator)
# Find requirements
find_package(Threads)
pkg_check_modules(SNDFILE REQUIRED sndfile>=1.0.2)
include_directories(${SNDFILE_INCLUDE_DIRS})
link_directories(${SNDFILE_LIBRARY_DIRS})
pkg_check_modules(FFTW3 REQUIRED fftw3f>=3.0)
include_directories(${FFTW3_INCLUDE_DIRS})
link_directories(${FFTW3_LIBRARY_DIRS})
pkg_check_modules(VOLK volk>=1.0)
if(VOLK_FOUND)
include_directories(${VOLK_INCLUDE_DIRS})
link_directories(${VOLK_LIBRARY_DIRS})
endif()
# Project build options
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug CACHE STRING
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
FORCE)
endif()
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ffast-math -s")
endif()
option(SIGUTILS_SINGLE_PRECISSION "Use single precission data types" ON)
if (DEFINED PKGVERSION)
# If you are building sigutils for your own software distribution, you may want
# to set PKGVERSION to some descriptive string.
add_compile_definitions(SIGUTILS_PKGVERSION="${PKGVERSION}")
endif()
# Source location
file(GLOB_RECURSE SRCS LIST_DIRECTORIES false *.c)
file(GLOB_RECURSE SRCS_WIN LIST_DIRECTORIES false win32-*.c)
if(NOT WIN32)
list(REMOVE_ITEM SRCS ${SRCS_WIN})
endif()
# Define the library target
add_library(sigutils SHARED ${SRCS})
# Define relative filename macros
target_add_relative_file_macro(sigutils)
# Add public include directories
target_include_directories(sigutils PUBLIC include/)
# Extra compilation definitions
if(SIGUTILS_SINGLE_PRECISSION)
target_compile_definitions(sigutils PUBLIC _SU_SINGLE_PRECISION)
endif()
if(VOLK_FOUND)
target_compile_definitions(sigutils PUBLIC HAVE_VOLK)
endif()
# Target properties
set_property(TARGET sigutils PROPERTY VERSION ${SIGUTILS_VERSION})
set_property(TARGET sigutils PROPERTY SOVERSION ${SIGUTILS_ABI_VERSION})
# Target dependencies
target_link_libraries(sigutils ${SNDFILE_LIBRARIES})
target_link_libraries(sigutils ${FFTW3_LIBRARIES})
target_link_libraries(sigutils fftw3f_threads)
target_link_libraries(sigutils ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(sigutils m)
if(WIN32)
target_link_libraries(sigutils ws2_32)
endif()
if(VOLK_FOUND)
target_link_libraries(sigutils ${VOLK_LIBRARIES})
endif()
# PC file generation
target_pc_file_generate(sigutils "Digital signal processing utility library")
# File install
install(TARGETS sigutils LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT LIB)
install(DIRECTORY include/sigutils DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT DEVEL)
install(FILES ${PROJECT_BINARY_DIR}/src/sigutils.pc DESTINATION ${CMAKE_INSTALL_PKGCONFIGDIR} COMPONENT DEVEL)
# General packaging settings
set(CPACK_PACKAGE_NAME sigutils)
set(CPACK_PACKAGE_DIRECTORY ${PROJECT_BINARY_DIR}/dist)
# DEB packaging settings
set(CPACK_DEB_COMPONENT_INSTALL ON)
if(GITVERSIONDETECT_VERSION_COMMIT_NUM)
set(CPACK_DEBIAN_PACKAGE_VERSION ${GITVERSIONDETECT_VERSION})
endif()
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "arf20 ")
set(CPACK_DEBIAN_LIB_PACKAGE_DEPENDS "libsndfile1 (>= 1.0.31-2build1), libvolk2.5 (>= 2.5.1-1), libfftw3-single3 (>= 3.3.8-2)")
set(CPACK_DEBIAN_DEVEL_PACKAGE_DEPENDS "libsndfile1-dev (>= 1.0.31-2build1), libvolk2-dev (>= 2.5.1-1), libfftw3-dev (>= 3.3.8-2)")
set(CPACK_DEBIAN_LIB_PACKAGE_NAME "libsigutils")
set(CPACK_DEBIAN_DEVEL_PACKAGE_NAME "libsigutils-dev")
set(CPACK_DEBIAN_LIB_PACKAGE_SECTION "libs")
set(CPACK_DEBIAN_DEVEL_PACKAGE_SECTION "libdevel")
# Include CPack
include(CPack)
# CPack component information
cpack_add_component(LIB DISPLAY_NAME "Runtime library")
cpack_add_component(DEVEL DISPLAY_NAME "Development files" DEPENDS LIB)