From f41bdae36861baa8be541af8273adc5b4b94ec48 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Wed, 19 Jun 2019 21:56:00 +0300 Subject: Add basic Webassembly support via Emscripten. --- mesonbuild/compilers/cpp.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'mesonbuild/compilers/cpp.py') diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py index 6ae2673..5808b2e 100644 --- a/mesonbuild/compilers/cpp.py +++ b/mesonbuild/compilers/cpp.py @@ -131,7 +131,7 @@ class CPPCompiler(CLikeCompiler, Compiler): } # Currently, remapping is only supported for Clang, Elbrus and GCC - assert(self.id in frozenset(['clang', 'lcc', 'gcc'])) + assert(self.id in frozenset(['clang', 'lcc', 'gcc', 'emscripten'])) if cpp_std not in CPP_FALLBACKS: # 'c++03' and 'c++98' don't have fallback types @@ -183,6 +183,39 @@ class ClangCPPCompiler(ClangCompiler, CPPCompiler): return ['-lstdc++'] +class EmscriptenCPPCompiler(ClangCPPCompiler): + def __init__(self, exelist, version, compiler_type, for_machine: MachineChoice, is_cross, exe_wrapper=None, **kwargs): + if not is_cross: + raise MesonException('Emscripten compiler can only be used for cross compilation.') + ClangCPPCompiler.__init__(self, exelist, version, compiler_type, for_machine, is_cross, exe_wrapper, **kwargs) + self.id = 'emscripten' + + def get_option_compile_args(self, options): + args = [] + std = options['cpp_std'] + if std.value != 'none': + args.append(self._find_best_cpp_std(std.value)) + return args + + def get_option_link_args(self, options): + return [] + + def get_linker_always_args(self): + return [] + + def get_asneeded_args(self): + return [] + + def get_lundef_args(self): + return [] + + def build_rpath_args(self, *args, **kwargs): + return [] + + def get_soname_args(self, *args, **kwargs): + raise MesonException('Emscripten does not support shared libraries.') + + class ArmclangCPPCompiler(ArmclangCompiler, CPPCompiler): def __init__(self, exelist, version, compiler_type, for_machine: MachineChoice, is_cross, exe_wrapper=None, **kwargs): CPPCompiler.__init__(self, exelist, version, for_machine, is_cross, exe_wrapper, **kwargs) -- cgit v1.1