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 :
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