madcock / sf2000_multicore_cores

Libretro cores modified to work on the SF2000 multicore loader
GNU General Public License v3.0
53 stars 2 forks source link

ffmpeg (Media player) #77

Open madcock opened 8 months ago

madcock commented 8 months ago

lots of missing thread functions

There is no media player on SF2000, though ironically its hardware was originally designed to be for media! However, little of that functionality appears to be available for multicore using the stock loader. The ffmpeg core could probably be rewritten to avoid the current thread issues, but that would require a lot of work by someone motivated to do so.

See also: https://github.com/madcock/sf2000_multicore_cores/issues/2

YongBinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn commented 2 months ago

Is it possible to build with an old version of ffmpeg?

ffmpeg has required threading support since 760ce4bc0bd11f74f0851c0a662dd5cae888df83 (Jul 2022) https://trac.ffmpeg.org/ticket/10900

YongBinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn commented 2 months ago

Hi, I just checked the code you used. It does has the macro to allow not using threads.

if HAVE_PTHREADS

I think you may just need to define HAVE_PTHREADS as 0 using environment variables when building it

YongBinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn commented 1 month ago

Hi, I successfully built ffmpeg core (ffmpeg_libretro_sf2000.a) with a rough script. However the resulting file is 129MB. I am worried that the device could not load it.

madcock commented 1 month ago

