[opus] Building Opus (git master) ARM assembly for iOS

Jonathan Lennox jonathan at vidyo.com
Mon Mar 10 14:47:11 PDT 2014

I’m trying to build Opus (git master) for iOS, and it doesn’t build unless I disable the ARM assembly.

It looks like the problem is that Apple’s assembler doesn’t support all the assembler directives that the GNU assembler does.  I suspect this is a combination of the fact that Apple platforms are Mach-O rather than Elf, and just the fact that Apple’s assembler is extremely divergent from the mainline GNU one.

Specifically, if I configure with:
../configure -C CC="xcrun --sdk iphoneos clang -arch armv7" --build=x86_64-apple-darwin13.1.0 --host=arm-apple-darwin11 --enable-fixed-point

I get:

$ make V=1
/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-recursive
depbase=`echo celt/arm/celt_pitch_xcorr_arm-gnu.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/sh ./libtool    --mode=compile xcrun --sdk iphoneos clang -arch armv7 -DHAVE_CONFIG_H -I. -I..  -I../include -I../celt -I../silk -I../silk/float -I../silk/fixed   -g -O2 -MT celt/arm/celt_pitch_xcorr_arm-gnu.lo -MD -MP -MF $depbase.Tpo -c -o celt/arm/celt_pitch_xcorr_arm-gnu.lo celt/arm/celt_pitch_xcorr_arm-gnu.S &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  xcrun --sdk iphoneos clang -arch armv7 -DHAVE_CONFIG_H -I. -I.. -I../include -I../celt -I../silk -I../silk/float -I../silk/fixed -g -O2 -MT celt/arm/celt_pitch_xcorr_arm-gnu.lo -MD -MP -MF celt/arm/.deps/celt_pitch_xcorr_arm-gnu.Tpo -c celt/arm/celt_pitch_xcorr_arm-gnu.S  -fno-common -DPIC -o celt/arm/.libs/celt_pitch_xcorr_arm-gnu.o
celt/arm/celt_pitch_xcorr_arm-gnu.S:30:24: error: unknown directive
    .text; .p2align 2; .arch armv7-a
celt/arm/celt_pitch_xcorr_arm-gnu.S:31:4: error: unknown directive
   .fpu neon
celt/arm/celt_pitch_xcorr_arm-gnu.S:32:4: error: unknown directive
   .object_arch armv4t
celt/arm/celt_pitch_xcorr_arm-gnu.S:47:2: error: unknown directive
 .type xcorr_kernel_neon, %function; xcorr_kernel_neon: @ PROC
celt/arm/celt_pitch_xcorr_arm-gnu.S:155:2: error: unknown directive
 .size xcorr_kernel_neon, .-xcorr_kernel_neon @ ENDP
celt/arm/celt_pitch_xcorr_arm-gnu.S:159:2: error: unknown directive
 .type celt_pitch_xcorr_neon, %function; celt_pitch_xcorr_neon: @ PROC
celt/arm/celt_pitch_xcorr_arm-gnu.S:254:2: error: unknown directive
 .size celt_pitch_xcorr_neon, .-celt_pitch_xcorr_neon @ ENDP
celt/arm/celt_pitch_xcorr_arm-gnu.S:262:2: error: unknown directive
 .type xcorr_kernel_edsp, %function; xcorr_kernel_edsp: @ PROC
celt/arm/celt_pitch_xcorr_arm-gnu.S:343:2: error: unknown directive
 .size xcorr_kernel_edsp, .-xcorr_kernel_edsp @ ENDP
celt/arm/celt_pitch_xcorr_arm-gnu.S:345:2: error: unknown directive
 .type celt_pitch_xcorr_edsp, %function; celt_pitch_xcorr_edsp: @ PROC
celt/arm/celt_pitch_xcorr_arm-gnu.S:544:2: error: unknown directive
 .size celt_pitch_xcorr_edsp, .-celt_pitch_xcorr_edsp @ ENDP
celt/arm/celt_pitch_xcorr_arm-gnu.S:549:23: error: unexpected token in '.section' directive
    .section .note.GNU-stack,"",%progbits
make[2]: *** [celt/arm/celt_pitch_xcorr_arm-gnu.lo] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

If I add --disable-asm to the build, it builds correctly.

Does anyone have experience with Apple assembler directives to know what’s the best way to fix this?  I assume the Perl script to generate the assembler file is going to need to be modified somehow.

(Note: if I build from the released opus-1.1, I get all the above errors, and also the UAS errors that were mentioned last month.  Those have been fixed in git.)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.xiph.org/pipermail/opus/attachments/20140310/b471bc99/attachment.htm 

More information about the opus mailing list