ssut / ffmpeg-on-apple-silicon

Build ffmpeg for ARM-based Apple Silicon Macs
222 stars 48 forks source link

building OAM fails #14

Open EliasVansteenkiste opened 1 year ago

EliasVansteenkiste commented 1 year ago
...
-- Performing Test HAVE_CXX_FLAG - Success
Checking C compiler flag support for: -mavx2
-- Performing Test HAVE_C_FLAG
-- Performing Test HAVE_C_FLAG - Success
Checking C compiler flag support for: -mavx2
-- Performing Test HAVE_CXX_FLAG
-- Performing Test HAVE_CXX_FLAG - Success
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    LIBTYPE

-- Build files have been written to: /Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_build
+ make -j 12
Scanning dependencies of target aom_version_check
[  1%] Updating version info if necessary.
[  1%] Built target aom_version_check
Scanning dependencies of target aom_version
[  1%] Building C object CMakeFiles/aom_version.dir/gen_src/aom_version_dummy.c.o
[  1%] Linking C static library libaom_version.a
[  2%] Built target aom_version
[  3%] Writing aom.pc
Scanning dependencies of target aom_rtcd
Scanning dependencies of target aom_pc
[  3%] Building C object CMakeFiles/aom_pc.dir/gen_src/aom_pc_dummy.c.o
[  3%] Building C object CMakeFiles/aom_rtcd.dir/aom_scale/aom_scale_rtcd.c.o
[  3%] Building C object CMakeFiles/aom_rtcd.dir/aom_dsp/aom_dsp_rtcd.c.o
[  4%] Building C object CMakeFiles/aom_rtcd.dir/av1/common/av1_rtcd.c.o
In file included from /Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_scale/aom_scale_rtcd.c:14:
In file included from /Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_build/config/aom_scale_rtcd.h:86:
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:187:3: error: invalid output constraint '=a' in asm
  cpuid(0, 0, max_cpuid_val, reg_ebx, reg_ecx, reg_edx);
  ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:192:3: error: invalid output constraint '=a' in asm
  cpuid(1, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
  ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:215:9: error: invalid output constraint '=a' in asm
        cpuid(7, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
        ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:248:38: error: invalid output constraint '=a' in asm
  __asm__ __volatile__("rdtsc\n\t" : "=a"(tsc) :);
                                     ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:266:34: error: invalid output constraint '=a' in asm
  __asm__ __volatile__("rdtsc" : "=a"(lo), "=d"(hi));
                                 ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:285:39: error: invalid output constraint '=a' in asm
  __asm__ __volatile__("rdtscp\n\t" : "=a"(tscp) :);
                                      ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:305:3: error: invalid output constraint '=a' in asm
  cpuid(0, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
  ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:312:3: error: invalid output constraint '=a' in asm
  cpuid(0, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
  ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
[  4%] Linking C static library libaom_pc.a
8 errors generated.
make[2]: *** [CMakeFiles/aom_rtcd.dir/aom_scale/aom_scale_rtcd.c.o] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from /Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/av1/common/av1_rtcd.c:14:
In file included from /Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_build/config/av1_rtcd.h:701:
/Users/elias_v//external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:187:3: error: invalid output constraint '=a' in asm
  cpuid(0, 0, max_cpuid_val, reg_ebx, reg_ecx, reg_edx);
  ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:192:3: error: invalid output constraint '=a' in asm
  cpuid(1, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
  ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:215:9: error: invalid output constraint '=a' in asm
        cpuid(7, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
        ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:248:38: error: invalid output constraint '=a' in asm
  __asm__ __volatile__("rdtsc\n\t" : "=a"(tsc) :);
                                     ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:266:34: error: invalid output constraint '=a' in asm
  __asm__ __volatile__("rdtsc" : "=a"(lo), "=d"(hi));
                                 ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:285:39: error: invalid output constraint '=a' in asm
  __asm__ __volatile__("rdtscp\n\t" : "=a"(tscp) :);
                                      ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:305:3: error: invalid output constraint '=a' in asm
  cpuid(0, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
  ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:312:3: error: invalid output constraint '=a' in asm
  cpuid(0, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
  ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
8 errors generated.
make[2]: *** [CMakeFiles/aom_rtcd.dir/av1/common/av1_rtcd.c.o] Error 1
In file included from /Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_dsp/aom_dsp_rtcd.c:14:
In file included from /Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_build/config/aom_dsp_rtcd.h:5967:
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:187:3: error: invalid output constraint '=a' in asm
  cpuid(0, 0, max_cpuid_val, reg_ebx, reg_ecx, reg_edx);
  ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:192:3: error: invalid output constraint '=a' in asm
  cpuid(1, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
  ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:215:9: error: invalid output constraint '=a' in asm
        cpuid(7, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
        ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:248:38: error: invalid output constraint '=a' in asm
  __asm__ __volatile__("rdtsc\n\t" : "=a"(tsc) :);
                                     ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:266:34: error: invalid output constraint '=a' in asm
  __asm__ __volatile__("rdtsc" : "=a"(lo), "=d"(hi));
                                 ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:285:39: error: invalid output constraint '=a' in asm
  __asm__ __volatile__("rdtscp\n\t" : "=a"(tscp) :);
                                      ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:305:3: error: invalid output constraint '=a' in asm
  cpuid(0, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
  ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:312:3: error: invalid output constraint '=a' in asm
  cpuid(0, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
  ^
/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:50:26: note: expanded from macro 'cpuid'
                       : "=a"(ax), "=b"(bx), "=c"(cx), "=d"(dx) \
                         ^
8 errors generated.
make[2]: *** [CMakeFiles/aom_rtcd.dir/aom_dsp/aom_dsp_rtcd.c.o] Error 1
make[1]: *** [CMakeFiles/aom_rtcd.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[  4%] Built target aom_pc
make: *** [all] Error 2

It appears that the version of the AOM (Alliance for Open Media) library I am trying to compile is expecting an x86 CPU. The errors all originate from x86-specific inline assembly instructions in the x86.h file of the AOM (Alliance for Open Media) library, which is a part of FFmpeg.

Specifically, the errors are about the CPUID instruction, which is unique to x86 architecture and is used to identify the features supported by the CPU. For example, the line:

/Users/elias_v/external_repositories/ffmpeg-on-apple-silicon/workdir/compile/aom/aom_ports/x86.h:187:3: error: invalid output constraint '=a' in asm
  cpuid(0, 0, max_cpuid_val, reg_ebx, reg_ecx, reg_edx);
  ^

This line is part of a block of assembly code that's trying to execute the CPUID instruction. The error "invalid output constraint '=a' in asm" is complaining about the constraints on the assembly code, which are specifically written for x86 architecture.

On Apple's M1 and later chips, which use ARM architecture, this CPUID instruction is not available.

How can i fix this issue?