Unfortunately, just building the library file doesn't help. I built with your script and the .a file was in place when I attempted to build the bisrv.asd and core. But the problem comes when everything is linked together and combined into the core.elf. That's where the thread errors (and others) appear. I've attached a log for the sf2000 build below. Also, when I built with your script, the ffmpeg_libretro_sf2000.a file was only about 20mb. So size shouldn't have been a problem. Linking, and missing all those expected OS functions (since there's no OS on the sf2000) was the issue.

Your build script also had a few errors, though it probably didn't matter for options. cc: error: unrecognized command-line option ‘-EL’; did you mean ‘-E’? cc: error: unrecognized command-line option ‘-G0’ cc: error: unrecognized command-line option ‘-mno-abicalls’ make: *** [Makefile:307: libretro-common/glsym/glsym_gl.o] Error 1

The log is very long, but all the link errors are at the end...

compiling cores/FFmpeg/libretro make -j8 -C cores/FFmpeg/libretro platform=sf2000 make[1]: Entering directory '/mnt/c/Users/arcad/Downloads/code/sf2000_multicore/cores/FFmpeg/libretro' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/mnt/c/Users/arcad/Downloads/code/sf2000_multicore/cores/FFmpeg/libretro' cp cores/FFmpeg/libretro/.a libretro_core.a compiling libretro-common make -j8 -C libs/libretro-common make[1]: Entering directory '/mnt/c/Users/arcad/Downloads/code/sf2000_multicore/libs/libretro-common' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/mnt/c/Users/arcad/Downloads/code/sf2000_multicore/libs/libretro-common' cp -u libs/libretro-common/libretro-common.a libretro-common.a /opt/mips32-mti-elf/2019.09-03-2/bin/mips-mti-elf-gcc -EL -march=mips32 -mtune=mips32 -msoft-float -Os -G0 -mno-abicalls -fno-pic -ffunction-sections -fdata-sections -I libs/libretro-common/include -DDEBUG_XLOG=1 -o core_api.o -c core_api.c core_api.c:58:37: warning: initialization makes pointer from integer without a cast [-Wint-conversion] static int fw_fps_counter_enable = 0x80c0b5e0; ^~~~~~ core_api.c:59:30: warning: initialization makes pointer from integer without a cast [-Wint-conversion] static int fw_fps_counter = 0x80c0b5dc; ^~~~~~ core_api.c:60:38: warning: initialization makes pointer from integer without a cast [-Wint-conversion] static char fw_fps_counter_format = 0x8099bdf0; // "%2d/%2d" ^~~~~~ core_api.c: In function ‘wrap_retro_load_game’: core_api.c:169:2: warning: implicit declaration of function ‘build_game_config_filepath’; did you mean ‘config_get_config_path’? [-Wimplicit-function-declaration] build_game_config_filepath(config_game_filepath, sizeof(config_game_filepath), s_game_filepath,sysinfo.library_name); ^~~~~~ config_get_config_path core_api.c:172:2: warning: implicit declaration of function ‘config_add_file’; did you mean ‘config_append_file’? [-Wimplicit-function-declaration] config_add_file(config_game_filepath); ^~~~~~~ config_append_file core_api.c: At top level: core_api.c:445:6: warning: conflicting types for ‘build_game_config_filepath’ void build_game_config_filepath(char filepath, size_t size, const char game_filepath, char library_name) ^~~~~~ core_api.c:169:2: note: previous implicit declaration of ‘build_game_config_filepath’ was here build_game_config_filepath(config_game_filepath, sizeof(config_game_filepath), s_game_filepath,sysinfo.library_name); ^~~~~~ core_api.c:462:6: warning: conflicting types for ‘config_add_file’ void config_add_file(const char *filepath) ^~~~~~~ core_api.c:172:2: note: previous implicit declaration of ‘config_add_file’ was here config_add_file(config_game_filepath); ^~~~~~~ /opt/mips32-mti-elf/2019.09-03-2/bin/mips-mti-elf-gcc -EL -march=mips32 -mtune=mips32 -msoft-float -Os -G0 -mno-abicalls -fno-pic -ffunction-sections -fdata-sections -I libs/libretro-common/include -DDEBUG_XLOG=1 -o lib.o -c lib.c /opt/mips32-mti-elf/2019.09-03-2/bin/mips-mti-elf-gcc -EL -march=mips32 -mtune=mips32 -msoft-float -Os -G0 -mno-abicalls -fno-pic -ffunction-sections -fdata-sections -I libs/libretro-common/include -DDEBUG_XLOG=1 -o debug.o -c debug.c /opt/mips32-mti-elf/2019.09-03-2/bin/mips-mti-elf-gcc -EL -march=mips32 -mtune=mips32 -msoft-float -Os -G0 -mno-abicalls -fno-pic -ffunction-sections -fdata-sections -I libs/libretro-common/include -DDEBUG_XLOG=1 -o video_sf2000.o -c video_sf2000.c compiling core.elf /opt/mips32-mti-elf/2019.09-03-2/bin/mips-mti-elf-g++ -Wl,-Map=core.elf.map -EL -march=mips32 -mtune=mips32 -msoft-float -Wl,--gc-sections --static -z max-page-size=32 -e __core_entry__ -Tcore.ld bisrv_08_03-core.ld -o core.elf \ -Wl,--start-group core_api.o lib.o debug.o video_sf2000.o libretro_core.a libretro-common.a -lc -Wl,--end-group /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function getenv': /home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/./config.h:17: multiple definition ofgetenv'; libretro_core.a(utils.o):/home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/./config.h:17: first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function getenv': /home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/./config.h:17: multiple definition ofgetenv'; libretro_core.a(utils.o):/home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/./config.h:17: first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function getenv': /home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/./config.h:17: multiple definition ofgetenv'; libretro_core.a(utils.o):/home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/./config.h:17: first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function ff_thread_get_format': /home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/libavcodec/utils.c:3783: multiple definition offf_thread_get_format'; libretro_core.a(pthread_frame.o):pthread_frame.c:(.text.ff_thread_get_format+0x0): first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function ff_thread_get_buffer': /home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/libavcodec/utils.c:3787: multiple definition offf_thread_get_buffer'; libretro_core.a(pthread_frame.o):pthread_frame.c:(.text.ff_thread_get_buffer+0x0): first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function ff_thread_release_buffer': /home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/libavcodec/utils.c:3794: multiple definition offf_thread_release_buffer'; libretro_core.a(pthread_frame.o):pthread_frame.c:(.text.ff_thread_release_buffer+0x0): first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function ff_thread_finish_setup': /home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/libavcodec/utils.c:3800: multiple definition offf_thread_finish_setup'; libretro_core.a(pthread_frame.o):pthread_frame.c:(.text.ff_thread_finish_setup+0x0): first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function ff_thread_report_progress': /home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/libavcodec/utils.c:3804: multiple definition offf_thread_report_progress'; libretro_core.a(pthread_frame.o):pthread_frame.c:(.text.ff_thread_report_progress+0x0): first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function ff_thread_await_progress': libavcodec/utils.c:(.text.ff_thread_await_progress+0x0): multiple definition offf_thread_await_progress'; libretro_core.a(pthread_frame.o):pthread_frame.c:(.text.ff_thread_await_progress+0x0): first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function ff_thread_can_start_frame': /home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/libavcodec/utils.c:3813: multiple definition offf_thread_can_start_frame'; libretro_core.a(pthread_frame.o):pthread_frame.c:(.text.ff_thread_can_start_frame+0x0): first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function ff_alloc_entries': /home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/libavcodec/utils.c:3818: multiple definition offf_alloc_entries'; libretro_core.a(pthread_slice.o):pthread_slice.c:(.text.ff_alloc_entries+0x0): first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function ff_reset_entries': libavcodec/utils.c:(.text.ff_reset_entries+0x0): multiple definition offf_reset_entries'; libretro_core.a(pthread_slice.o):pthread_slice.c:(.text.ff_reset_entries+0x0): first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function ff_thread_await_progress2': libavcodec/utils.c:(.text.ff_thread_await_progress2+0x0): multiple definition offf_thread_await_progress2'; libretro_core.a(pthread_slice.o):pthread_slice.c:(.text.ff_thread_await_progress2+0x0): first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(utils.o): in function ff_thread_report_progress2': /home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/libavcodec/utils.c:3830: multiple definition offf_thread_report_progress2'; libretro_core.a(pthread_slice.o):pthread_slice.c:(.text.ff_thread_report_progress2+0x0): first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(swresample.o): in function getenv': /home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/./config.h:17: multiple definition ofgetenv'; libretro_core.a(utils.o):/home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/./config.h:17: first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(pthread.o): in function ff_thread_init': pthread.c:(.text.ff_thread_init+0x0): multiple definition offf_thread_init'; libretro_core.a(utils.o):/home/adcockm/downloads/sf2000_multicore/cores/FFmpeg/libavcodec/utils.c:3592: first defined here /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: warning: core.elf uses -msoft-float (set by /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/mips32/el/sof/crti.o), libretro_core.a(utils.o) uses -mhard-float /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: warning: core.elf uses -msoft-float (set by /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/mips32/el/sof/crti.o), libretro_core.a(utils.o) uses -mhard-float /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: warning: core.elf uses -msoft-float (set by /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/mips32/el/sof/crti.o), libretro_core.a(utils.o) uses -mhard-float /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: warning: core.elf uses -msoft-float (set by /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/mips32/el/sof/crti.o), libretro_core.a(utils.o) uses -mhard-float /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: warning: core.elf uses -msoft-float (set by /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/mips32/el/sof/crti.o), libretro_core.a(swresample.o) uses -mhard-float /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(ffmpeg_core.o): in function decode_thread': ffmpeg_core.c:(.text.decode_thread+0xa4c): undefined reference tofifo_write' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: ffmpeg_core.c:(.text.decode_thread+0xbbc): undefined reference to fifo_write' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: ffmpeg_core.c:(.text.decode_thread+0xbe8): undefined reference tofifo_write' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(ffmpeg_core.o): in function retro_run': ffmpeg_core.c:(.text.retro_run+0xb8c): undefined reference tofifo_read' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: ffmpeg_core.c:(.text.retro_run+0xbac): undefined reference to fifo_read' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: ffmpeg_core.c:(.text.retro_run+0xbd4): undefined reference tofifo_read' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(ffmpeg_core.o): in function retro_load_game': ffmpeg_core.c:(.text.retro_load_game+0x580): undefined reference tofifo_new' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: ffmpeg_core.c:(.text.retro_load_game+0x6b0): undefined reference to fifo_new' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rthreads.o): in functionsthread_create': rthreads.c:(.text.sthread_create+0x50): undefined reference to pthread_attr_init' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: rthreads.c:(.text.sthread_create+0x68): undefined reference topthread_create' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: rthreads.c:(.text.sthread_create+0x74): undefined reference to pthread_attr_destroy' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rthreads.o): in functionsthread_join': rthreads.c:(.text.sthread_join+0x1c): undefined reference to pthread_join' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rthreads.o): in functionslock_new': rthreads.c:(.text.slock_new+0x24): undefined reference to pthread_mutex_init' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rthreads.o): in functionslock_free': rthreads.c:(.text.slock_free+0x14): undefined reference to pthread_mutex_destroy' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rthreads.o): in functionslock_lock': rthreads.c:(.text.slock_lock+0x8): undefined reference to pthread_mutex_lock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rthreads.o): in functionslock_unlock': rthreads.c:(.text.slock_unlock+0x8): undefined reference to pthread_mutex_unlock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rthreads.o): in functionscond_new': rthreads.c:(.text.scond_new+0x24): undefined reference to pthread_cond_init' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rthreads.o): in functionscond_free': rthreads.c:(.text.scond_free+0x14): undefined reference to pthread_cond_destroy' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rthreads.o): in functionscond_wait': rthreads.c:(.text.scond_wait+0x0): undefined reference to pthread_cond_wait' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rthreads.o): in functionscond_signal': rthreads.c:(.text.scond_signal+0x0): undefined reference to pthread_cond_signal' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(allformats.o): in functionav_register_all': allformats.c:(.text.av_register_all+0xcc0): undefined reference to ff_rtp_demuxer' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0xcc8): undefined reference toff_rtp_demuxer' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0xccc): undefined reference to ff_rtsp_muxer' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0xcd4): undefined reference toff_rtsp_muxer' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0xcd8): undefined reference to ff_rtsp_demuxer' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0xce0): undefined reference toff_rtsp_demuxer' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0xcf0): undefined reference to ff_sap_muxer' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0xcf8): undefined reference toff_sap_muxer' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0xcfc): undefined reference to ff_sap_demuxer' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0xd04): undefined reference toff_sap_demuxer' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0xd14): undefined reference to ff_sdp_demuxer' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0xd1c): undefined reference toff_sdp_demuxer' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x1174): undefined reference to ff_gopher_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x117c): undefined reference toff_gopher_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x118c): undefined reference to ff_http_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x1194): undefined reference toff_http_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x1198): undefined reference to ff_httpproxy_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x11a0): undefined reference toff_httpproxy_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x11b0): undefined reference to ff_mmst_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x11b8): undefined reference toff_mmst_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x11ec): undefined reference to ff_rtp_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x11f4): undefined reference toff_rtp_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x1204): undefined reference to ff_tcp_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x120c): undefined reference toff_tcp_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x1210): undefined reference to ff_udp_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x1218): undefined reference toff_udp_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x121c): undefined reference to ff_udplite_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x1224): undefined reference toff_udplite_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x122c): undefined reference to ff_unix_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allformats.c:(.text.av_register_all+0x1230): undefined reference toff_unix_protocol' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rtmphttp.o): in function rtmp_http_send_cmd.isra.0': rtmphttp.c:(.text.rtmp_http_send_cmd.isra.0+0x84): undefined reference toff_http_do_new_request' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rtmphttp.o): in function rtmp_http_close': rtmphttp.c:(.text.rtmp_http_close+0x100): undefined reference toff_http_do_new_request' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rtpdec.o): in function ff_register_rtp_dynamic_payload_handlers': rtpdec.c:(.text.ff_register_rtp_dynamic_payload_handlers+0x74): undefined reference toff_ms_rtp_asf_pfa_handler' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: rtpdec.c:(.text.ff_register_rtp_dynamic_payload_handlers+0x7c): undefined reference to ff_ms_rtp_asf_pfa_handler' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: rtpdec.c:(.text.ff_register_rtp_dynamic_payload_handlers+0x84): undefined reference toff_ms_rtp_asf_pfv_handler' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: rtpdec.c:(.text.ff_register_rtp_dynamic_payload_handlers+0x90): undefined reference to ff_ms_rtp_asf_pfv_handler' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(rtpdec.o): in functionff_parse_fmtp': rtpdec.c:(.text.ff_parse_fmtp+0xc8): undefined reference to ff_rtsp_next_attr_and_value' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(allcodecs.o): in functionavcodec_register_all': allcodecs.c:(.text.avcodec_register_all+0x175c): undefined reference to ff_libfaac_encoder' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allcodecs.c:(.text.avcodec_register_all+0x1764): undefined reference toff_libfaac_encoder' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allcodecs.c:(.text.avcodec_register_all+0x1768): undefined reference to ff_libmp3lame_encoder' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allcodecs.c:(.text.avcodec_register_all+0x1770): undefined reference toff_libmp3lame_encoder' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allcodecs.c:(.text.avcodec_register_all+0x1774): undefined reference to ff_libvorbis_encoder' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allcodecs.c:(.text.avcodec_register_all+0x177c): undefined reference toff_libvorbis_encoder' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allcodecs.c:(.text.avcodec_register_all+0x1780): undefined reference to ff_libvorbis_decoder' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: allcodecs.c:(.text.avcodec_register_all+0x1788): undefined reference toff_libvorbis_decoder' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(pthread_frame.o): in function ff_thread_report_progress': pthread_frame.c:(.text.ff_thread_report_progress+0x68): undefined reference topthread_mutex_lock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_report_progress+0x74): undefined reference to pthread_cond_broadcast' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_report_progress+0x94): undefined reference topthread_mutex_unlock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(pthread_frame.o): in function ff_thread_await_progress': pthread_frame.c:(.text.ff_thread_await_progress+0x68): undefined reference topthread_mutex_lock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_await_progress+0x84): undefined reference to pthread_cond_wait' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_await_progress+0xb4): undefined reference topthread_mutex_unlock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(pthread_frame.o): in function ff_thread_finish_setup': pthread_frame.c:(.text.ff_thread_finish_setup+0x38): undefined reference topthread_mutex_lock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_finish_setup+0x48): undefined reference to pthread_cond_broadcast' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_finish_setup+0x60): undefined reference topthread_mutex_unlock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_finish_setup+0x84): undefined reference to pthread_mutex_lock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_finish_setup+0x94): undefined reference topthread_cond_broadcast' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_finish_setup+0xac): undefined reference to pthread_mutex_unlock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(pthread_frame.o): in functionff_thread_get_format': pthread_frame.c:(.text.ff_thread_get_format+0x64): undefined reference to pthread_mutex_lock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_get_format+0x7c): undefined reference topthread_cond_broadcast' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_get_format+0x94): undefined reference to pthread_cond_wait' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_get_format+0xac): undefined reference topthread_mutex_unlock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(pthread_frame.o): in function ff_thread_get_buffer': pthread_frame.c:(.text.ff_thread_get_buffer+0xc8): undefined reference topthread_mutex_lock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_get_buffer+0xec): undefined reference to pthread_mutex_lock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_get_buffer+0x10c): undefined reference topthread_cond_broadcast' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_get_buffer+0x12c): undefined reference to pthread_cond_wait' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_get_buffer+0x144): undefined reference topthread_mutex_unlock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_get_buffer+0x180): undefined reference to pthread_mutex_unlock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_get_buffer+0x288): undefined reference topthread_mutex_lock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_get_buffer+0x298): undefined reference to pthread_cond_broadcast' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_get_buffer+0x2a0): undefined reference topthread_mutex_unlock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(pthread_frame.o): in function ff_thread_release_buffer': pthread_frame.c:(.text.ff_thread_release_buffer+0x70): undefined reference topthread_mutex_lock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_frame.c:(.text.ff_thread_release_buffer+0xa8): undefined reference to pthread_mutex_unlock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(pthread_slice.o): in functionff_thread_report_progress2': pthread_slice.c:(.text.ff_thread_report_progress2+0x38): undefined reference to pthread_mutex_lock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_slice.c:(.text.ff_thread_report_progress2+0x58): undefined reference topthread_cond_signal' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_slice.c:(.text.ff_thread_report_progress2+0x80): undefined reference to pthread_mutex_unlock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(pthread_slice.o): in functionff_thread_await_progress2': pthread_slice.c:(.text.ff_thread_await_progress2+0x58): undefined reference to pthread_mutex_lock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_slice.c:(.text.ff_thread_await_progress2+0x94): undefined reference topthread_cond_wait' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_slice.c:(.text.ff_thread_await_progress2+0xd4): undefined reference to pthread_mutex_unlock' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(pthread_slice.o): in functionff_alloc_entries': pthread_slice.c:(.text.ff_alloc_entries+0x124): undefined reference to pthread_mutex_init' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: pthread_slice.c:(.text.ff_alloc_entries+0x134): undefined reference topthread_cond_init' /opt/mips32-mti-elf/2019.09-03-2/bin/../lib/gcc/mips-mti-elf/7.4.0/../../../../mips-mti-elf/bin/ld: libretro_core.a(resample.o): in function resample_init': resample.c:(.text.resample_init+0x9d8): undefined reference toswri_resample_dsp_init' collect2: error: ld returned 1 exit status make: *** [Makefile:130: core.elf] Error 1