Usando Boost com Emscripten

Eu tenho um projeto em c ++ que gostaria de converter em um aplicativo da web. Para este propósito, eu gostaria de usar o Emscripten para construir o projeto.

O projeto usa algumas bibliotecas externas. Eu consegui compilar ou encontrar a versão JavaScript da maioria das bibliotecas e agora estou preso com os do Boost. Na verdade, eu nem sei como começar com o Boost: eles usam um script de boostrap para gerar os arquivos para construir as bibliotecas. É possível passar o conjunto de ferramentas para este script, mas o Emscripten obviamente não é suportado.

Meu projeto usa as seguintes partes do Boost: Thread, Regex, FileSystem, Signals, System. Como posso compilar essas bibliotecas usando o Emscripten?

Editar

Seguindo a resposta do npclaudiu, eu inicializei a biblioteca com o kit de ferramentas gcc, então eu editeiproject-config.jam para configurar o compilador, substituindo:

# Compiler configuration. This definition will be used unless
# you already have defined some toolsets in your user-config.jam
# file.
if ! gcc in [ feature.values <toolset> ]
{
    using gcc ;
}

com

# Compiler configuration. This definition will be used unless
# you already have defined some toolsets in your user-config.jam
# file.
if ! gcc in [ feature.values <toolset> ]
{
    using gcc : : "/full/path/to/em++" ;
}

Agora, digitando./b2 efetivamente constrói as bibliotecas. Boost.Signals e Boost.System compilam bem. Os outros têm alguns erros.

Boost.Thread reclama:

libs/thread/src/pthread/thread.cpp:503:27: error: use of undeclared identifier 'pthread_yield'
        BOOST_VERIFY(!pthread_yield());
                      ^

Boost.Regex reclama muito sobre CHAR_BIT para não ser declarado mas parece ser um problema em emscripten:

In file included from libs/regex/build/../src/c_regex_traits.cpp:28:
In file included from ./boost/regex/v4/c_regex_traits.hpp:26:
In file included from ./boost/regex/v4/regex_workaround.hpp:35:
/path/to/emscripten/system/include/libcxx/vector:1989:92: error: use of undeclared identifier 'CHAR_BIT'
static const unsigned __bits_per_word = static_cast<unsigned>(sizeof(__storage_type) * CHAR_BIT);
                                                                                       ^

Boost.FileSystem parece falhar devido ao emscripten também:

In file included from libs/filesystem/src/windows_file_codecvt.cpp:21:
/path/to/emscripten/system/include/libcxx/cwchar:117:9: error: no member named 'FILE' in the global namespace
using ::FILE;
      ~~^

questionAnswers(4)

yourAnswerToTheQuestion