WebAssembly.fr

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