]> git.proxmox.com Git - rustc.git/blob - src/binaryen/build-js.sh
New upstream version 1.23.0+dfsg1
[rustc.git] / src / binaryen / build-js.sh
1 #
2 # This file builds the js components using emscripten. You normally don't need
3 # to run this, as the builds are bundled in the repo in bin/. Running this is
4 # useful if you are a developer and want to update those builds.
5 #
6 # Usage: build-js.sh
7 # Usage: EMSCRIPTEN=path/to/emscripten build-js.sh # explicit emscripten dir
8 #
9 # Emscripten's em++ and tools/webidl_binder.py will be accessed through the
10 # env var EMSCRIPTEN, e.g. ${EMSCRIPTEN}/em++
11 #
12 # You can get emscripten from
13 # http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html
14 #
15 set -e
16
17 if [ "$1" == "-h" ] || [ "$1" == "--help" ] || [ "$1" == "-help" ]; then
18 echo "usage: $0 [-g]" >&2
19 echo " -g produce debug build" >&2
20 echo ""
21 echo "If EMSCRIPTEN is set in the envionment, emscripten will be loaded"
22 echo "from that directory. Otherwise the location of emscripten is resolved"
23 echo "through PATH."
24 exit 1
25 fi
26
27 if [ -z $EMSCRIPTEN ]; then
28 if (which emcc >/dev/null); then
29 # Found emcc in PATH -- set EMSCRIPTEN (we need this to access webidl_binder.py)
30 EMSCRIPTEN=$(dirname "$(which emcc)")
31 else
32 echo "$0: EMSCRIPTEN environment variable is not set and emcc was not found in PATH" >&2
33 exit 1
34 fi
35 elif [ ! -d "$EMSCRIPTEN" ]; then
36 echo "$0: \"$EMSCRIPTEN\" (\$EMSCRIPTEN) is not a directory" >&2
37 exit 1
38 fi
39
40 EMCC_ARGS="-std=c++11 --memory-init-file 0"
41 EMCC_ARGS="$EMCC_ARGS -s ALLOW_MEMORY_GROWTH=1"
42 EMCC_ARGS="$EMCC_ARGS -s DEMANGLE_SUPPORT=1"
43 EMCC_ARGS="$EMCC_ARGS -s DISABLE_EXCEPTION_CATCHING=0" # Exceptions are thrown and caught when optimizing endless loops
44 OUT_FILE_SUFFIX=
45
46 if [ "$1" == "-g" ]; then
47 EMCC_ARGS="$EMCC_ARGS -O2" # need emcc js opts to be decently fast
48 EMCC_ARGS="$EMCC_ARGS --llvm-opts 0 --llvm-lto 0"
49 EMCC_ARGS="$EMCC_ARGS -profiling"
50 OUT_FILE_SUFFIX=-g
51 else
52 EMCC_ARGS="$EMCC_ARGS -Oz"
53 EMCC_ARGS="$EMCC_ARGS --llvm-lto 1"
54 EMCC_ARGS="$EMCC_ARGS -s ELIMINATE_DUPLICATE_FUNCTIONS=1"
55 # Why these settings?
56 # See https://gist.github.com/rsms/e33c61a25a31c08260161a087be03169
57 fi
58
59 if [ "$1" != "-g" ]; then
60 EMCC_ARGS="$EMCC_ARGS --closure 1"
61 fi
62
63 echo "building shared bitcode"
64
65 "$EMSCRIPTEN/em++" \
66 $EMCC_ARGS \
67 src/asmjs/asm_v_wasm.cpp \
68 src/asmjs/shared-constants.cpp \
69 src/cfg/Relooper.cpp \
70 src/emscripten-optimizer/optimizer-shared.cpp \
71 src/emscripten-optimizer/parser.cpp \
72 src/emscripten-optimizer/simple_ast.cpp \
73 src/ir/ExpressionAnalyzer.cpp \
74 src/ir/ExpressionManipulator.cpp \
75 src/ir/LocalGraph.cpp \
76 src/passes/pass.cpp \
77 src/passes/CoalesceLocals.cpp \
78 src/passes/CodeFolding.cpp \
79 src/passes/CodePushing.cpp \
80 src/passes/ConstHoisting.cpp \
81 src/passes/DeadCodeElimination.cpp \
82 src/passes/DuplicateFunctionElimination.cpp \
83 src/passes/ExtractFunction.cpp \
84 src/passes/Flatten.cpp \
85 src/passes/I64ToI32Lowering.cpp \
86 src/passes/Inlining.cpp \
87 src/passes/InstrumentLocals.cpp \
88 src/passes/InstrumentMemory.cpp \
89 src/passes/LegalizeJSInterface.cpp \
90 src/passes/LocalCSE.cpp \
91 src/passes/LogExecution.cpp \
92 src/passes/MemoryPacking.cpp \
93 src/passes/MergeBlocks.cpp \
94 src/passes/Metrics.cpp \
95 src/passes/NameList.cpp \
96 src/passes/OptimizeInstructions.cpp \
97 src/passes/PickLoadSigns.cpp \
98 src/passes/PostEmscripten.cpp \
99 src/passes/Precompute.cpp \
100 src/passes/Print.cpp \
101 src/passes/PrintCallGraph.cpp \
102 src/passes/RelooperJumpThreading.cpp \
103 src/passes/RemoveImports.cpp \
104 src/passes/RemoveMemory.cpp \
105 src/passes/RemoveUnusedBrs.cpp \
106 src/passes/RemoveUnusedModuleElements.cpp \
107 src/passes/RemoveUnusedNames.cpp \
108 src/passes/ReorderFunctions.cpp \
109 src/passes/ReorderLocals.cpp \
110 src/passes/ReReloop.cpp \
111 src/passes/SafeHeap.cpp \
112 src/passes/SimplifyLocals.cpp \
113 src/passes/SSAify.cpp \
114 src/passes/TrapMode.cpp \
115 src/passes/Untee.cpp \
116 src/passes/Vacuum.cpp \
117 src/support/bits.cpp \
118 src/support/colors.cpp \
119 src/support/safe_integer.cpp \
120 src/support/threads.cpp \
121 src/wasm/literal.cpp \
122 src/wasm/wasm-binary.cpp \
123 src/wasm/wasm-s-parser.cpp \
124 src/wasm/wasm-type.cpp \
125 src/wasm/wasm-validator.cpp \
126 src/wasm/wasm.cpp \
127 src/wasm-emscripten.cpp \
128 -Isrc/ \
129 -o shared.bc
130
131 echo "building wasm.js"
132
133 "$EMSCRIPTEN/em++" \
134 $EMCC_ARGS \
135 src/wasm-js.cpp \
136 shared.bc \
137 -Isrc/ \
138 -o bin/wasm${OUT_FILE_SUFFIX}.js \
139 -s MODULARIZE=1 \
140 -s 'EXPORT_NAME="WasmJS"'
141
142 echo "building binaryen.js"
143
144 function export_function { if [ -z ${EXPORTED_FUNCTIONS} ]; then EXPORTED_FUNCTIONS='"'$1'"'; else EXPORTED_FUNCTIONS=${EXPORTED_FUNCTIONS}',"'$1'"'; fi }
145 export_function "_BinaryenNone"
146 export_function "_BinaryenInt32"
147 export_function "_BinaryenInt64"
148 export_function "_BinaryenFloat32"
149 export_function "_BinaryenFloat64"
150 export_function "_BinaryenUndefined"
151 export_function "_BinaryenInvalidId"
152 export_function "_BinaryenBlockId"
153 export_function "_BinaryenIfId"
154 export_function "_BinaryenLoopId"
155 export_function "_BinaryenBreakId"
156 export_function "_BinaryenSwitchId"
157 export_function "_BinaryenCallId"
158 export_function "_BinaryenCallImportId"
159 export_function "_BinaryenCallIndirectId"
160 export_function "_BinaryenGetLocalId"
161 export_function "_BinaryenSetLocalId"
162 export_function "_BinaryenGetGlobalId"
163 export_function "_BinaryenSetGlobalId"
164 export_function "_BinaryenLoadId"
165 export_function "_BinaryenStoreId"
166 export_function "_BinaryenConstId"
167 export_function "_BinaryenUnaryId"
168 export_function "_BinaryenBinaryId"
169 export_function "_BinaryenSelectId"
170 export_function "_BinaryenDropId"
171 export_function "_BinaryenReturnId"
172 export_function "_BinaryenHostId"
173 export_function "_BinaryenNopId"
174 export_function "_BinaryenUnreachableId"
175 export_function "_BinaryenAtomicCmpxchgId"
176 export_function "_BinaryenAtomicRMWId"
177 export_function "_BinaryenAtomicWaitId"
178 export_function "_BinaryenAtomicWakeId"
179 export_function "_BinaryenModuleCreate"
180 export_function "_BinaryenModuleDispose"
181 export_function "_BinaryenAddFunctionType"
182 export_function "_BinaryenGetFunctionTypeBySignature"
183 export_function "_BinaryenLiteralInt32"
184 export_function "_BinaryenLiteralInt64"
185 export_function "_BinaryenLiteralFloat32"
186 export_function "_BinaryenLiteralFloat64"
187 export_function "_BinaryenLiteralFloat32Bits"
188 export_function "_BinaryenLiteralFloat64Bits"
189 export_function "_BinaryenClzInt32"
190 export_function "_BinaryenCtzInt32"
191 export_function "_BinaryenPopcntInt32"
192 export_function "_BinaryenNegFloat32"
193 export_function "_BinaryenAbsFloat32"
194 export_function "_BinaryenCeilFloat32"
195 export_function "_BinaryenFloorFloat32"
196 export_function "_BinaryenTruncFloat32"
197 export_function "_BinaryenNearestFloat32"
198 export_function "_BinaryenSqrtFloat32"
199 export_function "_BinaryenEqZInt32"
200 export_function "_BinaryenClzInt64"
201 export_function "_BinaryenCtzInt64"
202 export_function "_BinaryenPopcntInt64"
203 export_function "_BinaryenNegFloat64"
204 export_function "_BinaryenAbsFloat64"
205 export_function "_BinaryenCeilFloat64"
206 export_function "_BinaryenFloorFloat64"
207 export_function "_BinaryenTruncFloat64"
208 export_function "_BinaryenNearestFloat64"
209 export_function "_BinaryenSqrtFloat64"
210 export_function "_BinaryenEqZInt64"
211 export_function "_BinaryenExtendSInt32"
212 export_function "_BinaryenExtendUInt32"
213 export_function "_BinaryenWrapInt64"
214 export_function "_BinaryenTruncSFloat32ToInt32"
215 export_function "_BinaryenTruncSFloat32ToInt64"
216 export_function "_BinaryenTruncUFloat32ToInt32"
217 export_function "_BinaryenTruncUFloat32ToInt64"
218 export_function "_BinaryenTruncSFloat64ToInt32"
219 export_function "_BinaryenTruncSFloat64ToInt64"
220 export_function "_BinaryenTruncUFloat64ToInt32"
221 export_function "_BinaryenTruncUFloat64ToInt64"
222 export_function "_BinaryenReinterpretFloat32"
223 export_function "_BinaryenReinterpretFloat64"
224 export_function "_BinaryenConvertSInt32ToFloat32"
225 export_function "_BinaryenConvertSInt32ToFloat64"
226 export_function "_BinaryenConvertUInt32ToFloat32"
227 export_function "_BinaryenConvertUInt32ToFloat64"
228 export_function "_BinaryenConvertSInt64ToFloat32"
229 export_function "_BinaryenConvertSInt64ToFloat64"
230 export_function "_BinaryenConvertUInt64ToFloat32"
231 export_function "_BinaryenConvertUInt64ToFloat64"
232 export_function "_BinaryenPromoteFloat32"
233 export_function "_BinaryenDemoteFloat64"
234 export_function "_BinaryenReinterpretInt32"
235 export_function "_BinaryenReinterpretInt64"
236 export_function "_BinaryenAddInt32"
237 export_function "_BinaryenSubInt32"
238 export_function "_BinaryenMulInt32"
239 export_function "_BinaryenDivSInt32"
240 export_function "_BinaryenDivUInt32"
241 export_function "_BinaryenRemSInt32"
242 export_function "_BinaryenRemUInt32"
243 export_function "_BinaryenAndInt32"
244 export_function "_BinaryenOrInt32"
245 export_function "_BinaryenXorInt32"
246 export_function "_BinaryenShlInt32"
247 export_function "_BinaryenShrUInt32"
248 export_function "_BinaryenShrSInt32"
249 export_function "_BinaryenRotLInt32"
250 export_function "_BinaryenRotRInt32"
251 export_function "_BinaryenEqInt32"
252 export_function "_BinaryenNeInt32"
253 export_function "_BinaryenLtSInt32"
254 export_function "_BinaryenLtUInt32"
255 export_function "_BinaryenLeSInt32"
256 export_function "_BinaryenLeUInt32"
257 export_function "_BinaryenGtSInt32"
258 export_function "_BinaryenGtUInt32"
259 export_function "_BinaryenGeSInt32"
260 export_function "_BinaryenGeUInt32"
261 export_function "_BinaryenAddInt64"
262 export_function "_BinaryenSubInt64"
263 export_function "_BinaryenMulInt64"
264 export_function "_BinaryenDivSInt64"
265 export_function "_BinaryenDivUInt64"
266 export_function "_BinaryenRemSInt64"
267 export_function "_BinaryenRemUInt64"
268 export_function "_BinaryenAndInt64"
269 export_function "_BinaryenOrInt64"
270 export_function "_BinaryenXorInt64"
271 export_function "_BinaryenShlInt64"
272 export_function "_BinaryenShrUInt64"
273 export_function "_BinaryenShrSInt64"
274 export_function "_BinaryenRotLInt64"
275 export_function "_BinaryenRotRInt64"
276 export_function "_BinaryenEqInt64"
277 export_function "_BinaryenNeInt64"
278 export_function "_BinaryenLtSInt64"
279 export_function "_BinaryenLtUInt64"
280 export_function "_BinaryenLeSInt64"
281 export_function "_BinaryenLeUInt64"
282 export_function "_BinaryenGtSInt64"
283 export_function "_BinaryenGtUInt64"
284 export_function "_BinaryenGeSInt64"
285 export_function "_BinaryenGeUInt64"
286 export_function "_BinaryenAddFloat32"
287 export_function "_BinaryenSubFloat32"
288 export_function "_BinaryenMulFloat32"
289 export_function "_BinaryenDivFloat32"
290 export_function "_BinaryenCopySignFloat32"
291 export_function "_BinaryenMinFloat32"
292 export_function "_BinaryenMaxFloat32"
293 export_function "_BinaryenEqFloat32"
294 export_function "_BinaryenNeFloat32"
295 export_function "_BinaryenLtFloat32"
296 export_function "_BinaryenLeFloat32"
297 export_function "_BinaryenGtFloat32"
298 export_function "_BinaryenGeFloat32"
299 export_function "_BinaryenAddFloat64"
300 export_function "_BinaryenSubFloat64"
301 export_function "_BinaryenMulFloat64"
302 export_function "_BinaryenDivFloat64"
303 export_function "_BinaryenCopySignFloat64"
304 export_function "_BinaryenMinFloat64"
305 export_function "_BinaryenMaxFloat64"
306 export_function "_BinaryenEqFloat64"
307 export_function "_BinaryenNeFloat64"
308 export_function "_BinaryenLtFloat64"
309 export_function "_BinaryenLeFloat64"
310 export_function "_BinaryenGtFloat64"
311 export_function "_BinaryenGeFloat64"
312 export_function "_BinaryenPageSize"
313 export_function "_BinaryenCurrentMemory"
314 export_function "_BinaryenGrowMemory"
315 export_function "_BinaryenHasFeature"
316 export_function "_BinaryenAtomicRMWAdd"
317 export_function "_BinaryenAtomicRMWSub"
318 export_function "_BinaryenAtomicRMWAnd"
319 export_function "_BinaryenAtomicRMWOr"
320 export_function "_BinaryenAtomicRMWXor"
321 export_function "_BinaryenAtomicRMWXchg"
322 export_function "_BinaryenBlock"
323 export_function "_BinaryenIf"
324 export_function "_BinaryenLoop"
325 export_function "_BinaryenBreak"
326 export_function "_BinaryenSwitch"
327 export_function "_BinaryenCall"
328 export_function "_BinaryenCallImport"
329 export_function "_BinaryenCallIndirect"
330 export_function "_BinaryenGetLocal"
331 export_function "_BinaryenSetLocal"
332 export_function "_BinaryenTeeLocal"
333 export_function "_BinaryenGetGlobal"
334 export_function "_BinaryenSetGlobal"
335 export_function "_BinaryenLoad"
336 export_function "_BinaryenStore"
337 export_function "_BinaryenConst"
338 export_function "_BinaryenUnary"
339 export_function "_BinaryenBinary"
340 export_function "_BinaryenSelect"
341 export_function "_BinaryenDrop"
342 export_function "_BinaryenReturn"
343 export_function "_BinaryenHost"
344 export_function "_BinaryenNop"
345 export_function "_BinaryenUnreachable"
346 export_function "_BinaryenAtomicRMW"
347 export_function "_BinaryenAtomicCmpxchg"
348 export_function "_BinaryenAtomicWait"
349 export_function "_BinaryenAtomicWake"
350 export_function "_BinaryenExpressionGetId"
351 export_function "_BinaryenExpressionGetType"
352 export_function "_BinaryenExpressionPrint"
353 export_function "_BinaryenConstGetValueI32"
354 export_function "_BinaryenConstGetValueI64Low"
355 export_function "_BinaryenConstGetValueI64High"
356 export_function "_BinaryenConstGetValueF32"
357 export_function "_BinaryenConstGetValueF64"
358 export_function "_BinaryenAddFunction"
359 export_function "_BinaryenAddGlobal"
360 export_function "_BinaryenAddImport"
361 export_function "_BinaryenRemoveImport"
362 export_function "_BinaryenAddExport"
363 export_function "_BinaryenRemoveExport"
364 export_function "_BinaryenSetFunctionTable"
365 export_function "_BinaryenSetMemory"
366 export_function "_BinaryenSetStart"
367 export_function "_BinaryenModuleParse"
368 export_function "_BinaryenModulePrint"
369 export_function "_BinaryenModulePrintAsmjs"
370 export_function "_BinaryenModuleValidate"
371 export_function "_BinaryenModuleOptimize"
372 export_function "_BinaryenModuleRunPasses"
373 export_function "_BinaryenModuleAutoDrop"
374 export_function "_BinaryenModuleWrite"
375 export_function "_BinaryenModuleRead"
376 export_function "_BinaryenModuleInterpret"
377 export_function "_RelooperCreate"
378 export_function "_RelooperAddBlock"
379 export_function "_RelooperAddBranch"
380 export_function "_RelooperAddBlockWithSwitch"
381 export_function "_RelooperAddBranchForSwitch"
382 export_function "_RelooperRenderAndDispose"
383 export_function "_BinaryenSetAPITracing"
384
385 "$EMSCRIPTEN/em++" \
386 $EMCC_ARGS \
387 src/binaryen-c.cpp \
388 shared.bc \
389 -Isrc/ \
390 -s EXPORTED_FUNCTIONS=[${EXPORTED_FUNCTIONS}] \
391 -o bin/binaryen${OUT_FILE_SUFFIX}.js \
392 --pre-js src/js/binaryen.js-pre.js \
393 --post-js src/js/binaryen.js-post.js