libretro / beetle-psx-libretro

Standalone port/fork of Mednafen PSX to the Libretro API.
GNU General Public License v2.0
308 stars 131 forks source link

I can't build this core with Emscripten #824

Open kurai021 opened 3 years ago

kurai021 commented 3 years ago

Description

make HAVE_HW=1 -f Makefile platform=emscripten fails with multiple "jit_regset_t" errors with/without HW.

Expected behavior

Create the bc file after the build process

Actual behavior

Multiple errors messages:

In file included from deps/lightning/lib/jit_disasm.c:21:
./deps/lightning/include/lightning/jit_private.h:343:18: error: unknown type name 'jit_regset_t'
jit_regset_scan1(jit_regset_t*, jit_int32_t);
                 ^
./deps/lightning/include/lightning/jit_private.h:413:5: error: unknown type name 'jit_regset_t'; did you mean 'jit_register_t'?
    jit_regset_t         reglive;
    ^~~~~~~~~~~~
    jit_register_t
./deps/lightning/include/lightning/jit_private.h:361:29: note: 'jit_register_t' declared here
typedef struct jit_register     jit_register_t;
                                ^
./deps/lightning/include/lightning/jit_private.h:413:19: error: field has incomplete type 'jit_register_t' (aka 'struct jit_register')
    jit_regset_t         reglive;
                         ^
./deps/lightning/include/lightning/jit_private.h:361:16: note: forward declaration of 'struct jit_register'
typedef struct jit_register     jit_register_t;
               ^
./deps/lightning/include/lightning/jit_private.h:414:5: error: unknown type name 'jit_regset_t'; did you mean 'jit_register_t'?
    jit_regset_t         regmask;
    ^~~~~~~~~~~~
    jit_register_t
./deps/lightning/include/lightning/jit_private.h:361:29: note: 'jit_register_t' declared here
typedef struct jit_register     jit_register_t;
                                ^
./deps/lightning/include/lightning/jit_private.h:414:19: error: field has incomplete type 'jit_register_t' (aka 'struct jit_register')
    jit_regset_t         regmask;
                         ^
./deps/lightning/include/lightning/jit_private.h:361:16: note: forward declaration of 'struct jit_register'
typedef struct jit_register     jit_register_t;
               ^
./deps/lightning/include/lightning/jit_private.h:458:5: error: unknown type name 'jit_regset_t'; did you mean 'jit_register_t'?
    jit_regset_t         regset;
    ^~~~~~~~~~~~
    jit_register_t
./deps/lightning/include/lightning/jit_private.h:361:29: note: 'jit_register_t' declared here
typedef struct jit_register     jit_register_t;
                                ^
./deps/lightning/include/lightning/jit_private.h:458:19: error: field has incomplete type 'jit_register_t' (aka 'struct jit_register')
    jit_regset_t         regset;
                         ^
./deps/lightning/include/lightning/jit_private.h:361:16: note: forward declaration of 'struct jit_register'
typedef struct jit_register     jit_register_t;
               ^
./deps/lightning/include/lightning/jit_private.h:512:5: error: unknown type name 'jit_regset_t'; did you mean 'jit_register_t'?
    jit_regset_t          regarg;       /* cannot allocate */
    ^~~~~~~~~~~~
    jit_register_t
./deps/lightning/include/lightning/jit_private.h:361:29: note: 'jit_register_t' declared here
typedef struct jit_register     jit_register_t;
                                ^
./deps/lightning/include/lightning/jit_private.h:512:20: error: field has incomplete type 'jit_register_t' (aka 'struct jit_register')
    jit_regset_t          regarg;       /* cannot allocate */
                          ^
./deps/lightning/include/lightning/jit_private.h:361:16: note: forward declaration of 'struct jit_register'
typedef struct jit_register     jit_register_t;
               ^
./deps/lightning/include/lightning/jit_private.h:513:5: error: unknown type name 'jit_regset_t'; did you mean 'jit_register_t'?
    jit_regset_t          regsav;       /* automatic spill only once */
    ^~~~~~~~~~~~
    jit_register_t
./deps/lightning/include/lightning/jit_private.h:361:29: note: 'jit_register_t' declared here
typedef struct jit_register     jit_register_t;
                                ^
./deps/lightning/include/lightning/jit_private.h:513:20: error: field has incomplete type 'jit_register_t' (aka 'struct jit_register')
    jit_regset_t          regsav;       /* automatic spill only once */
                          ^
./deps/lightning/include/lightning/jit_private.h:361:16: note: forward declaration of 'struct jit_register'
typedef struct jit_register     jit_register_t;
               ^
