From e27e56faf45b6d6d83d907fbdaabde00097079e7 Mon Sep 17 00:00:00 2001 From: Mooneer Salem Date: Sat, 20 Aug 2022 11:23:46 -0700 Subject: [PATCH 1/8] Test: use pragmas instead of command line flags. --- src/CMakeLists.txt | 6 +++--- src/codec2_pitch.c | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 154a203..1dcdb28 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -30,9 +30,9 @@ set(lpcnet_freedv_srcs # Set visibility of files brought in from Codec2 so that they're not visible to # users (such as Codec2 itself). -foreach(CODEC2_FILE IN LISTS codec2_import_srcs) - set_source_files_properties(${CODEC2_FILE} PROPERTIES COMPILE_FLAGS -fvisibility=hidden) -endforeach() +#foreach(CODEC2_FILE IN LISTS codec2_import_srcs) +# set_source_files_properties(${CODEC2_FILE} PROPERTIES COMPILE_FLAGS -fvisibility=hidden) +#endforeach() add_library(lpcnetfreedv SHARED ${lpcnet_freedv_srcs} ${codec2_import_srcs}) set_target_properties(lpcnetfreedv PROPERTIES diff --git a/src/codec2_pitch.c b/src/codec2_pitch.c index 01ff55b..beeb0d9 100644 --- a/src/codec2_pitch.c +++ b/src/codec2_pitch.c @@ -16,8 +16,11 @@ #include "codec2_pitch.h" #include "codec2_kiss_fft.h" + +#pragma GCC visibility push(hidden) #include "from_codec2/sine.h" #include "from_codec2/nlp.h" +#pragma GCC visibility pop #define FFT_ENC 512 /* size of FFT used for encoder */ #define P_MAX_S 0.0200 /* maximum pitch period in s */ From f270448bd31d7f31f6d81ddffb8256554a12e434 Mon Sep 17 00:00:00 2001 From: Mooneer Salem Date: Sat, 20 Aug 2022 12:04:58 -0700 Subject: [PATCH 2/8] Try without hiding the codec2 code. --- src/codec2_pitch.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/codec2_pitch.c b/src/codec2_pitch.c index beeb0d9..8dfe89c 100644 --- a/src/codec2_pitch.c +++ b/src/codec2_pitch.c @@ -17,10 +17,8 @@ #include "codec2_pitch.h" #include "codec2_kiss_fft.h" -#pragma GCC visibility push(hidden) #include "from_codec2/sine.h" #include "from_codec2/nlp.h" -#pragma GCC visibility pop #define FFT_ENC 512 /* size of FFT used for encoder */ #define P_MAX_S 0.0200 /* maximum pitch period in s */ From 36979c44197d6930e82a3b487d1b15b96c1ec1f6 Mon Sep 17 00:00:00 2001 From: Mooneer Salem Date: Sat, 20 Aug 2022 13:15:01 -0700 Subject: [PATCH 3/8] Revert "Try without hiding the codec2 code." This reverts commit f270448bd31d7f31f6d81ddffb8256554a12e434. --- src/codec2_pitch.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/codec2_pitch.c b/src/codec2_pitch.c index 8dfe89c..beeb0d9 100644 --- a/src/codec2_pitch.c +++ b/src/codec2_pitch.c @@ -17,8 +17,10 @@ #include "codec2_pitch.h" #include "codec2_kiss_fft.h" +#pragma GCC visibility push(hidden) #include "from_codec2/sine.h" #include "from_codec2/nlp.h" +#pragma GCC visibility pop #define FFT_ENC 512 /* size of FFT used for encoder */ #define P_MAX_S 0.0200 /* maximum pitch period in s */ From b928694830046bd0eaa5d90f39fa179ebb45f39b Mon Sep 17 00:00:00 2001 From: Mooneer Salem Date: Sat, 20 Aug 2022 18:12:46 -0700 Subject: [PATCH 4/8] Rename Codec2 functions because -fvisibility=hidden doesn't work on MinGW. --- src/CMakeLists.txt | 6 +++--- src/codec2_pitch.c | 4 ++-- src/from_codec2/codec2_fft.c | 1 + src/from_codec2/kiss_fft.c | 2 +- src/from_codec2/kiss_fftr.c | 1 + src/from_codec2/nlp.c | 1 + src/from_codec2/sine.c | 1 + 7 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1dcdb28..154a203 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -30,9 +30,9 @@ set(lpcnet_freedv_srcs # Set visibility of files brought in from Codec2 so that they're not visible to # users (such as Codec2 itself). -#foreach(CODEC2_FILE IN LISTS codec2_import_srcs) -# set_source_files_properties(${CODEC2_FILE} PROPERTIES COMPILE_FLAGS -fvisibility=hidden) -#endforeach() +foreach(CODEC2_FILE IN LISTS codec2_import_srcs) + set_source_files_properties(${CODEC2_FILE} PROPERTIES COMPILE_FLAGS -fvisibility=hidden) +endforeach() add_library(lpcnetfreedv SHARED ${lpcnet_freedv_srcs} ${codec2_import_srcs}) set_target_properties(lpcnetfreedv PROPERTIES diff --git a/src/codec2_pitch.c b/src/codec2_pitch.c index beeb0d9..0792915 100644 --- a/src/codec2_pitch.c +++ b/src/codec2_pitch.c @@ -14,13 +14,13 @@ #include #include +#include "from_codec2/codec2_renames.h" + #include "codec2_pitch.h" #include "codec2_kiss_fft.h" -#pragma GCC visibility push(hidden) #include "from_codec2/sine.h" #include "from_codec2/nlp.h" -#pragma GCC visibility pop #define FFT_ENC 512 /* size of FFT used for encoder */ #define P_MAX_S 0.0200 /* maximum pitch period in s */ diff --git a/src/from_codec2/codec2_fft.c b/src/from_codec2/codec2_fft.c index 841b913..efa2fe5 100644 --- a/src/from_codec2/codec2_fft.c +++ b/src/from_codec2/codec2_fft.c @@ -5,6 +5,7 @@ * Author: danilo */ +#include "codec2_renames.h" #include "codec2_fft.h" #include "debug_alloc.h" diff --git a/src/from_codec2/kiss_fft.c b/src/from_codec2/kiss_fft.c index a996095..b2404f7 100644 --- a/src/from_codec2/kiss_fft.c +++ b/src/from_codec2/kiss_fft.c @@ -12,7 +12,7 @@ Redistribution and use in source and binary forms, with or without modification, THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - +#include "codec2_renames.h" #include "_kiss_fft_guts.h" /* The guts header contains all the multiplication and addition macros that are defined for fixed or floating point complex numbers. It also declares the kf_ internal functions. diff --git a/src/from_codec2/kiss_fftr.c b/src/from_codec2/kiss_fftr.c index 7cc0286..4674089 100644 --- a/src/from_codec2/kiss_fftr.c +++ b/src/from_codec2/kiss_fftr.c @@ -12,6 +12,7 @@ Redistribution and use in source and binary forms, with or without modification, THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "codec2_renames.h" #include "kiss_fftr.h" #include "_kiss_fft_guts.h" #include "assert.h" diff --git a/src/from_codec2/nlp.c b/src/from_codec2/nlp.c index 036f6be..50764c9 100644 --- a/src/from_codec2/nlp.c +++ b/src/from_codec2/nlp.c @@ -25,6 +25,7 @@ along with this program; if not, see . */ +#include "codec2_renames.h" #include "defines.h" #include "nlp.h" #include "dump.h" diff --git a/src/from_codec2/sine.c b/src/from_codec2/sine.c index a5295a7..49ed15f 100644 --- a/src/from_codec2/sine.c +++ b/src/from_codec2/sine.c @@ -35,6 +35,7 @@ #include #include +#include "codec2_renames.h" #include "defines.h" #include "sine.h" #include "kiss_fft.h" From e2b641efc1ed9913f8d0b548ad15dcb1f9fb4059 Mon Sep 17 00:00:00 2001 From: Mooneer Salem Date: Sat, 20 Aug 2022 18:20:48 -0700 Subject: [PATCH 5/8] Forgot to add a file. --- src/from_codec2/codec2_renames.h | 39 ++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/from_codec2/codec2_renames.h diff --git a/src/from_codec2/codec2_renames.h b/src/from_codec2/codec2_renames.h new file mode 100644 index 0000000..fb16377 --- /dev/null +++ b/src/from_codec2/codec2_renames.h @@ -0,0 +1,39 @@ + #ifndef CODEC2_RENAMES_H +#define CODEC2_RENAMES_H + +#define codec2_fftr __codec2__codec2_fftr +#define codec2_fftri __codec2__codec2_fftri +#define codec2_fft_alloc __codec2__codec2_fft_alloc +#define codec2_fftr_alloc __codec2__codec2_fftr_alloc +#define codec2_fft_free __codec2__codec2_fft_free +#define codec2_fftr_free __codec2__codec2_fftr_free +#define codec2_fft __codec2__codec2_fft +#define codec2_fft_inplace __codec2__codec2_fft_inplace + +#define kiss_fft_alloc __codec2__kiss_fft_alloc +#define kiss_fft __codec2__kiss_fft +#define kiss_fft_stride __codec2__kiss_fft_stride +#define kiss_fft_cleanup __codec2__kiss_fft_cleanup +#define kiss_fft_next_fast_size __codec2__kiss_fft_next_fast_size + +#define kiss_fftr_alloc __codec2__kiss_fftr_alloc +#define kiss_fftr __codec2__kiss_fftr +#define kiss_fftri __codec2__kiss_fftri + +#define nlp_create __codec2__nlp_create +#define nlp_destroy __codec2__nlp_destroy +#define nlp __codec2__nlp + +#define c2const_create __codec2__c2const_create +#define make_analysis_window __codec2__make_analysis_window +#define hpf __codec2__hpf +#define dft_speech __codec2__dft_speech +#define two_stage_pitch_refinement __codec2__two_stage_pitch_refinement +#define estimate_amplitudes __codec2__estimate_amplitudes +#define est_voicing_mbe __codec2__est_voicing_mbe +#define make_synthesis_window __codec2__make_synthesis_window +#define synthesise __codec2__synthesise +#define codec2_rand __codec2__codec2_rand + + +#endif /* CODEC2_RENAMES_H */ \ No newline at end of file From 418fb869911a9640cc2b1c3789792e46efc5d839 Mon Sep 17 00:00:00 2001 From: Mooneer Salem Date: Sat, 20 Aug 2022 22:45:56 -0700 Subject: [PATCH 6/8] Add documentation to the top of the file. --- src/from_codec2/codec2_renames.h | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/from_codec2/codec2_renames.h b/src/from_codec2/codec2_renames.h index fb16377..663eb00 100644 --- a/src/from_codec2/codec2_renames.h +++ b/src/from_codec2/codec2_renames.h @@ -1,4 +1,18 @@ - #ifndef CODEC2_RENAMES_H +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_renames.h + AUTHOR......: Mooneer Salem + DATE CREATED: August 20, 2022 + + Applies renames for Codec2 functions brought into LPCNet to avoid multiple + symbol errors when linking Codec2 and anything that uses it. + + NOTE: this file needs to be included near the top of each Codec2 .c file + prior to including any Codec2 related .h files. + +\*---------------------------------------------------------------------------*/ + +#ifndef CODEC2_RENAMES_H #define CODEC2_RENAMES_H #define codec2_fftr __codec2__codec2_fftr @@ -35,5 +49,4 @@ #define synthesise __codec2__synthesise #define codec2_rand __codec2__codec2_rand - #endif /* CODEC2_RENAMES_H */ \ No newline at end of file From f77b3d4aee973f538cf02d770030530b2f00d0fb Mon Sep 17 00:00:00 2001 From: Mooneer Salem Date: Sun, 21 Aug 2022 17:51:03 -0700 Subject: [PATCH 7/8] Include the renames at the CMake level. --- src/CMakeLists.txt | 2 +- src/from_codec2/codec2_fft.c | 1 - src/from_codec2/codec2_renames.h | 2 +- src/from_codec2/kiss_fft.c | 1 - src/from_codec2/kiss_fftr.c | 1 - src/from_codec2/nlp.c | 1 - src/from_codec2/sine.c | 1 - 7 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 154a203..f304236 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -31,7 +31,7 @@ set(lpcnet_freedv_srcs # Set visibility of files brought in from Codec2 so that they're not visible to # users (such as Codec2 itself). foreach(CODEC2_FILE IN LISTS codec2_import_srcs) - set_source_files_properties(${CODEC2_FILE} PROPERTIES COMPILE_FLAGS -fvisibility=hidden) + set_source_files_properties(${CODEC2_FILE} PROPERTIES COMPILE_FLAGS "-fvisibility=hidden -include ${CMAKE_CURRENT_SOURCE_DIR}/from_codec2/codec2_renames.h") endforeach() add_library(lpcnetfreedv SHARED ${lpcnet_freedv_srcs} ${codec2_import_srcs}) diff --git a/src/from_codec2/codec2_fft.c b/src/from_codec2/codec2_fft.c index efa2fe5..841b913 100644 --- a/src/from_codec2/codec2_fft.c +++ b/src/from_codec2/codec2_fft.c @@ -5,7 +5,6 @@ * Author: danilo */ -#include "codec2_renames.h" #include "codec2_fft.h" #include "debug_alloc.h" diff --git a/src/from_codec2/codec2_renames.h b/src/from_codec2/codec2_renames.h index 663eb00..09cbd65 100644 --- a/src/from_codec2/codec2_renames.h +++ b/src/from_codec2/codec2_renames.h @@ -49,4 +49,4 @@ #define synthesise __codec2__synthesise #define codec2_rand __codec2__codec2_rand -#endif /* CODEC2_RENAMES_H */ \ No newline at end of file +#endif /* CODEC2_RENAMES_H */ diff --git a/src/from_codec2/kiss_fft.c b/src/from_codec2/kiss_fft.c index b2404f7..ede151c 100644 --- a/src/from_codec2/kiss_fft.c +++ b/src/from_codec2/kiss_fft.c @@ -12,7 +12,6 @@ Redistribution and use in source and binary forms, with or without modification, THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "codec2_renames.h" #include "_kiss_fft_guts.h" /* The guts header contains all the multiplication and addition macros that are defined for fixed or floating point complex numbers. It also declares the kf_ internal functions. diff --git a/src/from_codec2/kiss_fftr.c b/src/from_codec2/kiss_fftr.c index 4674089..7cc0286 100644 --- a/src/from_codec2/kiss_fftr.c +++ b/src/from_codec2/kiss_fftr.c @@ -12,7 +12,6 @@ Redistribution and use in source and binary forms, with or without modification, THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "codec2_renames.h" #include "kiss_fftr.h" #include "_kiss_fft_guts.h" #include "assert.h" diff --git a/src/from_codec2/nlp.c b/src/from_codec2/nlp.c index 50764c9..036f6be 100644 --- a/src/from_codec2/nlp.c +++ b/src/from_codec2/nlp.c @@ -25,7 +25,6 @@ along with this program; if not, see . */ -#include "codec2_renames.h" #include "defines.h" #include "nlp.h" #include "dump.h" diff --git a/src/from_codec2/sine.c b/src/from_codec2/sine.c index 49ed15f..a5295a7 100644 --- a/src/from_codec2/sine.c +++ b/src/from_codec2/sine.c @@ -35,7 +35,6 @@ #include #include -#include "codec2_renames.h" #include "defines.h" #include "sine.h" #include "kiss_fft.h" From 5be7e40311fcb4cbc1c886115d4fd518beb4347b Mon Sep 17 00:00:00 2001 From: Mooneer Salem Date: Mon, 22 Aug 2022 08:32:26 -0700 Subject: [PATCH 8/8] Undo change to kiss_fft.c for this PR. --- src/from_codec2/kiss_fft.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/from_codec2/kiss_fft.c b/src/from_codec2/kiss_fft.c index ede151c..a996095 100644 --- a/src/from_codec2/kiss_fft.c +++ b/src/from_codec2/kiss_fft.c @@ -12,6 +12,7 @@ Redistribution and use in source and binary forms, with or without modification, THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + #include "_kiss_fft_guts.h" /* The guts header contains all the multiplication and addition macros that are defined for fixed or floating point complex numbers. It also declares the kf_ internal functions.