Opened 7 years ago

Last modified 7 years ago

#6324 reopened defect

Cannot compile ffmpeg 3.3 and latest master for arm64 for iOS

Reported by: ioeir2 Owned by:
Priority: normal Component: ffmpeg
Version: git-master Keywords: ios
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:
Cannot compile ffmpeg 3.3 and latest master for arm64 for iOS. Getting error when compiling neon code for arm64 and armv7. However armv7, x86_64 and i386 targets can be compiled without any issues.
At the same time it is still possible to compile arm64 on ffmpeg 3.2.4.

Errors:

src/libavcodec/aarch64/h264dsp_init_aarch64.c:90:40: warning: incompatible pointer types assigning to 'h264_biweight_func' (aka 'void
      (*)(unsigned char *, unsigned char *, long, int, int, int, int, int)') from
      'void (uint8_t *, uint8_t *, int, int, int, int, int, int)' (aka 'void (unsigned char *, unsigned char *, int, int, int, int, int,
      int)') [-Wincompatible-pointer-types]
        c->biweight_h264_pixels_tab[2] = ff_biweight_h264_pixels_4_neon;
                                       ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6 warnings generated.
AS	libavcodec/aarch64/h264idct_neon.o
CC	libavcodec/aarch64/h264pred_init.o
AS	libavcodec/aarch64/h264pred_neon.o
CC	libavcodec/aarch64/h264qpel_init_aarch64.o
AS	libavcodec/aarch64/h264qpel_neon.o
CC	libavcodec/aarch64/hpeldsp_init_aarch64.o
AS	libavcodec/aarch64/hpeldsp_neon.o
CC	libavcodec/aarch64/idctdsp_init_aarch64.o
AS	libavcodec/aarch64/mdct_neon.o
AS	libavcodec/aarch64/simple_idct_neon.o
<instantiation>:1:14: error: invalid operand for instruction
smull v7.4S, ., v0.H[1]
             ^
<instantiation>:11:9: note: while in macro instantiation
        idct_col4_top v24 v25 v26 v27 14 
        ^
/var/folders/3c/bksvjzx55n9f9x1lm7fp2v500000gn/T/simple_idct_neon-6ce3ab.s:234:1: note: while in macro instantiation
declare_idct_col4_neon 1 4H
^
<instantiation>:2:23: error: invalid operand for instruction
        smull v16.4S, ., v0.H[5]
                      ^

Versions:
Xcode 8.3.1
ffmpeg version 3.3 or latest master (April 15, 2017)
gas-preprocessor.pl latest from https://git.libav.org/?p=gas-preprocessor.git;a=tree

Attachments (3)

build-ffmpeg.sh (4.0 KB ) - added by ioeir2 7 years ago.
ffmpeg_compilation_logs.txt (118.7 KB ) - added by ioeir2 7 years ago.
0001-lavc-aarch64-simple_idct-fix-iOS-build-without-gas-p.patch (6.4 KB ) - added by mateo 7 years ago.

Download all attachments as: .zip

Change History (10)

by ioeir2, 7 years ago

Attachment: build-ffmpeg.sh added

by ioeir2, 7 years ago

Attachment: ffmpeg_compilation_logs.txt added

comment:1 by mateo, 7 years ago

I'm currently investigating the issue.

comment:2 by mateo, 7 years ago

Resolution: invalid
Status: newclosed

It looks like gas-preprocessor.pl is not used in your case. You should specify it using either the AS env variable or the --as configure option.

I'm closing this issue as I'm able to to compile ffmpeg master using the same command line as yours using the --as option.

Please do not paste build scripts (as they are not allowed) in the future but full configure command lines instead and report the bug against ffmpeg master not a particular release.

comment:3 by mateo, 7 years ago

Resolution: invalid
Status: closedreopened

I'm reopening the ticket as this is regression. gas-preprocessor should not be required to build ffmpeg for iOS/aarch64. You can workaround the issue using gas-preprocessor until the issue is fixed.

Does the following patch fixes the issue for you ?
https://ffmpeg.org/pipermail/ffmpeg-devel/2017-April/210628.html

Last edited 7 years ago by mateo (previous) (diff)

comment:4 by wang bin, 7 years ago

Still can not compile. Using clang to build aarch64 for iOS and android results in the same error.

AS  libavcodec/aarch64/simple_idct_neon.o
CC  libavcodec/aarch64/vorbisdsp_init.o
AS  libavcodec/aarch64/vorbisdsp_neon.o
<instantiation>:1:14: error: invalid vector kind qualifier
smull v7.4S, v26.4, v0.H[1]
             ^   
<instantiation>:1:1: note: while in macro instantiation
smull1 v7.4S, v26.4, v0.H[1]
^
<instantiation>:11:9: note: while in macro instantiation
        idct_col4_top v24 v25 v26 v27 1 4
        ^
src/libavcodec/aarch64/simple_idct_neon.S:222:1: note: while in macro instantiation
declare_idct_col4_neon 1 4H 
^
<instantiation>:1:14: error: invalid operand for instruction
smull v7.4S, v26.4, v0.H[1]
             ^   
<instantiation>:1:1: note: while in macro instantiation
smull1 v7.4S, v26.4, v0.H[1]
^
<instantiation>:11:9: note: while in macro instantiation
        idct_col4_top v24 v25 v26 v27 1 4

comment:5 by mateo, 7 years ago

The attached patch should fix the issue (tested with xcode 8.3.1).

comment:6 by wang bin, 7 years ago

It works now. I hope this patch will be merged into 3.3 branch.

in reply to:  6 comment:7 by mateo, 7 years ago

Replying to lucaswang:

It works now. I hope this patch will be merged into 3.3 branch.

It will. Thanks for testing.

Note: See TracTickets for help on using tickets.