1# Copyright Rene Rivera 2016 2# Distributed under the Boost Software License, Version 1.0. 3# (See accompanying file LICENSE_1_0.txt 4# or copy at http://www.boost.org/LICENSE_1_0.txt) 5 6import feature ; 7import os ; 8import toolset ; 9import common ; 10import gcc ; 11import type ; 12 13feature.feature embind : off on : propagated ; 14feature.feature closure : off on full : propagated ; 15feature.feature link-optimization : off on full : propagated ; 16 17rule init ( version ? : command * : options * ) 18{ 19 command = [ common.get-invocation-command emscripten 20 : emcc 21 : $(command) ] ; 22 23 # Determine the version 24 if $(command) 25 { 26 local command-string = \"$(command)\" ; 27 command-string = $(command-string:J=" ") ; 28 version ?= [ MATCH "([0-9.]+)" 29 : [ SHELL "$(command-string) --version" ] ] ; 30 } 31 32 local condition = [ common.check-init-parameters emscripten 33 : version $(version) ] ; 34 35 common.handle-options emscripten : $(condition) : $(command) : $(options) ; 36} 37 38feature.extend toolset : emscripten ; 39 40toolset.inherit-generators emscripten <toolset>emscripten 41 : gcc 42 : gcc.mingw.link gcc.mingw.link.dll gcc.compile.c.pch gcc.compile.c++.pch 43 ; 44toolset.inherit-rules emscripten : gcc ; 45toolset.inherit-flags emscripten : gcc 46 : 47 <optimization>off <optimization>speed <optimization>space 48 <profiling>off <profiling>on 49 <inlining>off <inlining>on <inlining>full 50 <warnings>off <warnings>all <warnings>on 51 <warnings-as-errors>off <warnings-as-errors>on 52 <debug-symbols>off <debug-symbols>on 53 <rtti>off <rtti>on 54 ; 55 56type.set-generated-target-suffix EXE : <toolset>emscripten : "js" ; 57type.set-generated-target-suffix OBJ : <toolset>emscripten : "bc" ; 58type.set-generated-target-suffix STATIC_LIB : <toolset>emscripten : "bc" ; 59 60toolset.flags emscripten.compile OPTIONS <flags> ; 61toolset.flags emscripten.compile OPTIONS <cflags> ; 62toolset.flags emscripten.compile.c++ OPTIONS <cxxflags> ; 63 64toolset.flags emscripten.compile OPTIONS <optimization>off : -O0 ; 65toolset.flags emscripten.compile OPTIONS <optimization>speed : -O3 ; 66toolset.flags emscripten.compile OPTIONS <optimization>space : -Oz ; 67toolset.flags emscripten.link OPTIONS <optimization>off : -O0 ; 68toolset.flags emscripten.link OPTIONS <optimization>speed : -O3 ; 69toolset.flags emscripten.link OPTIONS <optimization>space : -O3 ; 70 71toolset.flags emscripten.compile OPTIONS <profiling>on : --profiling-funcs ; 72 73toolset.flags emscripten.compile OPTIONS <inlining>off : -fno-inline ; 74toolset.flags emscripten.compile OPTIONS <inlining>on : -Wno-inline ; 75toolset.flags emscripten.compile OPTIONS <inlining>full : -Wno-inline ; 76 77toolset.flags emscripten.compile OPTIONS <warnings>off : -w ; 78toolset.flags emscripten.compile OPTIONS <warnings>on : -Wall ; 79toolset.flags emscripten.compile OPTIONS <warnings>all : -Wall -pedantic ; 80toolset.flags emscripten.compile OPTIONS <warnings-as-errors>on : -Werror ; 81 82toolset.flags emscripten OPTIONS <debug-symbols>off : -g0 ; 83toolset.flags emscripten OPTIONS <debug-symbols>on : -g4 -s DEMANGLE_SUPPORT=1 ; 84toolset.flags emscripten OPTIONS <rtti>off : -fno-rtti ; 85 86toolset.flags emscripten.link OPTIONS <embind>on : --bind ; 87toolset.flags emscripten.link OPTIONS <closure>on : --closure 1 ; 88toolset.flags emscripten.link OPTIONS <closure>full : --closure 2 ; 89toolset.flags emscripten.link OPTIONS <link-optimization>off : --llvm-lto 0 ; 90toolset.flags emscripten.link OPTIONS <link-optimization>on : --llvm-lto 1 ; 91toolset.flags emscripten.link OPTIONS <link-optimization>full : --llvm-lto 3 ; 92 93actions compile.c 94{ 95 "$(CONFIG_COMMAND)" -x c $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)" 96} 97 98actions compile.c++ 99{ 100 "$(CONFIG_COMMAND)" -x c++ $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)" 101} 102 103actions archive 104{ 105 "$(CONFIG_COMMAND)" $(AROPTIONS) -o "$(<)" "$(>)" 106} 107 108toolset.flags emscripten.link USER_OPTIONS <linkflags> ; 109 110actions link bind LIBRARIES 111{ 112 "$(CONFIG_COMMAND)" $(USER_OPTIONS) -L"$(LINKPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" $(START-GROUP) $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) 113} 114