aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt86
1 files changed, 79 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9b6bc10..7856b75 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,16 +7,19 @@ option(USE_TYPE_DOUBLE "activate 'double' precision float?" ON)
# architecture/optimization options
option(USE_SIMD "use SIMD (SSE/AVX/NEON/ALTIVEC) CPU features? - " ON)
+option(DISABLE_SIMD_AVX "disable AVX CPU features? - " OFF)
option(USE_SIMD_NEON "force using NEON on ARM? (requires USE_SIMD)" OFF)
option(USE_SCALAR_VECT "use 4-element vector scalar operations (if no other SIMD)" ON)
# test options
-option(USE_BENCH_FFTW "use (system-installed) FFTW3 in fft benchmark?" OFF)
-option(USE_BENCH_GREEN "use Green FFT in fft benchmark? - if exists in subdir" ON)
-option(USE_BENCH_KISS "use KissFFT in fft benchmark? - if exists in subdir" ON)
+option(USE_BENCH_FFTW "use (system-installed) FFTW3 in fft benchmark?" OFF)
+option(USE_BENCH_GREEN "use Green FFT in fft benchmark? - if exists in subdir" ON)
+option(USE_BENCH_KISS "use KissFFT in fft benchmark? - if exists in subdir" ON)
+option(USE_BENCH_POCKET "use PocketFFT in fft benchmark? - if exists in subdir" ON)
option(USE_DEBUG_ASAN "use GCC's address sanitizer?" OFF)
+option(DISABLE_LINK_WITH_M "Disables linking with m library to build with clangCL from MSVC" OFF)
# C90 requires the gcc extensions for function attributes like always_inline
# C99 provides the function attributes: no gcc extensions required
@@ -61,6 +64,17 @@ if (USE_BENCH_KISS)
endif()
endif()
+if (USE_BENCH_POCKET)
+ # git submodule add https://github.com/hayguen/pocketfft.git
+ if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/pocketfft/pocketfft_double.c")
+ message(STATUS "found subdir pocketfft")
+ set(PATH_POCKET "${CMAKE_CURRENT_LIST_DIR}/pocketfft")
+ add_subdirectory( "${PATH_POCKET}" )
+ else()
+ message(WARNING "PocketFFT not found in subdir pocketfft")
+ endif()
+endif()
+
########################################################################
# select the release build type by default to get optimization flags
@@ -70,13 +84,23 @@ if(NOT CMAKE_BUILD_TYPE)
message(STATUS "Build type not specified: defaulting to release.")
endif(NOT CMAKE_BUILD_TYPE)
-if ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
+if ( CMAKE_C_COMPILER_ID MATCHES "MSVC" )
# using Visual Studio C++
message(STATUS "INFO: detected MSVC: will not link math lib m")
set(MATHLIB "")
+
+ add_definitions("/D_CRT_SECURE_NO_WARNINGS")
+
+ set(MSVC_DISABLED_WARNINGS_LIST
+ "C4996"
+ )
+
else()
- message(STATUS "INFO: detected NO MSVC: ${CMAKE_C_COMPILER_ID}: will link math lib m")
- set(MATHLIB "m")
+ if(DISABLE_LINK_WITH_M)
+ else()
+ message(STATUS "INFO: detected NO MSVC: ${CMAKE_C_COMPILER_ID}: will link math lib m")
+ set(MATHLIB "m")
+ endif()
endif()
set( SIMD_FLOAT_HDRS simd/pf_float.h simd/pf_sse1_float.h simd/pf_altivec_float.h simd/pf_neon_float.h simd/pf_scalar_float.h )
@@ -114,10 +138,17 @@ if (USE_SIMD AND USE_SIMD_NEON)
endif()
if (USE_SIMD AND USE_TYPE_DOUBLE)
if(WIN32)
- set_property(SOURCE pffft_double.c PROPERTY COMPILE_FLAGS "/arch:AVX")
+ if(DISABLE_SIMD_AVX)
+ set_property(SOURCE pffft_double.c PROPERTY COMPILE_FLAGS "/arch:SSE2")
+ else()
+ set_property(SOURCE pffft_double.c PROPERTY COMPILE_FLAGS "/arch:AVX")
+ endif()
else()
set_property(SOURCE pffft_double.c PROPERTY COMPILE_FLAGS "-march=native")
endif()
+ if(DISABLE_SIMD_AVX)
+ target_compile_definitions(PFFFT PRIVATE PFFFT_AVX_DISABLE=1)
+ endif()
endif()
target_link_libraries( PFFFT ${MATHLIB} )
set_property(TARGET PFFFT APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
@@ -126,6 +157,25 @@ set_property(TARGET PFFFT APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
######################################################
+if (USE_TYPE_FLOAT)
+
+ add_library(PFDSP STATIC pf_mixer.cpp pf_mixer.h pf_carrier.cpp pf_carrier.h pf_cic.cpp pf_cic.h fmv.h )
+ target_compile_definitions(PFDSP PRIVATE _USE_MATH_DEFINES)
+ if (USE_DEBUG_ASAN)
+ target_compile_options(PFDSP PRIVATE "-fsanitize=address")
+ endif()
+ if (USE_SIMD AND USE_SIMD_NEON)
+ target_compile_definitions(PFDSP PRIVATE PFFFT_ENABLE_NEON=1)
+ target_compile_options(PFDSP PRIVATE "-march=armv7-a" "-mfpu=neon")
+ endif()
+ target_link_libraries( PFDSP ${MATHLIB} )
+ set_property(TARGET PFDSP APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ )
+endif()
+
+######################################################
+
add_library(FFTPACK STATIC fftpack.c fftpack.h)
target_compile_definitions(FFTPACK PRIVATE _USE_MATH_DEFINES)
target_link_libraries( FFTPACK ${MATHLIB} )
@@ -236,6 +286,12 @@ if (USE_TYPE_FLOAT)
target_compile_definitions(bench_pffft_float PRIVATE HAVE_KISS_FFT=1)
target_link_libraries(bench_pffft_float KissFFT)
endif()
+
+ if (PATH_POCKET AND USE_BENCH_POCKET)
+ target_compile_definitions(bench_pffft_float PRIVATE HAVE_POCKET_FFT=1)
+ target_link_libraries(bench_pffft_float PocketFFT)
+ endif()
+
endif()
if (USE_TYPE_DOUBLE)
@@ -248,6 +304,22 @@ if (USE_TYPE_DOUBLE)
target_compile_definitions(bench_pffft_double PRIVATE HAVE_FFTW=1)
target_link_libraries(bench_pffft_double fftw3)
endif()
+
+ if (PATH_POCKET AND USE_BENCH_POCKET)
+ target_compile_definitions(bench_pffft_double PRIVATE HAVE_POCKET_FFT=1)
+ target_link_libraries(bench_pffft_double PocketFFT)
+ endif()
+endif()
+
+######################################################
+
+if (USE_TYPE_FLOAT)
+ add_executable(bench_pf_mixer_float bench_mixers.c)
+ target_compile_definitions(bench_pf_mixer_float PRIVATE _USE_MATH_DEFINES)
+ target_compile_definitions(bench_pf_mixer_float PRIVATE PFFFT_ENABLE_FLOAT)
+
+ target_link_libraries( bench_pf_mixer_float PFDSP ${ASANLIB} )
+
endif()
######################################################