Installation de Doom compilé avec Clang et Rust exécuté sur WebAssembly

Installation de Doom compilé avec Clang et Rust exécuté sur WebAssembly.

Lien : https://github.com/diekmann/wasm-fizzbuzz/tree/main/doom

Distribution de travail : Lubuntu 18.04 LTS

1/ Installation de Rust.

Lien : https://ubunlog.com/en/rust-programming-language-ubuntu/

  • Installation :
util01@station01:~$ curl https://sh.rustup.rs -sSf | sh
...
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1
...
  • Configuration :
util01@station01:~$ source $HOME/.cargo/env

2/ Installation de Clang.

  • Installation :
util01@station01:~$ sudo apt-get install clang-10
  • Configuration :
util01@station01:~$ sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-10 100
util01@station01:~$ sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-10 100
util01@station01:~$ sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-10 100
util01@station01:~$ sudo update-alternatives --install /usr/bin/llc llc /usr/bin/llc-10 100
  • Vérification :
util01@station66:~$ clang --version
clang version 10.0.0-4ubuntu1~18.04.2 
util01@station66:~$ llc --version
LLVM (http://llvm.org/):
  LLVM version 10.0.0
...
    wasm32     - WebAssembly 32-bit
    wasm64     - WebAssembly 64-bit
...

3/ Création du répertoire de travail.

util01@station01:~$ mkdir -p JEUX/DOOMWASM
util01@station01:~$ cd JEUX/DOOMWASM/
util01@station01:~/JEUX/DOOMWASM$ 

4/ Installation des outils WebAssembly.

  • Téléchargement du code source :
util01@station01:~/JEUX/DOOMWASM$ git clone https://github.com/WebAssembly/binaryen.git
util01@station01:~/JEUX/DOOMWASM$ cd binaryen/
util01@station01:~/JEUX/DOOMWASM/binaryen$ 
  • Configuration :
util01@station01:~/JEUX/DOOMWASM/binaryen$ cmake .
  • Compilation :
util01@station01:~/JEUX/DOOMWASM/binaryen$ make
  • Installation :
util01@station01:~/JEUX/DOOMWASM/binaryen$ sudo make install
util01@station01:~/JEUX/DOOMWASM/binaryen$ cd ..
util01@station01:~/JEUX/DOOMWASM$

5/ Téléchargement du code source de Doom.

util01@station01:~/JEUX/DOOMWASM$ git clone https://github.com/diekmann/wasm-fizzbuzz.git

6/ Compilation.

util01@station01:~/JEUX/DOOMWASM$ cd wasm-fizzbuzz/doom/
util01@station01:~/JEUX/DOOMWASM/wasm-fizzbuzz/doom$
  • Installation de la cible 'wasm32-unknown-unknown' :
util01@station01:~$ rustup target add wasm32-unknown-unknown
  • Compilation :
util01@station01:~/JEUX/DOOMWASM/wasm-fizzbuzz/doom$ make
cargo build --release
   Compiling lazy_static v1.4.0
   Compiling doom v0.1.0 (/home/util01/JEUX/DOOMWASM/wasm-fizzbuzz/doom)
...
    Finished release [optimized] target(s) in 8.61s
# As log as wasm-ld does not look like it supports LTO for C/Rust cross-language LTO, binaryen is the best we have.
# TODO: use https://doc.rust-lang.org/rustc/linker-plugin-lto.html once it works for wasm.
wasm-opt -O3 -o doom.wasm target/wasm32-unknown-unknown/release/doom.wasm

7/ Configuration du type mime 'wasm'.

Ouvrir :

/etc/mime.types

Chercher :

application/vemmi

Ajouter après :

application/wasm wasm

8/ Lancement du serveur Symfony en local.

util01@station66:~/JEUX/DOOMWASM/wasm-fizzbuzz/doom$ make run_wasm
python3 -m http.server --bind 127.0.0.1
Serving HTTP on 127.0.0.1 port 8000 (http://127.0.0.1:8000/) ...
127.0.0.1 - - [18/Jul/2021 02:36:11] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [18/Jul/2021 02:36:11] "GET /main.js HTTP/1.1" 200 -
127.0.0.1 - - [18/Jul/2021 02:36:11] "GET /doom.wasm HTTP/1.1" 200 -
127.0.0.1 - - [18/Jul/2021 02:36:11] code 404, message File not found
127.0.0.1 - - [18/Jul/2021 02:36:11] "GET /favicon.ico HTTP/1.1" 404 -

9/ Lancement de Doom-WAsm.

Sous Firefox :

http://127.0.0.1:8000/

10/ Captures d'écran

11/ Doom-Wasm installé sur un serveur distant

Adresse vers le jeu : https://projet.hacktech.dev/doom-wasm

  • Liste des fichiers à copier :
doom1.wad  doom.wasm  index.html  main.js
  • A partir de la console de développement du navigateur, erreur : Incorrect response MIME type. Expected 'application/wasm'

Liens :

https://community.ovh.com/t/ovh-et-webassembly/25455
https://www.milanlaslop.dev/post/2020-01-03-webassembly-file-sending-correct-content-type/

Solution :

Créer :

.htaccess

Ajouter :

AddType application/wasm .wasm