mirror of
https://github.com/mkxp-z/mkxp-z.git
synced 2025-08-23 23:33:45 +02:00
Improve compilation flags for libretro builds
This commit is contained in:
parent
4c0ab3639b
commit
e31dd0f32e
6 changed files with 123 additions and 37 deletions
70
.github/workflows/autobuild.yml
vendored
70
.github/workflows/autobuild.yml
vendored
|
@ -304,6 +304,11 @@ jobs:
|
||||||
name: Libretro phase 1
|
name: Libretro phase 1
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
|
- id: short-sha
|
||||||
|
uses: benjlevesque/short-sha@v2.2
|
||||||
|
with:
|
||||||
|
length: 7
|
||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
@ -336,7 +341,7 @@ jobs:
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: retro-phase1
|
name: retro-phase1.${{ github.event_name == 'pull_request' && format('PR{0}', github.event.number) || github.ref_name }}-${{ steps.short-sha.outputs.sha }}
|
||||||
path: retro/build/retro-phase1
|
path: retro/build/retro-phase1
|
||||||
|
|
||||||
build-retro-phase2-windows:
|
build-retro-phase2-windows:
|
||||||
|
@ -344,12 +349,17 @@ jobs:
|
||||||
name: Libretro Windows
|
name: Libretro Windows
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
|
- id: short-sha
|
||||||
|
uses: benjlevesque/short-sha@v2.2
|
||||||
|
with:
|
||||||
|
length: 7
|
||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: retro-phase1
|
name: retro-phase1.${{ github.event_name == 'pull_request' && format('PR{0}', github.event.number) || github.ref_name }}-${{ steps.short-sha.outputs.sha }}
|
||||||
path: retro/build/retro-phase1
|
path: retro/build/retro-phase1
|
||||||
|
|
||||||
- uses: msys2/setup-msys2@v2
|
- uses: msys2/setup-msys2@v2
|
||||||
|
@ -371,7 +381,7 @@ jobs:
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: libretro-mkxp-z.windows
|
name: libretro-mkxp-z.windows.${{ github.event_name == 'pull_request' && format('PR{0}', github.event.number) || github.ref_name }}-${{ steps.short-sha.outputs.sha }}
|
||||||
path: ${{ runner.temp }}/retro-phase2
|
path: ${{ runner.temp }}/retro-phase2
|
||||||
|
|
||||||
build-retro-phase2-linux:
|
build-retro-phase2-linux:
|
||||||
|
@ -410,12 +420,17 @@ jobs:
|
||||||
arch_debian: riscv64
|
arch_debian: riscv64
|
||||||
arch_gcc: riscv64-linux-gnu
|
arch_gcc: riscv64-linux-gnu
|
||||||
steps:
|
steps:
|
||||||
|
- id: short-sha
|
||||||
|
uses: benjlevesque/short-sha@v2.2
|
||||||
|
with:
|
||||||
|
length: 7
|
||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: retro-phase1
|
name: retro-phase1.${{ github.event_name == 'pull_request' && format('PR{0}', github.event.number) || github.ref_name }}-${{ steps.short-sha.outputs.sha }}
|
||||||
path: retro/build/retro-phase1
|
path: retro/build/retro-phase1
|
||||||
|
|
||||||
- name: Install apt dependencies
|
- name: Install apt dependencies
|
||||||
|
@ -461,20 +476,39 @@ jobs:
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: libretro-mkxp-z.linux.${{ matrix.arch_mkxpz }}
|
name: libretro-mkxp-z.linux.${{ matrix.arch_mkxpz }}.${{ github.event_name == 'pull_request' && format('PR{0}', github.event.number) || github.ref_name }}-${{ steps.short-sha.outputs.sha }}
|
||||||
path: ${{ runner.temp }}/retro-phase2
|
path: ${{ runner.temp }}/retro-phase2
|
||||||
|
|
||||||
build-retro-phase2-macos:
|
build-retro-phase2-macos:
|
||||||
needs: build-retro-phase1
|
needs: build-retro-phase1
|
||||||
name: Libretro macOS
|
name: Libretro macOS ${{ matrix.arch_mkxpz }}
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- arch_mkxpz: arm64
|
||||||
|
arch_llvm: aarch64-apple-darwin
|
||||||
|
cpu_family: aarch64
|
||||||
|
cpu: generic-armv8-a
|
||||||
|
endian: little
|
||||||
|
- arch_mkxpz: x86_64
|
||||||
|
arch_llvm: x86_64-apple-darwin
|
||||||
|
cpu_family: x86_64
|
||||||
|
cpu: x86_64
|
||||||
|
endian: little
|
||||||
steps:
|
steps:
|
||||||
|
- id: short-sha
|
||||||
|
uses: benjlevesque/short-sha@v2.2
|
||||||
|
with:
|
||||||
|
length: 7
|
||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: retro-phase1
|
name: retro-phase1.${{ github.event_name == 'pull_request' && format('PR{0}', github.event.number) || github.ref_name }}-${{ steps.short-sha.outputs.sha }}
|
||||||
path: retro/build/retro-phase1
|
path: retro/build/retro-phase1
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
|
@ -483,9 +517,27 @@ jobs:
|
||||||
|
|
||||||
- name: Build phase 2
|
- name: Build phase 2
|
||||||
run: |
|
run: |
|
||||||
|
echo '#!/bin/sh'$'\n''exec clang --target=${{ matrix.arch_llvm }} "$@"' > ${{ runner.temp }}/cc
|
||||||
|
echo '#!/bin/sh'$'\n''exec clang++ --target=${{ matrix.arch_llvm }} "$@"' > ${{ runner.temp }}/c++
|
||||||
|
chmod +x ${{ runner.temp }}/cc
|
||||||
|
chmod +x ${{ runner.temp }}/c++
|
||||||
|
|
||||||
|
echo "[binaries]" | tee -a ${{ runner.temp }}/cross.txt
|
||||||
|
echo "c = '${{ runner.temp }}/cc'" | tee -a ${{ runner.temp }}/cross.txt
|
||||||
|
echo "cpp = '${{ runner.temp }}/c++'" | tee -a ${{ runner.temp }}/cross.txt
|
||||||
|
echo "ar = 'ar'" | tee -a ${{ runner.temp }}/cross.txt
|
||||||
|
echo "strip = 'strip'" | tee -a ${{ runner.temp }}/cross.txt
|
||||||
|
echo "pkgconfig = 'pkg-config'" | tee -a ${{ runner.temp }}/cross.txt
|
||||||
|
echo "cmake = 'cmake'" | tee -a ${{ runner.temp }}/cross.txt
|
||||||
|
echo "[host_machine]" | tee -a ${{ runner.temp }}/cross.txt
|
||||||
|
echo "system = 'darwin'" | tee -a ${{ runner.temp }}/cross.txt
|
||||||
|
echo "cpu_family = '${{ matrix.cpu_family }}'" | tee -a ${{ runner.temp }}/cross.txt
|
||||||
|
echo "cpu = '${{ matrix.cpu }}'" | tee -a ${{ runner.temp }}/cross.txt
|
||||||
|
echo "endian = '${{ matrix.endian }}'" | tee -a ${{ runner.temp }}/cross.txt
|
||||||
|
|
||||||
mkdir ${{ runner.temp }}/retro-phase2
|
mkdir ${{ runner.temp }}/retro-phase2
|
||||||
cp retro/core.info ${{ runner.temp }}/retro-phase2/libretro-mkxp-z.info
|
cp retro/core.info ${{ runner.temp }}/retro-phase2/libretro-mkxp-z.info
|
||||||
PATH="$HOMEBREW_PREFIX/opt/gpatch/libexec/gnubin:$PATH" meson setup build --buildtype release -Db_lto=true -Dretro=true -Dretro_phase1_path=retro/build/retro-phase1
|
PATH="$HOMEBREW_PREFIX/opt/gpatch/libexec/gnubin:$PATH" meson setup build --cross-file ${{ runner.temp }}/cross.txt --buildtype release -Db_lto=true -Dretro=true -Dretro_phase1_path=retro/build/retro-phase1
|
||||||
cd build
|
cd build
|
||||||
ninja -v
|
ninja -v
|
||||||
strip -x libretro-mkxp-z.dylib
|
strip -x libretro-mkxp-z.dylib
|
||||||
|
@ -493,5 +545,5 @@ jobs:
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: libretro-mkxp-z.macos
|
name: libretro-mkxp-z.macos.${{ matrix.arch_mkxpz }}.${{ github.event_name == 'pull_request' && format('PR{0}', github.event.number) || github.ref_name }}-${{ steps.short-sha.outputs.sha }}
|
||||||
path: ${{ runner.temp }}/retro-phase2
|
path: ${{ runner.temp }}/retro-phase2
|
||||||
|
|
13
linux/meson-x86_64.txt
Normal file
13
linux/meson-x86_64.txt
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
[binaries]
|
||||||
|
c = 'x86_64-linux-gnu-gcc'
|
||||||
|
cpp = 'x86_64-linux-gnu-g++'
|
||||||
|
ar = 'x86_64-linux-gnu-ar'
|
||||||
|
strip = 'x86_64-linux-gnu-strip'
|
||||||
|
pkgconfig = 'pkg-config'
|
||||||
|
cmake = 'cmake'
|
||||||
|
|
||||||
|
[host_machine]
|
||||||
|
system = 'linux'
|
||||||
|
cpu_family = 'x86_64'
|
||||||
|
cpu = 'x86_64'
|
||||||
|
endian = 'little'
|
|
@ -51,6 +51,7 @@ if get_option('retro') == true
|
||||||
bzip2_options = cmake.subproject_options()
|
bzip2_options = cmake.subproject_options()
|
||||||
bzip2_options.add_cmake_defines({
|
bzip2_options.add_cmake_defines({
|
||||||
'CMAKE_POSITION_INDEPENDENT_CODE': true,
|
'CMAKE_POSITION_INDEPENDENT_CODE': true,
|
||||||
|
'CMAKE_BUILD_TYPE': 'None',
|
||||||
'ENABLE_STATIC_LIB': true,
|
'ENABLE_STATIC_LIB': true,
|
||||||
'ENABLE_LIB_ONLY': true,
|
'ENABLE_LIB_ONLY': true,
|
||||||
})
|
})
|
||||||
|
@ -104,11 +105,17 @@ if get_option('retro') == true
|
||||||
endif
|
endif
|
||||||
|
|
||||||
retro_link_args = []
|
retro_link_args = []
|
||||||
|
|
||||||
|
# We need to statically link the C++ standard library (libstdc++/libc++), the compiler runtime library (libgcc/compiler-rt) and libpthread in MSYS2 builds for Windows
|
||||||
if host_system == 'windows' or host_system == 'cygwin'
|
if host_system == 'windows' or host_system == 'cygwin'
|
||||||
# We need to statically link the C++ standard library (libstdc++/libc++), the compiler runtime library (libgcc/compiler-rt) and libpthread in MSYS2 builds for Windows
|
|
||||||
retro_link_args += '-static'
|
retro_link_args += '-static'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# If possible, stop the linker from reexporting the symbols from the static libraries we use (e.g. zlib)
|
||||||
|
if compilers['cpp'].has_link_argument('-Wl,--version-script,' + join_paths(meson.current_source_dir(), 'retro/link.T')) # Only works with GNU linker and LLVM linker
|
||||||
|
retro_link_args += '-Wl,--version-script,' + join_paths(meson.current_source_dir(), 'retro/link.T')
|
||||||
|
endif
|
||||||
|
|
||||||
library(
|
library(
|
||||||
'retro-' + meson.project_name(),
|
'retro-' + meson.project_name(),
|
||||||
dependencies: [
|
dependencies: [
|
||||||
|
|
|
@ -21,6 +21,12 @@ CXX ?= c++
|
||||||
LD ?= ld
|
LD ?= ld
|
||||||
AR ?= ar
|
AR ?= ar
|
||||||
RANLIB ?= ranlib
|
RANLIB ?= ranlib
|
||||||
|
CFLAGS ?=
|
||||||
|
CXXFLAGS ?=
|
||||||
|
LDFLAGS ?=
|
||||||
|
WASI_CFLAGS ?= -O3
|
||||||
|
WASI_CXXFLAGS ?= -O3
|
||||||
|
WASI_LDFLAGS ?=
|
||||||
|
|
||||||
BUILD_PREFIX := ${PWD}/build
|
BUILD_PREFIX := ${PWD}/build
|
||||||
OUTDIR := $(BUILD_PREFIX)/retro-phase1
|
OUTDIR := $(BUILD_PREFIX)/retro-phase1
|
||||||
|
@ -72,15 +78,15 @@ $(OUTDIR)/wasm2c/wasm-rt.h $(OUTDIR)/wasm2c/wasm-rt-impl.c $(OUTDIR)/wasm2c/wasm
|
||||||
$(CLONE) $(GITHUB)/WebAssembly/wabt $(DOWNLOADS)/wabt -b $(WASM_RT_VERSION)
|
$(CLONE) $(GITHUB)/WebAssembly/wabt $(DOWNLOADS)/wabt -b $(WASM_RT_VERSION)
|
||||||
cp -r $(DOWNLOADS)/wabt/wasm2c $(OUTDIR)
|
cp -r $(DOWNLOADS)/wabt/wasm2c $(OUTDIR)
|
||||||
|
|
||||||
# Cross ruby
|
# Cross Ruby (targets WASI)
|
||||||
|
|
||||||
$(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby.h $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby-impl.h $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_0.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_1.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_2.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_3.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_4.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_5.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_6.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_7.c &: $(LIBDIR)/ruby.wasm
|
$(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby.h $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby-impl.h $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_0.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_1.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_2.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_3.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_4.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_5.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_6.c $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby_7.c &: $(LIBDIR)/ruby.wasm
|
||||||
mkdir -p $(OUTDIR)/mkxp-retro-ruby
|
mkdir -p $(OUTDIR)/mkxp-retro-ruby
|
||||||
$(WASM2C) $(LIBDIR)/ruby.wasm -n ruby --num-outputs=8 -o $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby.c
|
$(WASM2C) $(LIBDIR)/ruby.wasm -n ruby --num-outputs=8 -o $(OUTDIR)/mkxp-retro-ruby/mkxp-retro-ruby.c
|
||||||
|
|
||||||
$(LIBDIR)/ruby.wasm $(OUTDIR)/mkxp-retro-dist.zip.c &: $(DOWNLOADS)/ruby/Makefile extra-ruby-bindings.h
|
$(LIBDIR)/ruby.wasm $(OUTDIR)/mkxp-retro-dist.zip.c &: $(DOWNLOADS)/crossruby/Makefile extra-ruby-bindings.h
|
||||||
mkdir -p $(OUTDIR)
|
mkdir -p $(OUTDIR)
|
||||||
cd $(DOWNLOADS)/ruby && $(MAKE) install DESTDIR=$(OUTDIR)
|
cd $(DOWNLOADS)/crossruby && $(MAKE) install DESTDIR=$(OUTDIR)
|
||||||
mv $(OUTDIR)/mkxp-retro-dist/bin/ruby $(LIBDIR)/ruby.wasm
|
mv $(OUTDIR)/mkxp-retro-dist/bin/ruby $(LIBDIR)/ruby.wasm
|
||||||
rm $(OUTDIR)/mkxp-retro-dist/lib/libruby-static.a
|
rm $(OUTDIR)/mkxp-retro-dist/lib/libruby-static.a
|
||||||
cd $(OUTDIR)/mkxp-retro-dist && $(ZIP) -r $(OUTDIR)/mkxp-retro-dist.zip *
|
cd $(OUTDIR)/mkxp-retro-dist && $(ZIP) -r $(OUTDIR)/mkxp-retro-dist.zip *
|
||||||
|
@ -93,12 +99,12 @@ $(OUTDIR)/mkxp-sandbox-bindgen.cpp $(OUTDIR)/mkxp-sandbox-bindgen.h &: sandbox-b
|
||||||
mv $(LIBDIR)/mkxp-sandbox-bindgen.h $(OUTDIR)
|
mv $(LIBDIR)/mkxp-sandbox-bindgen.h $(OUTDIR)
|
||||||
mv $(LIBDIR)/mkxp-sandbox-bindgen.cpp $(OUTDIR)
|
mv $(LIBDIR)/mkxp-sandbox-bindgen.cpp $(OUTDIR)
|
||||||
|
|
||||||
$(LIBDIR)/tags: $(DOWNLOADS)/ruby/.ext/include/$(TARGET)/ruby/config.h
|
$(LIBDIR)/tags: $(DOWNLOADS)/crossruby/.ext/include/$(TARGET)/ruby/config.h
|
||||||
echo '#include <ruby.h>' | $(WASI_CC) -E -I$(DOWNLOADS)/ruby/include -I$(DOWNLOADS)/ruby/.ext/include/$(TARGET) -o $(LIBDIR)/tags.c -
|
echo '#include <ruby.h>' | $(WASI_CC) -E -I$(DOWNLOADS)/crossruby/include -I$(DOWNLOADS)/crossruby/.ext/include/$(TARGET) -o $(LIBDIR)/tags.c -
|
||||||
$(CTAGS) -R --fields=S --kinds-c=p --kinds-c++=p -o $(LIBDIR)/tags $(LIBDIR)/tags.c
|
$(CTAGS) -R --fields=S --kinds-c=p -o $(LIBDIR)/tags $(LIBDIR)/tags.c
|
||||||
|
|
||||||
$(DOWNLOADS)/ruby/Makefile $(DOWNLOADS)/ruby/.ext/include/$(TARGET)/ruby/config.h &: $(DOWNLOADS)/ruby/configure $(RUBY) $(LIBDIR)/usr/local/lib/libyaml.a $(LIBDIR)/usr/local/lib/libz.a $(LIBDIR)/usr/local/lib/libssl.a
|
$(DOWNLOADS)/crossruby/Makefile $(DOWNLOADS)/crossruby/.ext/include/$(TARGET)/ruby/config.h &: $(DOWNLOADS)/crossruby/configure $(RUBY) $(LIBDIR)/usr/local/lib/libyaml.a $(LIBDIR)/usr/local/lib/libz.a $(LIBDIR)/usr/local/lib/libssl.a
|
||||||
cd $(DOWNLOADS)/ruby && ./configure \
|
cd $(DOWNLOADS)/crossruby && ./configure \
|
||||||
--prefix=/mkxp-retro-dist \
|
--prefix=/mkxp-retro-dist \
|
||||||
--host $(TARGET) \
|
--host $(TARGET) \
|
||||||
--build $(shell $(RUBY) -e 'puts(RbConfig::CONFIG["host"])') \
|
--build $(shell $(RUBY) -e 'puts(RbConfig::CONFIG["host"])') \
|
||||||
|
@ -111,31 +117,31 @@ $(DOWNLOADS)/ruby/Makefile $(DOWNLOADS)/ruby/.ext/include/$(TARGET)/ruby/config.
|
||||||
WASMOPT=$(WASM_OPT) \
|
WASMOPT=$(WASM_OPT) \
|
||||||
WASI_SDK_PATH=$(WASI_SDK) \
|
WASI_SDK_PATH=$(WASI_SDK) \
|
||||||
$(WASI_TOOLCHAIN) \
|
$(WASI_TOOLCHAIN) \
|
||||||
LDFLAGS='-Wl,--export-dynamic,--stack-first,-z,stack-size=16777216' \
|
LDFLAGS='-Wl,--export-dynamic,--stack-first,-z,stack-size=16777216 $(WASI_LDFLAGS)' \
|
||||||
XCFLAGS='-DWASM_SETJMP_STACK_BUFFER_SIZE=24576 -DWASM_FIBER_STACK_BUFFER_SIZE=24576 -DWASM_SCAN_STACK_BUFFER_SIZE=24576' \
|
XCFLAGS='-DWASM_SETJMP_STACK_BUFFER_SIZE=24576 -DWASM_FIBER_STACK_BUFFER_SIZE=24576 -DWASM_SCAN_STACK_BUFFER_SIZE=24576 $(WASI_CFLAGS)' \
|
||||||
debugflags=-g \
|
debugflags=-g \
|
||||||
cppflags= \
|
cppflags='$(WASI_CXXFLAGS)' \
|
||||||
wasmoptflags='-O4 -g --pass-arg=asyncify-ignore-imports' \
|
wasmoptflags='-O4 -g --pass-arg=asyncify-ignore-imports' \
|
||||||
$(shell $(RUBY) -e 'puts "ac_cv_func_dlopen=no" if RUBY_VERSION.split(".")[..1].join(".").to_f < 3.3') \
|
$(shell $(RUBY) -e 'puts "ac_cv_func_dlopen=no" if RUBY_VERSION.split(".")[..1].join(".").to_f < 3.3') \
|
||||||
--disable-install-doc
|
--disable-install-doc
|
||||||
|
|
||||||
$(DOWNLOADS)/ruby/configure: $(DOWNLOADS)/ruby/configure.ac $(RUBY)
|
$(DOWNLOADS)/crossruby/configure: $(DOWNLOADS)/crossruby/configure.ac $(RUBY)
|
||||||
cd $(DOWNLOADS)/ruby && $(RUBY) tool/downloader.rb -d tool -e gnu config.guess config.sub
|
cd $(DOWNLOADS)/crossruby && $(RUBY) tool/downloader.rb -d tool -e gnu config.guess config.sub
|
||||||
cd $(DOWNLOADS)/ruby && $(AUTORECONF) -i
|
cd $(DOWNLOADS)/crossruby && $(AUTORECONF) -i
|
||||||
|
|
||||||
$(DOWNLOADS)/ruby/configure.ac:
|
$(DOWNLOADS)/crossruby/configure.ac:
|
||||||
mkdir -p $(DOWNLOADS)
|
mkdir -p $(DOWNLOADS)
|
||||||
$(CLONE) $(GITHUB)/ruby/ruby $(DOWNLOADS)/ruby -b ruby_$(shell echo $(RUBY_VERSION) | sed -e 's/\./_/g')
|
$(CLONE) $(GITHUB)/ruby/ruby $(DOWNLOADS)/crossruby -b ruby_$(shell echo $(RUBY_VERSION) | sed -e 's/\./_/g')
|
||||||
echo '#include "${PWD}/extra-ruby-bindings.h"' >> $(DOWNLOADS)/ruby/main.c
|
echo '#include "${PWD}/extra-ruby-bindings.h"' >> $(DOWNLOADS)/crossruby/main.c
|
||||||
|
|
||||||
# Base ruby
|
# Base Ruby (targets the build machine)
|
||||||
|
|
||||||
$(RUBY): $(DOWNLOADS)/baseruby/Makefile
|
$(RUBY): $(DOWNLOADS)/baseruby/Makefile
|
||||||
cd $(DOWNLOADS)/baseruby && $(MAKE) install
|
cd $(DOWNLOADS)/baseruby && $(MAKE) install
|
||||||
if ! $(RUBY) -e 'exit 1 if RUBY_VERSION.split(".")[..1].join(".").to_f < 3.2'; then echo -e '\e[91m[ERROR] Ruby version must be at least 3.2 because earlier versions do not have WebAssembly support\e[0m'; rm $(RUBY); exit 1; fi;
|
if ! $(RUBY) -e 'exit 1 if RUBY_VERSION.split(".")[..1].join(".").to_f < 3.2'; then echo -e '\e[91m[ERROR] Ruby version must be at least 3.2 because earlier versions do not have WebAssembly support\e[0m'; rm $(RUBY); exit 1; fi;
|
||||||
|
|
||||||
$(DOWNLOADS)/baseruby/Makefile: $(DOWNLOADS)/baseruby/configure
|
$(DOWNLOADS)/baseruby/Makefile: $(DOWNLOADS)/baseruby/configure
|
||||||
cd $(DOWNLOADS)/baseruby && ./configure --prefix=$(LIBDIR) $(NATIVE_TOOLCHAIN) --disable-install-doc
|
cd $(DOWNLOADS)/baseruby && ./configure --prefix=$(LIBDIR) $(NATIVE_TOOLCHAIN) LDFLAGS='$(LDFLAGS)' XCFLAGS='$(CFLAGS)' cppflags='$(CXXFLAGS)' --disable-install-doc
|
||||||
|
|
||||||
$(DOWNLOADS)/baseruby/configure: $(DOWNLOADS)/baseruby/configure.ac
|
$(DOWNLOADS)/baseruby/configure: $(DOWNLOADS)/baseruby/configure.ac
|
||||||
cd $(DOWNLOADS)/baseruby && $(AUTORECONF) -i
|
cd $(DOWNLOADS)/baseruby && $(AUTORECONF) -i
|
||||||
|
@ -150,7 +156,7 @@ $(LIBDIR)/usr/local/lib/libyaml.a: $(DOWNLOADS)/libyaml/Makefile
|
||||||
cd $(DOWNLOADS)/libyaml && $(MAKE) install DESTDIR=$(LIBDIR)
|
cd $(DOWNLOADS)/libyaml && $(MAKE) install DESTDIR=$(LIBDIR)
|
||||||
|
|
||||||
$(DOWNLOADS)/libyaml/Makefile: $(DOWNLOADS)/libyaml/configure
|
$(DOWNLOADS)/libyaml/Makefile: $(DOWNLOADS)/libyaml/configure
|
||||||
cd $(DOWNLOADS)/libyaml && ./configure --host $(TARGET) $(WASI_TOOLCHAIN)
|
cd $(DOWNLOADS)/libyaml && ./configure --host $(TARGET) $(WASI_TOOLCHAIN) CFLAGS='$(WASI_CFLAGS)' CXXFLAGS='$(WASI_CXXFLAGS)' LDFLAGS='$(WASI_LDFLAGS)'
|
||||||
|
|
||||||
$(DOWNLOADS)/libyaml/configure: $(DOWNLOADS)/libyaml/configure.ac
|
$(DOWNLOADS)/libyaml/configure: $(DOWNLOADS)/libyaml/configure.ac
|
||||||
cd $(DOWNLOADS)/libyaml && $(AUTORECONF) -i
|
cd $(DOWNLOADS)/libyaml && $(AUTORECONF) -i
|
||||||
|
@ -165,7 +171,7 @@ $(LIBDIR)/usr/local/lib/libz.a: $(DOWNLOADS)/zlib/Makefile
|
||||||
cd $(DOWNLOADS)/zlib && $(MAKE) install DESTDIR=$(LIBDIR)
|
cd $(DOWNLOADS)/zlib && $(MAKE) install DESTDIR=$(LIBDIR)
|
||||||
|
|
||||||
$(DOWNLOADS)/zlib/Makefile: $(DOWNLOADS)/zlib/configure
|
$(DOWNLOADS)/zlib/Makefile: $(DOWNLOADS)/zlib/configure
|
||||||
cd $(DOWNLOADS)/zlib && env CHOST=linux $(WASI_TOOLCHAIN) ./configure --static
|
cd $(DOWNLOADS)/zlib && CHOST=linux $(WASI_TOOLCHAIN) CFLAGS='$(WASI_CFLAGS)' CXXFLAGS='$(WASI_CXXFLAGS)' LDFLAGS='$(WASI_LDFLAGS)' ./configure --static
|
||||||
|
|
||||||
$(DOWNLOADS)/zlib/configure:
|
$(DOWNLOADS)/zlib/configure:
|
||||||
mkdir -p $(DOWNLOADS)
|
mkdir -p $(DOWNLOADS)
|
||||||
|
@ -177,7 +183,7 @@ $(LIBDIR)/usr/local/lib/libssl.a: $(DOWNLOADS)/openssl/Makefile
|
||||||
cd $(DOWNLOADS)/openssl && $(MAKE) install_dev DESTDIR=$(LIBDIR)
|
cd $(DOWNLOADS)/openssl && $(MAKE) install_dev DESTDIR=$(LIBDIR)
|
||||||
|
|
||||||
$(DOWNLOADS)/openssl/Makefile: $(DOWNLOADS)/openssl/Configure
|
$(DOWNLOADS)/openssl/Makefile: $(DOWNLOADS)/openssl/Configure
|
||||||
cd $(DOWNLOADS)/openssl && ./Configure \
|
cd $(DOWNLOADS)/openssl && CFLAGS='$(WASI_CFLAGS)' CXXFLAGS='$(WASI_CXXFLAGS)' LDFLAGS='$(WASI_LDFLAGS)' ./Configure \
|
||||||
gcc \
|
gcc \
|
||||||
-static \
|
-static \
|
||||||
-no-asm \
|
-no-asm \
|
||||||
|
|
4
retro/link.T
Normal file
4
retro/link.T
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
global: retro_*;
|
||||||
|
local: *;
|
||||||
|
};
|
|
@ -34,6 +34,10 @@ MALLOC_FUNC = 'mkxp_sandbox_malloc'
|
||||||
# The name of the `free()` binding defined in extra-ruby-bindings.h
|
# The name of the `free()` binding defined in extra-ruby-bindings.h
|
||||||
FREE_FUNC = 'mkxp_sandbox_free'
|
FREE_FUNC = 'mkxp_sandbox_free'
|
||||||
|
|
||||||
|
FIBER_ENTRY_POINT_FUNC = 'mkxp_sandbox_fiber_entry_point'
|
||||||
|
FIBER_ARG0_FUNC = 'mkxp_sandbox_fiber_arg0'
|
||||||
|
FIBER_ARG1_FUNC = 'mkxp_sandbox_fiber_arg1'
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
IGNORED_FUNCTIONS = Set[
|
IGNORED_FUNCTIONS = Set[
|
||||||
|
@ -184,14 +188,14 @@ HEADER_START = <<~HEREDOC
|
||||||
};
|
};
|
||||||
|
|
||||||
wasm_ptr_t next_func_ptr;
|
wasm_ptr_t next_func_ptr;
|
||||||
std::shared_ptr<struct w2c_ruby> instance;
|
std::shared_ptr<struct w2c_#{MODULE_NAME}> instance;
|
||||||
std::unordered_map<key_t, struct fiber, boost::hash<key_t>> fibers;
|
std::unordered_map<key_t, struct fiber, boost::hash<key_t>> fibers;
|
||||||
wasm_ptr_t sbindgen_malloc(wasm_ptr_t);
|
wasm_ptr_t sbindgen_malloc(wasm_ptr_t);
|
||||||
wasm_ptr_t sbindgen_create_func_ptr();
|
wasm_ptr_t sbindgen_create_func_ptr();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
bindings(std::shared_ptr<struct w2c_ruby>);
|
bindings(std::shared_ptr<struct w2c_#{MODULE_NAME}>);
|
||||||
|
|
||||||
template <typename T> struct stack_frame {
|
template <typename T> struct stack_frame {
|
||||||
friend struct bindings;
|
friend struct bindings;
|
||||||
|
@ -204,9 +208,9 @@ HEADER_START = <<~HEREDOC
|
||||||
|
|
||||||
static inline struct fiber &init_fiber(struct bindings &bind) {
|
static inline struct fiber &init_fiber(struct bindings &bind) {
|
||||||
key_t key = {
|
key_t key = {
|
||||||
w2c_ruby_mkxp_sandbox_fiber_entry_point(bind.instance.get()),
|
w2c_#{MODULE_NAME}_#{FIBER_ENTRY_POINT_FUNC}(bind.instance.get()),
|
||||||
w2c_ruby_mkxp_sandbox_fiber_arg0(bind.instance.get()),
|
w2c_#{MODULE_NAME}_#{FIBER_ARG0_FUNC}(bind.instance.get()),
|
||||||
w2c_ruby_mkxp_sandbox_fiber_arg1(bind.instance.get()),
|
w2c_#{MODULE_NAME}_#{FIBER_ARG1_FUNC}(bind.instance.get()),
|
||||||
};
|
};
|
||||||
if (bind.fibers.count(key) == 0) {
|
if (bind.fibers.count(key) == 0) {
|
||||||
bind.fibers[key] = (struct fiber){.key = key};
|
bind.fibers[key] = (struct fiber){.key = key};
|
||||||
|
|
Loading…
Add table
Reference in a new issue