./deps/lightning/include/lightning/jit_private.h:514:5: error: unknown type name 'jit_regset_t'; did you mean 'jit_register_t'?
    jit_regset_t          reglive;      /* known live registers at some point */
    ^~~~~~~~~~~~
    jit_register_t
./deps/lightning/include/lightning/jit_private.h:361:29: note: 'jit_register_t' declared here
typedef struct jit_register     jit_register_t;
                                ^
./deps/lightning/include/lightning/jit_private.h:514:20: error: field has incomplete type 'jit_register_t' (aka 'struct jit_register')
    jit_regset_t          reglive;      /* known live registers at some point */
                          ^
./deps/lightning/include/lightning/jit_private.h:361:16: note: forward declaration of 'struct jit_register'
typedef struct jit_register     jit_register_t;
               ^
./deps/lightning/include/lightning/jit_private.h:515:5: error: unknown type name 'jit_regset_t'; did you mean 'jit_register_t'?
    jit_regset_t          regmask;      /* register mask to update reglive */
    ^~~~~~~~~~~~
    jit_register_t
./deps/lightning/include/lightning/jit_private.h:361:29: note: 'jit_register_t' declared here
typedef struct jit_register     jit_register_t;
                                ^
./deps/lightning/include/lightning/jit_private.h:515:20: error: field has incomplete type 'jit_register_t' (aka 'struct jit_register')
    jit_regset_t          regmask;      /* register mask to update reglive */
                          ^
./deps/lightning/include/lightning/jit_private.h:361:16: note: forward declaration of 'struct jit_register'
typedef struct jit_register     jit_register_t;
               ^
./deps/lightning/include/lightning/jit_private.h:635:5: error: unknown type name 'jit_reg_t'
    jit_reg_t            spec;
    ^
