2017-07-17 14 views
9

Załóżmy, że mam proste, samodzielne C++ plik (math.cpp) tak:Jak skompilować plik C++ do WebAssembly?

int add(int x, int y) { 
    return x + y; 
} 

Jak bym go skompilować do WebAssembly (math.wasm)?

Uwaga: Używam łańcucha narzędzi Clang.

+1

Powiedz nam, czy potrafisz to zrobić, ponieważ w grę wchodzi wiele etapów i wszystkie one wymagają wiele dużych pobrań i konfiguracji. Zespół internetowy wydaje się naprawdę ekscytujący, ale nie mogę powiedzieć, że jestem zachwycony, gdy liczę cały czas spędzony na próbie i nawet nie posuwaniu się naprzód. Nie jestem już tym podekscytowany. – jokoon

Odpowiedz

8

Znalazłem this gist jako bardzo pomocny.

Zasadniczo, to są kroki:

  1. (budowy LLVM i szczęk 5.0.0 lub powyżej -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly)
  2. zestawiają Soure .cpp do llvm bitcode z brzękiem:

    clang -emit-llvm --target=wasm32 -Oz math.cpp -c -o math.bc

  3. Skompiluj bity do montażu s:

    llc -asm-verbose=false -o math.s math.bc

  4. Zastosowanie binaryen 's narzędzie s2wasm stworzyć .wast plik

    s2wasm math.s > math.wast

  5. Zastosowanie WABT' narzędzie wast2wasm s przetłumaczyć tekstowych .wast plik do binarnego .wasm:

    wast2wasm -o math.wasm math.wast

Niektóre kroki są niepotrzebne, ale nie znalazłem jeszcze narzędzia, które umożliwia stosowanie skrótów. (Byłoby miło, gdyby Llc mógł kompilować bezpośrednio do .wasm, lub jeśli s2wasm faktycznie stworzył binarne pliki .wasm, jak sugeruje nazwa.) W każdym razie, gdy uruchomisz toolchain, jest to stosunkowo bezbolesne. Należy jednak zauważyć, że nie istnieją jeszcze standardowe biblioteki C lub C++ do montażu w Internecie.

Alternatywnie, jeśli potrzebujesz pliku .wasm tylko do wypróbowania rzeczy, możesz uciec bez problemów związanych z toolchain. Przejdź do https://mbebenita.github.io/WasmExplorer/, paste in your C/C++ code i pobierz skompilowany plik .wasm.

+1

Właściwie tak jak w komentarzu w istocie sugerujemy, że możesz pominąć plik binarny i skompilować go bezpośrednio do was z Clang/LLVM. Obecnie używam następującego wiersza poleceń dla C++: 'clang ++ test.cpp -ObjC++ --compile --target = wasm32-unknown-unknown-wasm --optimize = 3 --output test.wasm' – noontz

+0

@noontz Uh, miło .. wygląda na to, że warto przeczytać komentarze do gogli;) Będę edytować to w odpowiedzi, jeśli ktoś może samodzielnie potwierdzić, że to działa (lub po tym, jak udało mi się go wypróbować). – kazemakase

1

Obecnie najprostszym sposobem kompilacji C i C++ jest emscripten. Wymienione komponenty są komponentami, ale emscripten jest pełnym zestawem narzędzi wspierającym tworzenie kompleksowych i zawiera wszystkie potrzebne części, w tym libc/libC++ i wiele innych przydatnych bibliotek. Obsługuje kierowanie zarówno na asm.js, jak i na wasm.

+1

To jest dobra rada w ogóle - o wiele łatwiej jest budować przy użyciu emscriptena - ale nie w ogóle na to pytanie. Emscripten tworzy większy o rząd wielkości plik niż poprzednie kroki –

0

Trochę za późno na tę odpowiedź, ale są piękne narzędzia online do kompilowania skryptów.

Na przykład używam tego. Ten daje ci możliwość minimalizacji kompilacji (C, C++, std99 ...) ale jest wystarczająca: https://wasdk.github.io/WasmFiddle/

W zależności od tego, jak będziesz go używać, możesz wybrać między różnymi językami, takimi jak x86, Buffer kodu.Możesz także udostępnić swój kod, rodzaj funkcji, które uważam za fajne, gdy pracujesz z innym znajomym: https://wasdk.github.io/WasmFiddle/?gus9d :)

Powiązane problemy