Dubois-Rande, Antoine
2013-Jul-18 15:12 UTC
[opus] Help building OPUS library using FIXED_POINT option
Hi, We are rebasing our audio compression subsystem using OPUS rather than SPEEX. The platform is Android but this piece is written in C code: we need to support armv5/armv7/x86 architectures.... and we use the released opus-1.1beta package from here<http://downloads.xiph.org/releases/opus/opus-1.1-beta.tar.gz>. A lot of our OPUS build system + code to drive the audio compression has been reused from our SPEEX port since there are a lot of similarities between the OPUS and SPEEX build flags and APIs. I can build and run OPUS on the device using the default FLOATING point. However, for latency reasons, we are considering building with FIXED_POINT (like we do for SPEEX). Then I have the link error below. a macro is not defined and a method is not implemented when compiling with FIXED_POINT. I did a search on your code base and indeed that seems to be the problem. I might be missing something but please verify on your side and keep me posted about your results. I also attached the python file that list the files we are building for FIXED POINT and FLOATING POINT mode as well as our config.h file adapted from our SPEEX implementation. Thanks, -Antoine BUILD LOG: ... [exec] Compile x86 : 1 <= schur64_FIX.c [exec] Compile x86 : 1 <= schur_FIX.c [exec] Compile x86 : 1 <= solve_LS_FIX.c [exec] Compile x86 : 1 <= vector_ops_FIX.c [exec] Compile x86 : 1 <= warped_autocorrelation_FIX.c [exec] StaticLibrary : lib0.a [exec] StaticLibrary : lib1.a [exec] StaticLibrary : lib0.a [exec] StaticLibrary : lib1.a [exec] StaticLibrary : lib0.a [exec] StaticLibrary : lib1.a [exec] SharedLibrary : libdmt_opus.so [exec] SharedLibrary : libdmt_opus.so [exec] SharedLibrary : libdmt_opus.so [exec] C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/preb uilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-andr oideabi/bin/ld.exe: ./obj/local/armeabi/lib0.a(analysis.o): in function run_anal ysis:jni/src/libopus/src/analysis.c:636: error: undefined reference to 'optimize _framesize' [exec] C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/preb uilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-andr oideabi/bin/ld.exe: ./obj/local/armeabi/lib0.a(mlp.o): in function tansig_approx .part.0:jni/src/libopus/src/mlp.c:60: error: undefined reference to 'MULT16_16_Q 11' [exec] C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/preb uilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-andr oideabi/bin/ld.exe: ./obj/local/armeabi/lib0.a(mlp.o): in function tansig_approx .part.0:jni/src/libopus/src/mlp.c:60: error: undefined reference to 'MULT16_16_Q 11' [exec] collect2: ld returned 1 exit status [exec] make: *** [obj/local/armeabi/libdmt_opus.so] Error 1 [exec] make: *** Waiting for unfinished jobs.... [exec] /cygdrive/c/android/android-ndk-r8e/build/core/build-binary.mk:450: recipe for target `obj/local/armeabi/libdmt_opus.so' failed [exec] C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/preb uilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-andr oideabi/bin/ld.exe: ./obj/local/armeabi-v7a/lib0.a(analysis.o): in function run_ analysis:jni/src/libopus/src/analysis.c:636: error: undefined reference to 'opti mize_framesize' [exec] C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/preb uilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-andr oideabi/bin/ld.exe: ./obj/local/armeabi-v7a/lib0.a(mlp.o): in function tansig_ap prox.part.0:jni/src/libopus/src/mlp.c:60: error: undefined reference to 'MULT16_ 16_Q11' [exec] C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/preb uilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-andr oideabi/bin/ld.exe: ./obj/local/armeabi-v7a/lib0.a(mlp.o): in function tansig_ap prox.part.0:jni/src/libopus/src/mlp.c:60: error: undefined reference to 'MULT16_ 16_Q11' [exec] collect2: ld returned 1 exit status [exec] make: *** [obj/local/armeabi-v7a/libdmt_opus.so] Error 1 [exec] /cygdrive/c/android/android-ndk-r8e/build/core/build-binary.mk:450: recipe for target `obj/local/armeabi-v7a/libdmt_opus.so' failed [exec] C:/android/android-ndk-r8e/toolchains/x86-4.6/prebuilt/windows/bin/. ./lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld.exe: ./ob j/local/x86/lib0.a(analysis.o): in function run_analysis:jni/src/libopus/src/ana lysis.c:636: error: undefined reference to 'optimize_framesize' [exec] C:/android/android-ndk-r8e/toolchains/x86-4.6/prebuilt/windows/bin/. ./lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld.exe: ./ob j/local/x86/lib0.a(mlp.o): in function mlp_process:jni/src/libopus/src/mlp.c:60: error: undefined reference to 'MULT16_16_Q11' [exec] C:/android/android-ndk-r8e/toolchains/x86-4.6/prebuilt/windows/bin/. ./lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld.exe: ./ob j/local/x86/lib0.a(mlp.o): in function mlp_process:jni/src/libopus/src/mlp.c:60: error: undefined reference to 'MULT16_16_Q11' [exec] C:/android/android-ndk-r8e/toolchains/x86-4.6/prebuilt/windows/bin/. ./lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld.exe: ./ob j/local/x86/lib0.a(mlp.o): in function mlp_process:jni/src/libopus/src/mlp.c:60: error: undefined reference to 'MULT16_16_Q11' [exec] C:/android/android-ndk-r8e/toolchains/x86-4.6/prebuilt/windows/bin/. ./lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld.exe: ./ob j/local/x86/lib0.a(mlp.o): in function mlp_process:jni/src/libopus/src/mlp.c:60: error: undefined reference to 'MULT16_16_Q11' [exec] collect2: ld returned 1 exit status [exec] make: *** [obj/local/x86/libdmt_opus.so] Error 1 [exec] /cygdrive/c/android/android-ndk-r8e/build/core/build-binary.mk:450: recipe for target `obj/local/x86/libdmt_opus.so' failed [exec] make: Leaving directory `/cygdrive/c/eng/nmt/NextGen/trunk/android/N extGen/build/opus' BUILD FAILED C:\eng\nmt\NextGen\trunk\android\NextGen\build.xml:374: The following error occu rred while executing this line: C:\eng\nmt\NextGen\trunk\android\NextGen\build-native-lib.xml:28: exec returned: 2 Total time: 1 minute 10 seconds -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.xiph.org/pipermail/opus/attachments/20130718/d1b9c0fe/attachment-0001.htm -------------- next part -------------- A non-text attachment was scrubbed... Name: build_config _FLP.py Type: application/octet-stream Size: 16563 bytes Desc: build_config _FLP.py Url : http://lists.xiph.org/pipermail/opus/attachments/20130718/d1b9c0fe/attachment-0002.obj -------------- next part -------------- A non-text attachment was scrubbed... Name: build_config_FIX.py Type: application/octet-stream Size: 16017 bytes Desc: build_config_FIX.py Url : http://lists.xiph.org/pipermail/opus/attachments/20130718/d1b9c0fe/attachment-0003.obj -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: config.h Url: http://lists.xiph.org/pipermail/opus/attachments/20130718/d1b9c0fe/attachment-0001.txt
Ralph Giles
2013-Jul-18 17:39 UTC
[opus] Help building OPUS library using FIXED_POINT option
On 13-07-18 8:12 AM, Dubois-Rande, Antoine wrote:> C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/lib0.a(analysis.o): in function > run_analysis:jni/src/libopus/src/analysis.c:636: error: undefined reference to > 'optimize_framesize'Don't include analysis.c, mlp.c or mlp_data.c in the fixed point build. Those files are float-only. I'd recommend parsing *_sources.mk from the source tree and using that to construct your build dictionaries. That way you'll get an accurate source list and not have to track changes to the source file lists manually. -r
Dubois-Rande, Antoine
2013-Jul-18 18:51 UTC
[opus] Help building OPUS library using FIXED_POINT option
Thanks Ralph, it worked. I also updated our "make_build_config.py" to exclude those files so it correctly generates "build_config.py". We will look into automating this a bit more by parsing your .mk files. Best, -Antoine -----Original Message----- From: Ralph Giles [mailto:giles at thaumas.net] Sent: Thursday, July 18, 2013 1:40 PM To: Dubois-Rande, Antoine Cc: opus at xiph.org; Robitaille, Marc; Pham, Dan; Xu, Letian Subject: Re: [opus] Help building OPUS library using FIXED_POINT option On 13-07-18 8:12 AM, Dubois-Rande, Antoine wrote:> C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebui > lt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-li > nux-androideabi/bin/ld.exe: ./obj/local/armeabi/lib0.a(analysis.o): in > function > run_analysis:jni/src/libopus/src/analysis.c:636: error: undefined > reference to 'optimize_framesize'Don't include analysis.c, mlp.c or mlp_data.c in the fixed point build. Those files are float-only. I'd recommend parsing *_sources.mk from the source tree and using that to construct your build dictionaries. That way you'll get an accurate source list and not have to track changes to the source file lists manually. -r