1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-09-19 03:16:38 -04:00
sdrangel/liquiddsp/CMakeLists.txt

494 lines
15 KiB
CMake

project(liquiddsp)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules")
file(READ "${LIQUIDDSPSRC}/include/liquid.h" liquid_h)
string(REGEX MATCH "\\#define LIQUID_VERSION[ ]+\"([0-9]+\\.[0-9]+\\.[0-9]+)\"" LIQUID_VERSION_MATCHES "${liquid_h}")
if(NOT LIQUID_VERSION_MATCHES)
message(FATAL_ERROR "Failed to extract version number from liquid.h")
endif(NOT LIQUID_VERSION_MATCHES)
set(LIQUID_VERSION ${CMAKE_MATCH_1})
message("-- Configuring for liquid-dsp ${LIQUID_VERSION}")
include(CheckCPUID)
include(CheckRequiredFunction)
include(CheckTypeSize)
include_directories(${LIQUIDDSPSRC})
include_directories(${LIQUIDDSPSRC}/include)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
CHECK_INCLUDE_FILE(sys/resource.h HAVE_SYS_RESOURCE_H)
CHECK_INCLUDE_FILE(complex.h HAVE_COMPLEX_H)
CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
CHECK_INCLUDE_FILE(getopt.h HAVE_GETOPT_H)
CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
CHECK_INCLUDE_FILE(memory.h HAVE_MEMORY_H)
CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
CHECK_INCLUDE_FILE(mmintrin.h HAVE_MMINTRIN_H)
CHECK_INCLUDE_FILE(emmintrin.h HAVE_EMMINTRIN_H)
CHECK_INCLUDE_FILE(immintrin.h HAVE_IMMINTRIN_H)
CHECK_INCLUDE_FILE(pmmintrin.h HAVE_PMMINTRIN_H)
CHECK_INCLUDE_FILE(smmintrin.h HAVE_SMMINTRIN_H)
CHECK_INCLUDE_FILE(tmmintrin.h HAVE_TMMINTRIN_H)
CHECK_INCLUDE_FILE(xmmintrin.h HAVE_XMMINTRIN_H)
CHECK_INCLUDE_FILE(fec.h HAVE_FEC_H)
CHECK_INCLUDE_FILE(fftw3.h HAVE_FFTW3_H)
CHECK_TYPE_SIZE(int SIZEOF_INT)
CHECK_TYPE_SIZE("unsigned int" SIZEOF_UNSIGNED_INT)
CHECK_REQUIRED_FUNCTION(sinf m HAVE_SINF)
CHECK_REQUIRED_FUNCTION(cosf m HAVE_COSF)
CHECK_REQUIRED_FUNCTION(expf m HAVE_EXPF)
CHECK_REQUIRED_FUNCTION(cargf m HAVE_CARGF)
CHECK_REQUIRED_FUNCTION(cexpf m HAVE_CEXPF)
CHECK_REQUIRED_FUNCTION(crealf m HAVE_CREALF)
CHECK_REQUIRED_FUNCTION(cimagf m HAVE_CIMAGF)
CHECK_REQUIRED_FUNCTION(sqrtf m HAVE_SQRTF)
CHECK_LIBRARY_EXISTS(m sqrtf "" HAVE_LIBM)
if (HAVE_FEC_H)
CHECK_LIBRARY_EXISTS(fec create_viterbi27 "" HAVE_LIBFEC)
if (NOT HAVE_LIBFEC)
unset(HAVE_FEC_H CACHE)
endif ()
endif ()
if (HAVE_FFTW3_H)
CHECK_LIBRARY_EXISTS(fftw3f fftwf_plan_dft_1d "" HAVE_LIBFFTW3F)
if (NOT HAVE_LIBFFTW3F)
unset(HAVE_FFTW3_H CACHE)
endif ()
endif ()
CHECK_CPUID("mmx" HAVE_MMX ${LIQUID_FORCE_X86_MMX})
CHECK_CPUID("sse" HAVE_SSE ${LIQUID_FORCE_X86_SSE})
CHECK_CPUID("sse2" HAVE_SSE2 ${LIQUID_FORCE_X86_SSE2})
CHECK_CPUID("sse3" HAVE_SSE3 ${LIQUID_FORCE_X86_SSE3})
CHECK_CPUID("ssse3" HAVE_SSSE3 ${LIQUID_FORCE_X86_SSSE3})
CHECK_CPUID("sse41" HAVE_SSE41 ${LIQUID_FORCE_X86_SSE41})
CHECK_CPUID("sse42" HAVE_SSE42 ${LIQUID_FORCE_X86_SSE42})
CHECK_CPUID("avx" HAVE_AVX ${LIQUID_FORCE_X86_AVX})
CHECK_CPUID("vmx" HAVE_ALTIVEC ${LIQUID_FORCE_PPC_ALTIVEC})
CHECK_CPUID("neon" HAVE_NEON ${LIQUID_FORCE_ARM_NEON})
CHECK_CPUID("neon64" HAVE_NEON64 ${LIQUID_FORCE_ARM64_NEON})
#
# Build compilation extra flags
#
if (CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
if (HAVE_AVX)
set(_EXTRA_C_FLAGS "-mavx")
elseif (HAVE_SSE42)
set(_EXTRA_C_FLAGS "-msse4.2")
elseif (HAVE_SSE41)
set(_EXTRA_C_FLAGS "-msse4.1")
elseif (HAVE_SSSE3)
set(_EXTRA_C_FLAGS "-mssse3")
elseif (HAVE_SSE3)
set(_EXTRA_C_FLAGS "-msse3")
elseif (HAVE_SSE2)
set(_EXTRA_C_FLAGS "-msse2")
elseif (HAVE_SSE)
set(_EXTRA_C_FLAGS "-msse")
elseif (HAVE_MMX)
set(_EXTRA_C_FLAGS "-mmmx")
elseif (HAVE_ALTIVEC)
if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(_EXTRA_C_FLAGS "-fno-common -faltivec")
else ()
set(_EXTRA_C_FLAGS "-maltivec")
endif ()
elseif (HAVE_NEON)
set(_EXTRA_C_FLAGS "-mfpu=neon-vfpv4")
elseif (HAVE_NEON64)
# No extra flags needed
endif ()
set(_EXTRA_C_FLAGS "${_EXTRA_C_FLAGS} -ffast-math")
endif ()
#
# MODULE : agc - automatic gain control
#
set(agc_SOURCES
${LIQUIDDSPSRC}/src/agc/src/agc_crcf.c
${LIQUIDDSPSRC}/src/agc/src/agc_rrrf.c
)
#
# MODULE : audio
#
set(audio_SOURCES
${LIQUIDDSPSRC}/src/audio/src/cvsd.c
)
#
# MODULE : buffer
#
set(buffer_SOURCES
${LIQUIDDSPSRC}/src/buffer/src/bufferf.c
${LIQUIDDSPSRC}/src/buffer/src/buffercf.c
)
#
# MODULE : channel
#
set(channel_SOURCES
${LIQUIDDSPSRC}/src/channel/src/channel_cccf.c
)
#
# MODULE : dotprod
#
set(dotprod_C_SOURCES
${LIQUIDDSPSRC}/src/dotprod/src/dotprod_cccf.c
${LIQUIDDSPSRC}/src/dotprod/src/dotprod_crcf.c
${LIQUIDDSPSRC}/src/dotprod/src/dotprod_rrrf.c
${LIQUIDDSPSRC}/src/dotprod/src/sumsq.c
)
# PowerPC AltiVec
set(dotprod_ALTIVEC_SOURCES
${LIQUIDDSPSRC}/src/dotprod/src/dotprod_cccf.c
${LIQUIDDSPSRC}/src/dotprod/src/dotprod_crcf.av.c
${LIQUIDDSPSRC}/src/dotprod/src/dotprod_rrrf.av.c
${LIQUIDDSPSRC}/src/dotprod/src/sumsq.c
)
# Intel MMX/SSE/AVX
set(dotprod_SSE_SOURCES
${LIQUIDDSPSRC}/src/dotprod/src/dotprod_cccf.mmx.c
${LIQUIDDSPSRC}/src/dotprod/src/dotprod_crcf.mmx.c
${LIQUIDDSPSRC}/src/dotprod/src/dotprod_rrrf.mmx.c
${LIQUIDDSPSRC}/src/dotprod/src/sumsq.mmx.c
)
# ARM NEON
set(dotprod_NEON_SOURCES
${LIQUIDDSPSRC}/src/dotprod/src/dotprod_cccf.neon.c
${LIQUIDDSPSRC}/src/dotprod/src/dotprod_crcf.neon.c
${LIQUIDDSPSRC}/src/dotprod/src/dotprod_rrrf.neon.c
${LIQUIDDSPSRC}/src/dotprod/src/sumsq.c
)
if (LIQUID_SIMDOVERRIDE)
set(dotprod_SOURCES ${dotprod_C_SOURCES})
elseif (HAVE_SSE41 AND HAVE_SMMINTRIN_H)
set(dotprod_SOURCES ${dotprod_SSE_SOURCES})
elseif (HAVE_SSE3 AND HAVE_PMMINTRIN_H)
set(dotprod_SOURCES ${dotprod_SSE_SOURCES})
elseif (HAVE_SSE2 AND HAVE_EMMINTRIN_H)
unset(HAVE_PMMINTRIN_H CACHE) # Unset otherwise SSE3 code kicks in.
set(dotprod_SOURCES ${dotprod_SSE_SOURCES})
elseif (HAVE_ALTIVEC)
set(dotprod_SOURCES ${dotprod_ALTIVEC_SOURCES})
elseif (HAVE_NEON OR HAVE_NEON64)
set(dotprod_SOURCES ${dotprod_NEON_SOURCES})
else ()
set(dotprod_SOURCES ${dotprod_C_SOURCES})
endif ()
#
# MODULE : equalization
#
set(equalization_SOURCES
${LIQUIDDSPSRC}/src/equalization/src/equalizer_cccf.c
${LIQUIDDSPSRC}/src/equalization/src/equalizer_rrrf.c
)
#
# MODULE : fec - forward error-correction
#
set(fec_SOURCES
${LIQUIDDSPSRC}/src/fec/src/crc.c
${LIQUIDDSPSRC}/src/fec/src/fec.c
${LIQUIDDSPSRC}/src/fec/src/fec_conv.c
${LIQUIDDSPSRC}/src/fec/src/fec_conv_poly.c
${LIQUIDDSPSRC}/src/fec/src/fec_conv_pmatrix.c
${LIQUIDDSPSRC}/src/fec/src/fec_conv_punctured.c
${LIQUIDDSPSRC}/src/fec/src/fec_golay2412.c
${LIQUIDDSPSRC}/src/fec/src/fec_hamming74.c
${LIQUIDDSPSRC}/src/fec/src/fec_hamming84.c
${LIQUIDDSPSRC}/src/fec/src/fec_hamming128.c
${LIQUIDDSPSRC}/src/fec/src/fec_hamming1511.c
${LIQUIDDSPSRC}/src/fec/src/fec_hamming3126.c
${LIQUIDDSPSRC}/src/fec/src/fec_hamming128_gentab.c
${LIQUIDDSPSRC}/src/fec/src/fec_pass.c
${LIQUIDDSPSRC}/src/fec/src/fec_rep3.c
${LIQUIDDSPSRC}/src/fec/src/fec_rep5.c
${LIQUIDDSPSRC}/src/fec/src/fec_rs.c
${LIQUIDDSPSRC}/src/fec/src/fec_secded2216.c
${LIQUIDDSPSRC}/src/fec/src/fec_secded3932.c
${LIQUIDDSPSRC}/src/fec/src/fec_secded7264.c
${LIQUIDDSPSRC}/src/fec/src/interleaver.c
${LIQUIDDSPSRC}/src/fec/src/packetizer.c
${LIQUIDDSPSRC}/src/fec/src/sumproduct.c
)
#
# MODULE : fft - fast Fourier transforms, discrete sine/cosine transforms, etc.
#
set(fft_SOURCES
${LIQUIDDSPSRC}/src/fft/src/fftf.c
${LIQUIDDSPSRC}/src/fft/src/spgramcf.c
${LIQUIDDSPSRC}/src/fft/src/spgramf.c
${LIQUIDDSPSRC}/src/fft/src/fft_utilities.c
)
#
# MODULE : filter
#
set(filter_SOURCES
${LIQUIDDSPSRC}/src/filter/src/bessel.c
${LIQUIDDSPSRC}/src/filter/src/butter.c
${LIQUIDDSPSRC}/src/filter/src/cheby1.c
${LIQUIDDSPSRC}/src/filter/src/cheby2.c
${LIQUIDDSPSRC}/src/filter/src/ellip.c
${LIQUIDDSPSRC}/src/filter/src/filter_rrrf.c
${LIQUIDDSPSRC}/src/filter/src/filter_crcf.c
${LIQUIDDSPSRC}/src/filter/src/filter_cccf.c
${LIQUIDDSPSRC}/src/filter/src/firdes.c
${LIQUIDDSPSRC}/src/filter/src/firdespm.c
${LIQUIDDSPSRC}/src/filter/src/fnyquist.c
${LIQUIDDSPSRC}/src/filter/src/gmsk.c
${LIQUIDDSPSRC}/src/filter/src/group_delay.c
${LIQUIDDSPSRC}/src/filter/src/hM3.c
${LIQUIDDSPSRC}/src/filter/src/iirdes.pll.c
${LIQUIDDSPSRC}/src/filter/src/iirdes.c
${LIQUIDDSPSRC}/src/filter/src/lpc.c
${LIQUIDDSPSRC}/src/filter/src/rcos.c
${LIQUIDDSPSRC}/src/filter/src/rkaiser.c
${LIQUIDDSPSRC}/src/filter/src/rrcos.c
)
#
# MODULE : framing
#
set(framing_SOURCES
${LIQUIDDSPSRC}/src/framing/src/bpacketgen.c
${LIQUIDDSPSRC}/src/framing/src/bpacketsync.c
${LIQUIDDSPSRC}/src/framing/src/bpresync_cccf.c
${LIQUIDDSPSRC}/src/framing/src/bsync_rrrf.c
${LIQUIDDSPSRC}/src/framing/src/bsync_crcf.c
${LIQUIDDSPSRC}/src/framing/src/bsync_cccf.c
${LIQUIDDSPSRC}/src/framing/src/detector_cccf.c
${LIQUIDDSPSRC}/src/framing/src/framedatastats.c
${LIQUIDDSPSRC}/src/framing/src/framesyncstats.c
${LIQUIDDSPSRC}/src/framing/src/framegen64.c
${LIQUIDDSPSRC}/src/framing/src/framesync64.c
${LIQUIDDSPSRC}/src/framing/src/flexframegen.c
${LIQUIDDSPSRC}/src/framing/src/flexframesync.c
${LIQUIDDSPSRC}/src/framing/src/gmskframegen.c
${LIQUIDDSPSRC}/src/framing/src/gmskframesync.c
${LIQUIDDSPSRC}/src/framing/src/msourcecf.c
${LIQUIDDSPSRC}/src/framing/src/ofdmflexframegen.c
${LIQUIDDSPSRC}/src/framing/src/ofdmflexframesync.c
${LIQUIDDSPSRC}/src/framing/src/presync_cccf.c
${LIQUIDDSPSRC}/src/framing/src/symstreamcf.c
${LIQUIDDSPSRC}/src/framing/src/symtrack_cccf.c
${LIQUIDDSPSRC}/src/framing/src/qdetector_cccf.c
${LIQUIDDSPSRC}/src/framing/src/qpacketmodem.c
${LIQUIDDSPSRC}/src/framing/src/qpilotgen.c
${LIQUIDDSPSRC}/src/framing/src/qpilotsync.c
)
#
# MODULE : math
#
set(math_SOURCES
${LIQUIDDSPSRC}/src/math/src/poly.c
${LIQUIDDSPSRC}/src/math/src/polyc.c
${LIQUIDDSPSRC}/src/math/src/polyf.c
${LIQUIDDSPSRC}/src/math/src/polycf.c
${LIQUIDDSPSRC}/src/math/src/math.c
${LIQUIDDSPSRC}/src/math/src/math.bessel.c
${LIQUIDDSPSRC}/src/math/src/math.gamma.c
${LIQUIDDSPSRC}/src/math/src/math.complex.c
${LIQUIDDSPSRC}/src/math/src/math.trig.c
${LIQUIDDSPSRC}/src/math/src/modular_arithmetic.c
${LIQUIDDSPSRC}/src/math/src/windows.c
)
#
# MODULE : matrix
#
set(matrix_SOURCES
${LIQUIDDSPSRC}/src/matrix/src/matrix.c
${LIQUIDDSPSRC}/src/matrix/src/matrixf.c
${LIQUIDDSPSRC}/src/matrix/src/matrixc.c
${LIQUIDDSPSRC}/src/matrix/src/matrixcf.c
${LIQUIDDSPSRC}/src/matrix/src/smatrix.common.c
${LIQUIDDSPSRC}/src/matrix/src/smatrixb.c
${LIQUIDDSPSRC}/src/matrix/src/smatrixf.c
${LIQUIDDSPSRC}/src/matrix/src/smatrixi.c
)
#
# MODULE : modem
#
set(modem_SOURCES
${LIQUIDDSPSRC}/src/modem/src/ampmodem.c
${LIQUIDDSPSRC}/src/modem/src/cpfskdem.c
${LIQUIDDSPSRC}/src/modem/src/cpfskmod.c
${LIQUIDDSPSRC}/src/modem/src/fskdem.c
${LIQUIDDSPSRC}/src/modem/src/fskmod.c
${LIQUIDDSPSRC}/src/modem/src/gmskdem.c
${LIQUIDDSPSRC}/src/modem/src/gmskmod.c
${LIQUIDDSPSRC}/src/modem/src/modemf.c
${LIQUIDDSPSRC}/src/modem/src/modem_utilities.c
${LIQUIDDSPSRC}/src/modem/src/modem_apsk_const.c
${LIQUIDDSPSRC}/src/modem/src/modem_arb_const.c
)
#
# MODULE : multichannel
#
set(multichannel_SOURCES
${LIQUIDDSPSRC}/src/multichannel/src/firpfbch_crcf.c
${LIQUIDDSPSRC}/src/multichannel/src/firpfbch_cccf.c
${LIQUIDDSPSRC}/src/multichannel/src/ofdmframe.common.c
${LIQUIDDSPSRC}/src/multichannel/src/ofdmframegen.c
${LIQUIDDSPSRC}/src/multichannel/src/ofdmframesync.c
)
#
# MODULE : nco - numerically-controlled oscillator
#
set(nco_SOURCES
${LIQUIDDSPSRC}/src/nco/src/nco_crcf.c
${LIQUIDDSPSRC}/src/nco/src/nco.utilities.c
)
#
# MODULE : optim - optimization
#
set(optim_SOURCES
${LIQUIDDSPSRC}/src/optim/src/chromosome.c
${LIQUIDDSPSRC}/src/optim/src/gasearch.c
${LIQUIDDSPSRC}/src/optim/src/gradsearch.c
${LIQUIDDSPSRC}/src/optim/src/optim.common.c
${LIQUIDDSPSRC}/src/optim/src/qnsearch.c
${LIQUIDDSPSRC}/src/optim/src/utilities.c
)
#
# MODULE : quantization
#
set(quantization_SOURCES
${LIQUIDDSPSRC}/src/quantization/src/compand.c
${LIQUIDDSPSRC}/src/quantization/src/quantizercf.c
${LIQUIDDSPSRC}/src/quantization/src/quantizerf.c
${LIQUIDDSPSRC}/src/quantization/src/quantizer.inline.c
)
#
# MODULE : random
#
set(random_SOURCES
${LIQUIDDSPSRC}/src/random/src/rand.c
${LIQUIDDSPSRC}/src/random/src/randn.c
${LIQUIDDSPSRC}/src/random/src/randexp.c
${LIQUIDDSPSRC}/src/random/src/randweib.c
${LIQUIDDSPSRC}/src/random/src/randgamma.c
${LIQUIDDSPSRC}/src/random/src/randnakm.c
${LIQUIDDSPSRC}/src/random/src/randricek.c
${LIQUIDDSPSRC}/src/random/src/scramble.c
)
#
# MODULE : sequence
#
set(sequence_SOURCES
${LIQUIDDSPSRC}/src/sequence/src/bsequence.c
${LIQUIDDSPSRC}/src/sequence/src/msequence.c
)
#
# MODULE : utility
#
set(utility_SOURCES
${LIQUIDDSPSRC}/src/utility/src/bshift_array.c
${LIQUIDDSPSRC}/src/utility/src/byte_utilities.c
${LIQUIDDSPSRC}/src/utility/src/msb_index.c
${LIQUIDDSPSRC}/src/utility/src/pack_bytes.c
${LIQUIDDSPSRC}/src/utility/src/shift_array.c
)
#
# MODULE : vector
#
set(vector_SOURCES
${LIQUIDDSPSRC}/src/vector/src/vectorf_add.port.c
${LIQUIDDSPSRC}/src/vector/src/vectorf_norm.port.c
${LIQUIDDSPSRC}/src/vector/src/vectorf_mul.port.c
${LIQUIDDSPSRC}/src/vector/src/vectorf_trig.port.c
${LIQUIDDSPSRC}/src/vector/src/vectorcf_add.port.c
${LIQUIDDSPSRC}/src/vector/src/vectorcf_norm.port.c
${LIQUIDDSPSRC}/src/vector/src/vectorcf_mul.port.c
${LIQUIDDSPSRC}/src/vector/src/vectorcf_trig.port.c
)
#
# Library
#
set(liquiddsp_SOURCES
${LIQUIDDSPSRC}/src/libliquid.c
${agc_SOURCES}
${audio_SOURCES}
${buffer_SOURCES}
${channel_SOURCES}
${dotprod_SOURCES}
${equalization_SOURCES}
${fec_SOURCES}
${fft_SOURCES}
${filter_SOURCES}
${framing_SOURCES}
${math_SOURCES}
${matrix_SOURCES}
${modem_SOURCES}
${multichannel_SOURCES}
${nco_SOURCES}
${optim_SOURCES}
${quantization_SOURCES}
${random_SOURCES}
${sequence_SOURCES}
${utility_SOURCES}
${vector_SOURCES}
)
add_definitions(${QT_DEFINITIONS})
add_definitions(-DQT_SHARED)
add_library(liquiddsp SHARED
${liquiddsp_SOURCES}
${liquiddsp_HEADERS_MOC}
)
if (HAVE_LIBM)
target_link_libraries(liquiddsp m)
endif ()
if (HAVE_LIBFEC)
target_link_libraries(liquiddsp fec)
endif ()
if (NOT LIQUID_FFTOVERRIDE AND HAVE_LIBFFTW3F)
target_link_libraries(liquiddsp fftw3f)
endif ()
#set_property(TARGET liquid PROPERTY OUTPUT_NAME "liquid")
#set_property(TARGET liquid PROPERTY SOVERSION "${LIQUID_VERSION}")
set_property(TARGET liquiddsp PROPERTY COMPILE_FLAGS "${_EXTRA_C_FLAGS}")