Commit graph

18 commits

Author SHA1 Message Date
刘皓
e31dd0f32e
Improve compilation flags for libretro builds 2025-01-10 17:57:10 -05:00
刘皓
4c0ab3639b
Implement handling of fibers and exception catching in libretro sandbox runtime 2025-01-10 00:47:52 -05:00
刘皓
2a204178fe
Implement stackful coroutine-based executor for libretro builds
This executor has the advantage of being able to work correctly when
there are Ruby stack frames underneath C/C++ stack frames in the stack.

Still need to implement handling Ruby fibers.
2025-01-08 19:39:48 -05:00
刘皓
4a94a326b5
Fix libretro phase 1 Makefile and enable stripping in libretro CI
Apparently passing extra tools into `NATIVE_TOOLCHAIN` and
`WASI_TOOLCHAIN` in the phase 1 Makefile breaks libretro builds in
GitHub Actions - binaries built using those phase 1 files are unable to
start up the Ruby VM, although there are no compilation errors. Doesn't
happen when I build phase 1 on my computer though... Nonetheless, I've
removed the extra stuff from `NATIVE_TOOLCHAIN` and `WASI_TOOLCHAIN` in
the Makefile.

Also I've added code into the GitHub Actions workflows to strip the
libretro cores. Enabling LTO in GitHub Actions caused the libretro cores
produced to swell to enormous size compared to when built without LTO
due to the extra debug information added by LTO. However, with stripping
enabled, stripped binaries built with LTO are actually somewhat smaller
than stripped binaries built without LTO.
2025-01-07 18:44:05 -05:00
刘皓
c4d5d8af97
Turn all sandbox bindings into coroutines
We can't have them as normal functions because reentrant calls into the
Ruby API don't work if you do that, i.e. calling into the Ruby API and
that calls mkxp-z's bindings and that calls back into the Ruby API.
2025-01-07 00:02:09 -05:00
刘皓
1413feec51
Improve the Makefile for phase 1
* Ruby is no longer required to be already installed to build phase 1
* Commands and versions for everything are now configurable
* The `-j` Make flag is now respected
2025-01-05 22:14:24 -05:00
刘皓
2dbbfd57b4
Use WASI SDK C compiler for preprocessing Ruby headers instead of native C compiler 2025-01-05 17:03:17 -05:00
刘皓
1439b3181d
Use C compiler to preprocess Ruby headers before passing to Ctags
Ctags by itself misses a few functions defined in the Ruby API.
2025-01-05 16:42:48 -05:00
刘皓
19cafa332c
Fix array indexing in sandbox-bindgen.rb 2025-01-05 13:08:33 -05:00
刘皓
7de761873c
Fix _sbindgen_create_func_ptr() implementation 2025-01-04 22:27:02 -05:00
刘皓
3e79e8b390
Add binding generator for Ruby in libretro builds 2025-01-04 18:13:44 -05:00
刘皓
54f9055ee1
Remove useless enormous file from Ruby in libretro builds 2025-01-02 12:10:31 -05:00
刘皓
2723b3396b
Only use gnu_symbol_visibility on macOS 2025-01-01 15:53:04 -05:00
刘皓
5893b94ac7
Replace linker flags in libretro builds with equivalent Meson options 2025-01-01 15:06:28 -05:00
刘皓
dbe6ff891e
Implement mounting game zip files
Right now I've implemented opening game files that are in zip format and
added a filesystem implementation to allow reading the game files. I've
also added a `Dir.glob` call core.cpp to print the contents of the root
directory of the game zip file to the log as a test.
2024-12-31 00:25:00 -05:00
刘皓
69fdcc0f20
Implement a generic WASI filesystem for ZIP files 2024-12-30 19:01:57 -05:00
刘皓
921fe8954f
Allow changing Ruby version of libretro build 2024-12-30 11:55:22 -05:00
刘皓
27df4f018c
Upload base libretro core files 2024-12-29 23:35:35 -05:00