2017-08-22 61 views
7

Mam projektu rdzy Mam kompilacji do webasm za kompiluje http://asquera.de/blog/2017-04-10/the-path-to-rust-on-the-web/rdza, WebAssembly i przechodzącej argumenty do zwiększenia całkowitej pamięci

projektu. Kiedy go uruchomić w Chrome Canary, że zabraknie pamięci i daje mi bardzo pomocny komunikat o błędzie:

abort("Cannot enlarge memory arrays. Either (1) compile with -s 
TOTAL_MEMORY=X with X higher than the current value 16777216, (2) compile 
with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, 
... 

Problem polega na tym, to nie jest jasne, w jaki sposób przekazać te flagi rustc/łańcuch budować narzędzia.

Ani ustawienie EMMAKEN_CFLAGS lub następujące prace:

cargo rustc -v --target=wasm32-unknown-emscripten --release -- -Clink-args="-s TOTAL_MEMORY=33554432" 

Odpowiedz

3

This blogu oferuje rozwiązanie, które myślę, że może być stosowana w przypadku zbyt:

Jak najlepiej jak mogę powiedzieć, że jest nie sposób przekazać większości argumentów linkerów za pośrednictwem ładunku. Zamiast tego zhakuj wokół ograniczenia, określając niestandardowy linker, który w rzeczywistości jest skryptem powłoki, owijającym prawdziwy linker.

Utwórz skrypt jak emcc_link który wywołuje emscripten z odpowiednimi opcjami:

emcc "-s" "TOTAL_MEMORY=33554432" [email protected] 

(.. Może być konieczne inne opcje, aby to działało Sprawdź blog post szczegóły)

I określ, aby użyć go do projektu, edytując/tworząc .cargo/config:

[target.wasm32-unknown-emscripten] 
linker = "/your/project/dir/emcc_sdl" 

[target.asmjs-unknown-emscripten] 
linker = "/your/project/dir/emcc_sdl" 

Bezwzględnie zakładałem, że środowisko kompilacji to Linux lub coś podobnego. W systemie Windows skrypt powłoki prawdopodobnie powinien być skryptem wsadowym i nie jestem pewien, czy są jakieś różnice w .cargo/config.

Nota prawna: Tego nie próbowałem.

+0

To nie wydaje się działać. Ale trzeba zrobić kopanie, żeby mieć pewność. W szczególności wydaje się, że specjalny linker nigdy nie jest wywoływany przez .cargo/config w katalogu projektu – imichaelmiers

+0

Trudno jest debugować .. ładunek nie narzeka na nieprawidłowe ustawienia w pliku konfiguracyjnym, o ile jest to ważne Toml. Co stanie się, jeśli przekażesz linker bezpośrednio do rustc za pomocą '-C linker ='? – kazemakase