Compiler en Wasm un projet de plusieurs sources C++
On compile un ensemble de sources C++ en un seul fichier wasm exécutable localement avec wasmer.
Dans l'article précédent, on a vu comment compiler un simple fichier C++ en Wasm, qui peut s'exécuter ensuite comme tout programme local. Mais comment faire si le projet est composé de plusieurs fichiers sources?
1) Exemple de source à inclure dans un projet
L'exemple est une petite bibliothèque de calculs arithmétique que l'on peut inclure dans plusieurs projets. Ces fonctions sont volontairement simplistes pour que l'on se concentre sur la méthode de compilation et non sur le contenu.
/* Bibliothèque de fonctions */
#include <stdio.h>
int add(int x, int y) {
return x + y;
}
int mul(int x, int y) {
return x * y;
}
int fibonacci(int n) {
if(n < 2) {
return 1;
}
else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
Sauvegardez le programme sous le nom demolib.cpp
Ecrivez aussi un fichier d'en-tête:
int add(int, int);
int mul(int, int);
int fibonacci(int);
Le fichier d'en-tête sera sauvegardé sous le nom de demolib.hpp dans le même répertoire que le source principal..
2) Code source principal
Code source de la démonstration contenant la fonction main, et qui utilise les fonctions de la bibliothèque.
/* Démo */
#include <iostream>
#include "demolib.hpp"
int main() {
int a = add(10, 20);
std::cout << "10 + 20 = " << a << std::endl;
int m = mul(10, 20);
std::cout << "10 x 20 = " << m << std::endl;
std::cout << "Fibonacci(16):" << fibonacci(16) << std::endl;
}
3) Compiler en wasm
Cette fois la commande de compilation contient une liste de plusieurs fichiers à compiler.
emcc demolib.cpp demo.cpp -o demo.wasm
Cela produit le fichier suivant:
demo.wasm
Exécutez le programme avec la commande suivante:
wasmer hello.wasm
Ce qui affichera:
10 + 20 = 30
10 x 20 = 200
Fibonacci(16):1597