I finally managed to compile the needed libraries with emscripten. Here are the steps I followed.
Changes in emscripten
Edit system/include/libcxx/climits
to add the following definitions (see http://github.com/kripken/emscripten/issues/531):
#ifndef CHAR_BIT
# define CHAR_BIT __CHAR_BIT__
#endif
#ifndef CHAR_MIN
# define CHAR_MIN (-128)
#endif
#ifndef CHAR_MAX
# define CHAR_MAX 127
#endif
#ifndef SCHAR_MIN
# define SCHAR_MIN (-128)
#endif
#ifndef SCHAR_MAX
# define SCHAR_MAX 127
#endif
#ifndef UCHAR_MAX
# define UCHAR_MAX 255
#endif
#ifndef SHRT_MIN
# define SHRT_MIN (-32767-1)
#endif
#ifndef SHRT_MAX
# define SHRT_MAX 32767
#endif
#ifndef USHRT_MAX
# define USHRT_MAX 65535
#endif
#ifndef INT_MAX
# define INT_MAX __INT_MAX__
#endif
#ifndef INT_MIN
# define INT_MIN (-INT_MAX-1)
# define INT_MIN (-INT_MAX-1)
#endif
#ifndef UINT_MAX
# define UINT_MAX (INT_MAX * 2U + 1)
#endif
#ifndef LONG_MAX
# define LONG_MAX __LONG_MAX__
#endif
#ifndef LONG_MIN
# define LONG_MIN (-LONG_MAX-1)
#endif
#ifndef ULONG_MAX
# define ULONG_MAX (LONG_MAX * 2UL + 1)
#endif
Add the following line in system/include/libcxx/cwchar
#include <cstdio>
Compiling Boost as shared libraries
As suggested by npclaudiu, bootstrap the library using the gcc toolkit. Then edit project-config.jam
to configure the compiler and replace:
# 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 ;
}
with
# 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/emscripten/em++" ;
}
Force BOOST_HAS_SCHER_YIELD
in boost/config/posix_features.hpp
, around the line 67.
Then compile the libraries: ./b2 thread regex filesystem signals system
Compiling Boost as static libraries
Do all the above steps, then edit tools/build/v2/tools/gcc.jam
and replace:
toolset.flags gcc.archive .AR $(condition) : $(archiver[1]) ;
with
toolset.flags gcc.archive .AR $(condition) : "/full/path/to/emscripten/emar" ;
and
toolset.flags gcc.archive .RANLIB $(condition) : $(ranlib[1]) ;
with
toolset.flags gcc.archive .RANLIB $(condition) :
"/full/path/to/emscripten/emranlib" ;
Compile the libraries: ./b2 link=static variant=release threading=single runtime-link=static thread signals system filesystem regex