16 errors generated.
emcc: error: '/mnt/d/home_ubuntu/projects/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -DEMSCRIPTEN -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -D__EMSCRIPTEN_major__=2 -D__EMSCRIPTEN_minor__=0 -D__EMSCRIPTEN_tiny__=31 -D_LIBCPP_ABI_VERSION=2 -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/SDL --sysroot=/mnt/d/home_ubuntu/projects/emsdk/upstream/emscripten/cache/sysroot -Xclang -iwithsysroot/include/compat -c -DHAVE_OPENGL -DCORE -DTEXTURE_DUMPING_ENABLED -O3 -DNDEBUG -MMD "-DGIT_VERSION=\" e8609eb9\"" -DHAVE_HW -Dretro_fopen=gg_retro_fopen -Dmain=gg_main -Dretro_fclose=gg_retro_fclose -Dretro_fseek=gg_retro_fseek -Dretro_fread=gg_retro_fread -Dretro_fwrite=gg_retro_fwrite -Dpath_is_directory=gg_path_is_directory -Dscond_broadcast=gg_scond_broadcast -Dscond_wait_timeout=gg_scond_wait_timeout -Dscond_signal=gg_scond_signal -Dscond_wait=gg_scond_wait -Dscond_free=gg_scond_free -Dscond_new=gg_scond_new -Dslock_unlock=gg_slock_unlock -Dslock_lock=gg_slock_lock -Dslock_free=gg_slock_free -Dslock_new=gg_slock_new -Dsthread_join=gg_sthread_join -Dsthread_detach=gg_sthread_detach -Dsthread_create=gg_sthread_create -Dscond=gg_scond -Dslock=gg_slock -Drglgen_symbol_map=mupen_rglgen_symbol_map -Dmain_exit=mupen_main_exit -Dadler32=mupen_adler32 -Drglgen_resolve_symbols_custom=mupen_rglgen_resolve_symbols_custom -Drglgen_resolve_symbols=mupen_rglgen_resolve_symbols -Dsinc_resampler=mupen_sinc_resampler -Dnearest_resampler=mupen_nearest_resampler -DCC_resampler=mupen_CC_resampler -Daudio_resampler_driver_find_handle=mupen_audio_resampler_driver_find_handle -Daudio_resampler_driver_find_ident=mupen_audio_resampler_driver_find_ident -Drarch_resampler_realloc=mupen_rarch_resampler_realloc -Daudio_convert_s16_to_float_C=mupen_audio_convert_s16_to_float_C -Daudio_convert_float_to_s16_C=mupen_audio_convert_float_to_s16_C -Daudio_convert_init_simd=mupen_audio_convert_init_simd -Dfilestream_open=gg_filestream_open -Dfilestream_get_fd=gg_filestream_get_fd -Dfilestream_read=gg_filestream_read -Dfilestream_seek=gg_filestream_seek -Dfilestream_close=gg_filestream_close -Dfilestream_tell=gg_filestream_tell -Dfilestream_set_size=gg_filestream_set_size -Dfilestream_get_ext=gg_filestream_get_ext -Dfilestream_get_size=gg_filestream_get_size -Dfilestream_read_file=gg_filestream_read_file -Dfilestream_write_file=gg_filestream_write_file -Dfilestream_write=gg_filestream_write -Dfilestream_rewind=gg_filestream_rewind -Dfilestream_putc=gg_filestream_putc -Dfilestream_getline=gg_filestream_getline -Dfilestream_getc=gg_filestream_getc -Dfilestream_gets=gg_filestream_gets -Dfilestream_eof=gg_filestream_eof -Dfilestream_flush=gg_filestream_flush -Dpath_is_character_special=gg_path_is_character_special -Dpath_is_valid=gg_path_is_valid -Dpath_is_compressed=gg_path_is_compressed -Dpath_is_compressed_file=gg_path_is_compressed_file -Dpath_is_absolute=gg_path_is_absolute -Dpath_is_directory=gg_path_is_directory -Dpath_get_size=gg_path_get_size -Dpath_get_extension=gg_path_get_extension -Dstring_is_empty=gg_string_is_empty -Dstring_is_equal=gg_string_is_equal -Dstring_to_upper=gg_string_to_upper -Dstring_to_lower=gg_string_to_lower -Dstring_ucwords=gg_string_ucwords -Dstring_replace_substring=gg_string_replace_substring -Dstring_trim_whitespace_left=gg_string_trim_whitespace_left -Dstring_trim_whitespace_right=gg_string_trim_whitespace_right -Dstring_trim_whitespace_left=gg_string_trim_whitespace_left -Dstring_trim_whitespace=gg_string_trim_whitespace -Dsthread_isself=gg_sthread_isself -Dstring_is_equal_noncase=gg_string_is_equal_noncase -Dmkdir_norecurse=gg_mkdir_norecurse -DHAVE_PBP -DWANT_THREADING -DHAVE_THREADS -DNEED_DEINTERLACER -DWANT_32BPP -DWANT_NEW_API -DFRONTEND_SUPPORTS_RGB565 -DNEED_CD -DHAVE_CHD -D_7ZIP_ST -DNEED_TREMOR -DHAVE_LIGHTREC -DLOG_LEVEL=3 -DENABLE_DISASSEMBLER=0 -DHAS_DEFAULT_ELM=1 -DENABLE_THREADED_COMPILER=1 -fwrapv -fsigned-char -fPIC -I. -I./mednafen -I./mednafen/include -I./mednafen/intl -I./mednafen/hw_sound -I./mednafen/hw_cpu -I./mednafen/hw_misc -I./libretro-common/include -I./deps/ugui -I./deps/zlib-1.2.11 -I./deps/lzma-19.00/include -I./deps/libchdr/include -I./deps/lightning/include -I./deps/lightrec -I./lightning-lightrec-include -include ./lightning-lightrec-include/debug.h -DSIZEOF_DOUBLE=8 -Wall -Wvla -Wno-sign-compare -Wno-unused-variable -Wno-unused-function -Wno-uninitialized -Wno-strict-aliasing -DMEDNAFEN_VERSION="0.9.38.6" -DPACKAGE="mednafen" -DMEDNAFEN_VERSION_NUMERIC=9386 -DPSS_STYLE=1 -DMPC_FIXED_POINT -DWANT_PSX_EMU -DSTDC_HEADERS -D__STDC_LIMIT_MACROS -D__LIBRETRO__ -D_LOW_ACCURACY_ -I./parallel-psx/SPIRV-Cross -I./parallel-psx/renderer -I./parallel-psx/khronos/include -I./parallel-psx/atlas -I./parallel-psx/vulkan -I./parallel-psx/util -I./parallel-psx/volk -I./parallel-psx/glsl/prebuilt -D_FILE_OFFSET_BITS=64 -D__STDC_CONSTANT_MACROS -DHAVE_VULKAN deps/lightning/lib/jit_disasm.c -o deps/lightning/lib/jit_disasm.o' failed (returned 1)
make: *** [Makefile:692: deps/lightning/lib/jit_disasm.o] Error 1
emmake: error: 'make HAVE_HW=1 -f Makefile platform=emscripten' failed (returned 2)

Steps to reproduce the bug

Bisect results

I don't know if this is an old problem

Version/Commit

lastest master branch code at 10/16/2021

Environment information

ZachCook commented 3 years ago

You need to build with HAVE_LIGHTREC=0

gnu-lightning would need support for webassembly to have a chance at working

If HAVE_LIGHTREC=0 works the Makefile should be changed to disable it for the default emscripten build

kurai021 commented 3 years ago

It works but but how can performance be penalized without the use of Lightrec?