From 5c708d85dbddbf7dc92f34fb1eda0c8eb10ce9a1 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Thu, 29 Oct 2020 21:36:08 +0100 Subject: [PATCH] Add cmake install + MSVC dll support --- CMakeLists.txt | 22 ++++++++++++++++++++++ kiss_fft.h | 25 ++++++++++++++++++++----- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7667d0f..6a09110 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,29 @@ project(kissfft) add_library(kissfft kiss_fft.c) +add_library(kissfft::kissfft ALIAS kissfft) target_include_directories(kissfft PUBLIC $ $) + +set_target_properties(kissfft PROPERTIES + DEFINE_SYMBOL KISS_FFT_BUILD) +if(BUILD_SHARED_LIBS) + target_compile_definitions(kissfft PUBLIC KISS_FFT_SHARED) + set_target_properties(kissfft PROPERTIES + C_VISIBILITY_PRESET hidden) +endif() + +option(KISSFFT_INSTALL "Enable kissfft install" ON) +if (KISSFFT_INSTALL) + include(GNUInstallDirs) + install(TARGETS kissfft EXPORT kissfft + ARCHIVE DESTINATION "${CMAKE_INSTALL_BINDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install(FILES "kiss_fft.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + install(EXPORT kissfft DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + NAMESPACE "kissfft::" + FILE "${PROJECT_NAME}-config.cmake") +endif() diff --git a/kiss_fft.h b/kiss_fft.h index 25bb720..dce1034 100644 --- a/kiss_fft.h +++ b/kiss_fft.h @@ -14,6 +14,21 @@ #include #include +// Define KISS_FFT_SHARED macro to properly export symbols +#ifdef KISS_FFT_SHARED +# ifdef _WIN32 +# ifdef KISS_FFT_BUILD +# define KISS_FFT_API __declspec(dllexport) +# else +# define KISS_FFT_API __declspec(dllimport) +# endif +# else +# define KISS_FFT_API __attribute__ ((visibility ("default"))) +# endif +#else +# define KISS_FFT_API +#endif + #ifdef __cplusplus extern "C" { #endif @@ -99,7 +114,7 @@ typedef struct kiss_fft_state* kiss_fft_cfg; * buffer size in *lenmem. * */ -kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); +kiss_fft_cfg KISS_FFT_API kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); /* * kiss_fft(cfg,in_out_buf) @@ -111,12 +126,12 @@ kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem) * Note that each element is complex and can be accessed like f[k].r and f[k].i * */ -void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout); +void KISS_FFT_API kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout); /* A more generic version of the above function. It reads its input from every Nth sample. * */ -void kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride); +void KISS_FFT_API kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride); /* If kiss_fft_alloc allocated a buffer, it is one contiguous buffer and can be simply free()d when no longer needed*/ @@ -126,13 +141,13 @@ void kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up your compiler output to call this before you exit. */ -void kiss_fft_cleanup(void); +void KISS_FFT_API kiss_fft_cleanup(void); /* * Returns the smallest integer k, such that k>=n and k has only "fast" factors (2,3,5) */ -int kiss_fft_next_fast_size(int n); +int KISS_FFT_API kiss_fft_next_fast_size(int n); /* for real ffts, we need an even size */ #define kiss_fftr_next_fast_size_real(n) \