xxx: Add fallback for safari

This commit is contained in:
Fabian 2020-12-31 19:14:34 -06:00
parent 2697aa6192
commit 8107f26f10
2 changed files with 29 additions and 2 deletions

View file

@ -65,16 +65,17 @@ CLOSURE_FLAGS=\
--language_in ECMASCRIPT_2017\ --language_in ECMASCRIPT_2017\
--language_out ECMASCRIPT_2017 --language_out ECMASCRIPT_2017
CARGO_FLAGS=\ CARGO_FLAGS_SAFE=\
--target wasm32-unknown-unknown \ --target wasm32-unknown-unknown \
-- \ -- \
-C target-feature=+bulk-memory \
-C linker=tools/rust-lld-wrapper \ -C linker=tools/rust-lld-wrapper \
-C link-args="--import-table --global-base=262144 $(STRIP_DEBUG_FLAG)" \ -C link-args="--import-table --global-base=262144 $(STRIP_DEBUG_FLAG)" \
-C link-args="build/softfloat.o" \ -C link-args="build/softfloat.o" \
-C link-args="build/zstddeclib.o" \ -C link-args="build/zstddeclib.o" \
--verbose --verbose
CARGO_FLAGS=$(CARGO_FLAGS_SAFE) -C target-feature=+bulk-memory
CORE_FILES=const.js config.js io.js main.js lib.js ide.js pci.js floppy.js \ CORE_FILES=const.js config.js io.js main.js lib.js ide.js pci.js floppy.js \
memory.js dma.js pit.js vga.js ps2.js pic.js rtc.js uart.js hpet.js \ memory.js dma.js pit.js vga.js ps2.js pic.js rtc.js uart.js hpet.js \
acpi.js apic.js ioapic.js \ acpi.js apic.js ioapic.js \
@ -179,6 +180,11 @@ build/v86-debug.wasm: $(RUST_FILES) build/softfloat.o build/zstddeclib.o Cargo.t
mv build/wasm32-unknown-unknown/debug/v86.wasm build/v86-debug.wasm mv build/wasm32-unknown-unknown/debug/v86.wasm build/v86-debug.wasm
ls -lh build/v86-debug.wasm ls -lh build/v86-debug.wasm
build/v86-fallback.wasm: $(RUST_FILES) build/softfloat.o build/zstddeclib.o Cargo.toml
mkdir -p build/
cargo +nightly rustc --release $(CARGO_FLAGS_SAFE)
mv build/wasm32-unknown-unknown/release/v86.wasm build/v86-fallback.wasm || true
debug-with-profiler: $(RUST_FILES) build/softfloat.o build/zstddeclib.o Cargo.toml debug-with-profiler: $(RUST_FILES) build/softfloat.o build/zstddeclib.o Cargo.toml
mkdir -p build/ mkdir -p build/
cargo +nightly rustc --features profiler $(CARGO_FLAGS) cargo +nightly rustc --features profiler $(CARGO_FLAGS)

View file

@ -164,6 +164,7 @@ function V86Starter(options)
}; };
let v86_bin = DEBUG ? "v86-debug.wasm" : "v86.wasm"; let v86_bin = DEBUG ? "v86-debug.wasm" : "v86.wasm";
let v86_bin_fallback = "v86-fallback.wasm";
if(options["wasm_path"]) if(options["wasm_path"])
{ {
@ -172,10 +173,12 @@ function V86Starter(options)
else if(typeof window === "undefined" && typeof __dirname === "string") else if(typeof window === "undefined" && typeof __dirname === "string")
{ {
v86_bin = __dirname + "/" + v86_bin; v86_bin = __dirname + "/" + v86_bin;
v86_bin_fallback = __dirname + "/" + v86_bin_fallback;
} }
else else
{ {
v86_bin = "build/" + v86_bin; v86_bin = "build/" + v86_bin;
v86_bin_fallback = "build/" + v86_bin_fallback;
} }
v86util.load_file(v86_bin, { v86util.load_file(v86_bin, {
@ -193,6 +196,24 @@ function V86Starter(options)
cpu = emulator.cpu; cpu = emulator.cpu;
this.continue_init(emulator, options); this.continue_init(emulator, options);
}, err => {
v86util.load_file(v86_bin_fallback, {
done: bytes => {
WebAssembly
.instantiate(bytes, { "env": wasm_shared_funcs })
.then(({ instance }) => {
const imports = wasm_shared_funcs;
const exports = instance["exports"];
wasm_memory = exports.memory;
exports["rust_init"]();
const emulator = this.v86 = new v86(this.emulator_bus, { exports, wasm_table });
cpu = emulator.cpu;
this.continue_init(emulator, options);
});
},
});
}); });
}, },
progress: e => progress: e =>