webruby 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1364) hide show
  1. checksums.yaml +7 -0
  2. data/bin/webruby +36 -0
  3. data/driver/driver.c +50 -0
  4. data/driver/main.c +40 -0
  5. data/lib/webruby/app.rb +13 -0
  6. data/lib/webruby/config.rb +61 -0
  7. data/lib/webruby/environment.rb +32 -0
  8. data/lib/webruby/rake/files.rake +66 -0
  9. data/lib/webruby/rake/general.rake +22 -0
  10. data/lib/webruby/rake/mruby.rake +44 -0
  11. data/lib/webruby/utility.rb +132 -0
  12. data/lib/webruby.rb +10 -0
  13. data/modules/emscripten/AUTHORS +89 -0
  14. data/modules/emscripten/LICENSE +68 -0
  15. data/modules/emscripten/README.markdown +14 -0
  16. data/modules/emscripten/cmake/Platform/Emscripten.cmake +61 -0
  17. data/modules/emscripten/cmake/Platform/Emscripten_unix.cmake +24 -0
  18. data/modules/emscripten/em++ +12 -0
  19. data/modules/emscripten/em++.bat +2 -0
  20. data/modules/emscripten/em-config +24 -0
  21. data/modules/emscripten/em-config.bat +2 -0
  22. data/modules/emscripten/emar +24 -0
  23. data/modules/emscripten/emar.bat +2 -0
  24. data/modules/emscripten/emcc +1744 -0
  25. data/modules/emscripten/emcc.bat +2 -0
  26. data/modules/emscripten/emcc.py +5 -0
  27. data/modules/emscripten/emconfigure +27 -0
  28. data/modules/emscripten/emconfigure.bat +2 -0
  29. data/modules/emscripten/emlibtool +11 -0
  30. data/modules/emscripten/emlibtool.bat +2 -0
  31. data/modules/emscripten/emlink.py +293 -0
  32. data/modules/emscripten/emmake +29 -0
  33. data/modules/emscripten/emmake.bat +2 -0
  34. data/modules/emscripten/emranlib +9 -0
  35. data/modules/emscripten/emranlib.bat +2 -0
  36. data/modules/emscripten/emscons +20 -0
  37. data/modules/emscripten/emscripten.py +835 -0
  38. data/modules/emscripten/patches/README +4 -0
  39. data/modules/emscripten/patches/series +2 -0
  40. data/modules/emscripten/scons-tools/closure.py +28 -0
  41. data/modules/emscripten/scons-tools/emscripten.py +359 -0
  42. data/modules/emscripten/scons-tools/llvm.py +33 -0
  43. data/modules/emscripten/src/analyzer.js +1695 -0
  44. data/modules/emscripten/src/compiler.html +48 -0
  45. data/modules/emscripten/src/compiler.js +298 -0
  46. data/modules/emscripten/src/corruptionCheck.js +98 -0
  47. data/modules/emscripten/src/determinstic.js +20 -0
  48. data/modules/emscripten/src/embind/embind.js +1677 -0
  49. data/modules/emscripten/src/embind/emval.js +283 -0
  50. data/modules/emscripten/src/experimental/allow_loopvars_from_memsetcpy_inasm.diff +97 -0
  51. data/modules/emscripten/src/experimental/batching.diff +44 -0
  52. data/modules/emscripten/src/experimental/functypeopt.diff +113 -0
  53. data/modules/emscripten/src/experimental/multiple_heaps.diff +175 -0
  54. data/modules/emscripten/src/experimental/noncallgraphprofiling.diff +197 -0
  55. data/modules/emscripten/src/experimental/optimize_memcpy_for_ta1.diff +124 -0
  56. data/modules/emscripten/src/experimental/remove__label__s.diff +140 -0
  57. data/modules/emscripten/src/experimental/renderer_cache_hash.diff +99 -0
  58. data/modules/emscripten/src/experimental/sdl_key_forwarding.diff +57 -0
  59. data/modules/emscripten/src/experimental/simplifyGeneratedFunctionsDetection.diff +336 -0
  60. data/modules/emscripten/src/experimental/stringCache.diff +147 -0
  61. data/modules/emscripten/src/fastLong.js +299 -0
  62. data/modules/emscripten/src/framework.js +257 -0
  63. data/modules/emscripten/src/gl-matrix.js +1952 -0
  64. data/modules/emscripten/src/headless.js +904 -0
  65. data/modules/emscripten/src/intertyper.js +1050 -0
  66. data/modules/emscripten/src/jsifier.js +1827 -0
  67. data/modules/emscripten/src/library.js +8270 -0
  68. data/modules/emscripten/src/library_browser.js +911 -0
  69. data/modules/emscripten/src/library_egl.js +491 -0
  70. data/modules/emscripten/src/library_gc.js +236 -0
  71. data/modules/emscripten/src/library_gl.js +4452 -0
  72. data/modules/emscripten/src/library_glfw.js +576 -0
  73. data/modules/emscripten/src/library_glut.js +449 -0
  74. data/modules/emscripten/src/library_jansson.js +320 -0
  75. data/modules/emscripten/src/library_openal.js +602 -0
  76. data/modules/emscripten/src/library_sdl.js +2024 -0
  77. data/modules/emscripten/src/library_strtok_r.c +97 -0
  78. data/modules/emscripten/src/library_xlib.js +23 -0
  79. data/modules/emscripten/src/long.js +1609 -0
  80. data/modules/emscripten/src/modules.js +491 -0
  81. data/modules/emscripten/src/parseTools.js +2474 -0
  82. data/modules/emscripten/src/postamble.js +170 -0
  83. data/modules/emscripten/src/postamble_sharedlib.js +16 -0
  84. data/modules/emscripten/src/preamble.js +914 -0
  85. data/modules/emscripten/src/preamble_sharedlib.js +25 -0
  86. data/modules/emscripten/src/relooper/README.markdown +14 -0
  87. data/modules/emscripten/src/relooper/Relooper.cpp +1236 -0
  88. data/modules/emscripten/src/relooper/Relooper.h +250 -0
  89. data/modules/emscripten/src/relooper/doit.sh +70 -0
  90. data/modules/emscripten/src/relooper/emscripten/glue.js +57 -0
  91. data/modules/emscripten/src/relooper/emscripten/test.js +44 -0
  92. data/modules/emscripten/src/relooper/fuzzer.py +116 -0
  93. data/modules/emscripten/src/relooper/ministring.h +35 -0
  94. data/modules/emscripten/src/relooper/paper.pdf +0 -0
  95. data/modules/emscripten/src/relooper/test.cpp +262 -0
  96. data/modules/emscripten/src/relooper/test.txt +155 -0
  97. data/modules/emscripten/src/relooper/test2.c +44 -0
  98. data/modules/emscripten/src/relooper/test2.txt +12 -0
  99. data/modules/emscripten/src/relooper/test3.c +42 -0
  100. data/modules/emscripten/src/relooper/test3.txt +27 -0
  101. data/modules/emscripten/src/relooper/test4.cpp +40 -0
  102. data/modules/emscripten/src/relooper/test4.txt +23 -0
  103. data/modules/emscripten/src/relooper/test5.cpp +40 -0
  104. data/modules/emscripten/src/relooper/test5.txt +32 -0
  105. data/modules/emscripten/src/relooper/test6.cpp +31 -0
  106. data/modules/emscripten/src/relooper/test6.txt +12 -0
  107. data/modules/emscripten/src/relooper/test_dead.cpp +28 -0
  108. data/modules/emscripten/src/relooper/test_dead.txt +9 -0
  109. data/modules/emscripten/src/relooper/test_debug.cpp +30 -0
  110. data/modules/emscripten/src/relooper/test_debug.txt +128 -0
  111. data/modules/emscripten/src/relooper/test_fuzz1.cpp +52 -0
  112. data/modules/emscripten/src/relooper/test_fuzz1.txt +32 -0
  113. data/modules/emscripten/src/relooper/test_fuzz2.cpp +34 -0
  114. data/modules/emscripten/src/relooper/test_fuzz2.txt +13 -0
  115. data/modules/emscripten/src/relooper/test_fuzz3.cpp +36 -0
  116. data/modules/emscripten/src/relooper/test_fuzz3.txt +9 -0
  117. data/modules/emscripten/src/relooper/test_fuzz4.cpp +38 -0
  118. data/modules/emscripten/src/relooper/test_fuzz4.txt +19 -0
  119. data/modules/emscripten/src/relooper/test_fuzz5.cpp +57 -0
  120. data/modules/emscripten/src/relooper/test_fuzz5.txt +52 -0
  121. data/modules/emscripten/src/relooper/test_fuzz6.cpp +322 -0
  122. data/modules/emscripten/src/relooper/test_fuzz6.txt +108 -0
  123. data/modules/emscripten/src/relooper/test_inf.cpp +813 -0
  124. data/modules/emscripten/src/relooper/test_inf.txt +385 -0
  125. data/modules/emscripten/src/relooper/testit.sh +62 -0
  126. data/modules/emscripten/src/relooper/updateit.sh +17 -0
  127. data/modules/emscripten/src/relooper.js +11516 -0
  128. data/modules/emscripten/src/relooper.js.raw.js +11511 -0
  129. data/modules/emscripten/src/runtime.js +546 -0
  130. data/modules/emscripten/src/settings.js +1284 -0
  131. data/modules/emscripten/src/shell.html +92 -0
  132. data/modules/emscripten/src/shell.js +153 -0
  133. data/modules/emscripten/src/shell_sharedlib.js +12 -0
  134. data/modules/emscripten/src/socket.io.js +3870 -0
  135. data/modules/emscripten/src/utility.js +379 -0
  136. data/modules/emscripten/src/wrtcp.js +821 -0
  137. data/modules/emscripten/system/include/AL/al.h +172 -0
  138. data/modules/emscripten/system/include/AL/alc.h +84 -0
  139. data/modules/emscripten/system/include/EGL/egl.h +329 -0
  140. data/modules/emscripten/system/include/EGL/eglext.h +398 -0
  141. data/modules/emscripten/system/include/EGL/eglplatform.h +141 -0
  142. data/modules/emscripten/system/include/GL/freeglut_std.h +628 -0
  143. data/modules/emscripten/system/include/GL/gl.h +2241 -0
  144. data/modules/emscripten/system/include/GL/glew.h +6 -0
  145. data/modules/emscripten/system/include/GL/glext.h +11127 -0
  146. data/modules/emscripten/system/include/GL/glfw.h +518 -0
  147. data/modules/emscripten/system/include/GL/glu.h +353 -0
  148. data/modules/emscripten/system/include/GL/glut.h +21 -0
  149. data/modules/emscripten/system/include/GLES/gl.h +770 -0
  150. data/modules/emscripten/system/include/GLES/glext.h +1278 -0
  151. data/modules/emscripten/system/include/GLES/glplatform.h +30 -0
  152. data/modules/emscripten/system/include/GLES2/gl2.h +621 -0
  153. data/modules/emscripten/system/include/GLES2/gl2ext.h +803 -0
  154. data/modules/emscripten/system/include/GLES2/gl2platform.h +30 -0
  155. data/modules/emscripten/system/include/KHR/khrplatform.h +277 -0
  156. data/modules/emscripten/system/include/SDL/COPYING +19 -0
  157. data/modules/emscripten/system/include/SDL/SDL.h +162 -0
  158. data/modules/emscripten/system/include/SDL/SDL_assert.h +241 -0
  159. data/modules/emscripten/system/include/SDL/SDL_atomic.h +318 -0
  160. data/modules/emscripten/system/include/SDL/SDL_audio.h +509 -0
  161. data/modules/emscripten/system/include/SDL/SDL_blendmode.h +60 -0
  162. data/modules/emscripten/system/include/SDL/SDL_clipboard.h +75 -0
  163. data/modules/emscripten/system/include/SDL/SDL_compat.h +365 -0
  164. data/modules/emscripten/system/include/SDL/SDL_config.h +48 -0
  165. data/modules/emscripten/system/include/SDL/SDL_config.h.in +297 -0
  166. data/modules/emscripten/system/include/SDL/SDL_config_android.h +133 -0
  167. data/modules/emscripten/system/include/SDL/SDL_config_iphoneos.h +148 -0
  168. data/modules/emscripten/system/include/SDL/SDL_config_macosx.h +172 -0
  169. data/modules/emscripten/system/include/SDL/SDL_config_minimal.h +74 -0
  170. data/modules/emscripten/system/include/SDL/SDL_config_nintendods.h +129 -0
  171. data/modules/emscripten/system/include/SDL/SDL_config_pandora.h +125 -0
  172. data/modules/emscripten/system/include/SDL/SDL_config_windows.h +207 -0
  173. data/modules/emscripten/system/include/SDL/SDL_config_wiz.h +119 -0
  174. data/modules/emscripten/system/include/SDL/SDL_copying.h +20 -0
  175. data/modules/emscripten/system/include/SDL/SDL_cpuinfo.h +150 -0
  176. data/modules/emscripten/system/include/SDL/SDL_endian.h +248 -0
  177. data/modules/emscripten/system/include/SDL/SDL_error.h +77 -0
  178. data/modules/emscripten/system/include/SDL/SDL_events.h +639 -0
  179. data/modules/emscripten/system/include/SDL/SDL_gesture.h +91 -0
  180. data/modules/emscripten/system/include/SDL/SDL_gfxPrimitives.h +246 -0
  181. data/modules/emscripten/system/include/SDL/SDL_haptic.h +1200 -0
  182. data/modules/emscripten/system/include/SDL/SDL_hints.h +206 -0
  183. data/modules/emscripten/system/include/SDL/SDL_image.h +138 -0
  184. data/modules/emscripten/system/include/SDL/SDL_input.h +87 -0
  185. data/modules/emscripten/system/include/SDL/SDL_joystick.h +208 -0
  186. data/modules/emscripten/system/include/SDL/SDL_keyboard.h +169 -0
  187. data/modules/emscripten/system/include/SDL/SDL_keycode.h +344 -0
  188. data/modules/emscripten/system/include/SDL/SDL_loadso.h +85 -0
  189. data/modules/emscripten/system/include/SDL/SDL_log.h +211 -0
  190. data/modules/emscripten/system/include/SDL/SDL_main.h +98 -0
  191. data/modules/emscripten/system/include/SDL/SDL_mixer.h +634 -0
  192. data/modules/emscripten/system/include/SDL/SDL_mouse.h +213 -0
  193. data/modules/emscripten/system/include/SDL/SDL_mutex.h +248 -0
  194. data/modules/emscripten/system/include/SDL/SDL_name.h +11 -0
  195. data/modules/emscripten/system/include/SDL/SDL_opengl.h +11116 -0
  196. data/modules/emscripten/system/include/SDL/SDL_opengles.h +38 -0
  197. data/modules/emscripten/system/include/SDL/SDL_opengles2.h +38 -0
  198. data/modules/emscripten/system/include/SDL/SDL_pixels.h +423 -0
  199. data/modules/emscripten/system/include/SDL/SDL_platform.h +160 -0
  200. data/modules/emscripten/system/include/SDL/SDL_power.h +79 -0
  201. data/modules/emscripten/system/include/SDL/SDL_quit.h +58 -0
  202. data/modules/emscripten/system/include/SDL/SDL_rect.h +136 -0
  203. data/modules/emscripten/system/include/SDL/SDL_render.h +615 -0
  204. data/modules/emscripten/system/include/SDL/SDL_revision.h +2 -0
  205. data/modules/emscripten/system/include/SDL/SDL_revision.h.orig +2 -0
  206. data/modules/emscripten/system/include/SDL/SDL_rotozoom.h +123 -0
  207. data/modules/emscripten/system/include/SDL/SDL_rwops.h +220 -0
  208. data/modules/emscripten/system/include/SDL/SDL_scancode.h +398 -0
  209. data/modules/emscripten/system/include/SDL/SDL_shape.h +147 -0
  210. data/modules/emscripten/system/include/SDL/SDL_stdinc.h +764 -0
  211. data/modules/emscripten/system/include/SDL/SDL_surface.h +499 -0
  212. data/modules/emscripten/system/include/SDL/SDL_syswm.h +241 -0
  213. data/modules/emscripten/system/include/SDL/SDL_thread.h +182 -0
  214. data/modules/emscripten/system/include/SDL/SDL_timer.h +108 -0
  215. data/modules/emscripten/system/include/SDL/SDL_touch.h +124 -0
  216. data/modules/emscripten/system/include/SDL/SDL_ttf.h +249 -0
  217. data/modules/emscripten/system/include/SDL/SDL_types.h +29 -0
  218. data/modules/emscripten/system/include/SDL/SDL_version.h +166 -0
  219. data/modules/emscripten/system/include/SDL/SDL_video.h +820 -0
  220. data/modules/emscripten/system/include/SDL/begin_code.h +135 -0
  221. data/modules/emscripten/system/include/SDL/close_code.h +37 -0
  222. data/modules/emscripten/system/include/X11/X.h +717 -0
  223. data/modules/emscripten/system/include/X11/Xatom.h +79 -0
  224. data/modules/emscripten/system/include/X11/Xfuncproto.h +127 -0
  225. data/modules/emscripten/system/include/X11/Xlib.h +4023 -0
  226. data/modules/emscripten/system/include/X11/Xosdefs.h +116 -0
  227. data/modules/emscripten/system/include/X11/Xutil.h +826 -0
  228. data/modules/emscripten/system/include/X11/keysym.h +73 -0
  229. data/modules/emscripten/system/include/X11/keysymdef.h +2389 -0
  230. data/modules/emscripten/system/include/bsd/float.h +91 -0
  231. data/modules/emscripten/system/include/bsd/readme.txt +2 -0
  232. data/modules/emscripten/system/include/bsd/sys/mman.h +180 -0
  233. data/modules/emscripten/system/include/bsd/sys/utsname.h +70 -0
  234. data/modules/emscripten/system/include/dlfcn.h +31 -0
  235. data/modules/emscripten/system/include/emscripten/bind.h +1210 -0
  236. data/modules/emscripten/system/include/emscripten/emscripten.h +388 -0
  237. data/modules/emscripten/system/include/emscripten/val.h +311 -0
  238. data/modules/emscripten/system/include/emscripten/wire.h +393 -0
  239. data/modules/emscripten/system/include/err.h +95 -0
  240. data/modules/emscripten/system/include/execinfo.h +44 -0
  241. data/modules/emscripten/system/include/features.h +3 -0
  242. data/modules/emscripten/system/include/gc.h +70 -0
  243. data/modules/emscripten/system/include/gfx/png.h +3798 -0
  244. data/modules/emscripten/system/include/gfx/pngconf.h +1665 -0
  245. data/modules/emscripten/system/include/gfx/tiff.h +654 -0
  246. data/modules/emscripten/system/include/gfx/tiffconf.h +104 -0
  247. data/modules/emscripten/system/include/gfx/tiffio.h +526 -0
  248. data/modules/emscripten/system/include/gfx/tiffvers.h +9 -0
  249. data/modules/emscripten/system/include/jansson.h +323 -0
  250. data/modules/emscripten/system/include/jansson_config.h +54 -0
  251. data/modules/emscripten/system/include/libc/_ansi.h +135 -0
  252. data/modules/emscripten/system/include/libc/_syslist.h +40 -0
  253. data/modules/emscripten/system/include/libc/alloca.h +21 -0
  254. data/modules/emscripten/system/include/libc/ar.h +69 -0
  255. data/modules/emscripten/system/include/libc/argz.h +33 -0
  256. data/modules/emscripten/system/include/libc/assert.h +46 -0
  257. data/modules/emscripten/system/include/libc/complex.h +124 -0
  258. data/modules/emscripten/system/include/libc/ctype.h +196 -0
  259. data/modules/emscripten/system/include/libc/dirent.h +16 -0
  260. data/modules/emscripten/system/include/libc/endian.h +3 -0
  261. data/modules/emscripten/system/include/libc/envlock.h +15 -0
  262. data/modules/emscripten/system/include/libc/envz.h +16 -0
  263. data/modules/emscripten/system/include/libc/errno.h +11 -0
  264. data/modules/emscripten/system/include/libc/fastmath.h +13 -0
  265. data/modules/emscripten/system/include/libc/fcntl.h +1 -0
  266. data/modules/emscripten/system/include/libc/fnmatch.h +55 -0
  267. data/modules/emscripten/system/include/libc/getopt.h +196 -0
  268. data/modules/emscripten/system/include/libc/glob.h +89 -0
  269. data/modules/emscripten/system/include/libc/grp.h +94 -0
  270. data/modules/emscripten/system/include/libc/iconv.h +62 -0
  271. data/modules/emscripten/system/include/libc/ieeefp.h +256 -0
  272. data/modules/emscripten/system/include/libc/ifaddrs.h +64 -0
  273. data/modules/emscripten/system/include/libc/inttypes.h +290 -0
  274. data/modules/emscripten/system/include/libc/iso646.h +43 -0
  275. data/modules/emscripten/system/include/libc/langinfo.h +316 -0
  276. data/modules/emscripten/system/include/libc/libgen.h +23 -0
  277. data/modules/emscripten/system/include/libc/limits.h +155 -0
  278. data/modules/emscripten/system/include/libc/locale.h +80 -0
  279. data/modules/emscripten/system/include/libc/machine/_default_types.h +121 -0
  280. data/modules/emscripten/system/include/libc/machine/_types.h +8 -0
  281. data/modules/emscripten/system/include/libc/machine/ansi.h +1 -0
  282. data/modules/emscripten/system/include/libc/machine/endian.h +31 -0
  283. data/modules/emscripten/system/include/libc/machine/fastmath.h +100 -0
  284. data/modules/emscripten/system/include/libc/machine/ieeefp.h +376 -0
  285. data/modules/emscripten/system/include/libc/machine/malloc.h +8 -0
  286. data/modules/emscripten/system/include/libc/machine/param.h +1 -0
  287. data/modules/emscripten/system/include/libc/machine/setjmp-dj.h +43 -0
  288. data/modules/emscripten/system/include/libc/machine/setjmp.h +361 -0
  289. data/modules/emscripten/system/include/libc/machine/stdlib.h +8 -0
  290. data/modules/emscripten/system/include/libc/machine/termios.h +1 -0
  291. data/modules/emscripten/system/include/libc/machine/time.h +19 -0
  292. data/modules/emscripten/system/include/libc/machine/types.h +30 -0
  293. data/modules/emscripten/system/include/libc/malloc.h +169 -0
  294. data/modules/emscripten/system/include/libc/math.h +594 -0
  295. data/modules/emscripten/system/include/libc/newlib.h +2 -0
  296. data/modules/emscripten/system/include/libc/paths.h +7 -0
  297. data/modules/emscripten/system/include/libc/process.h +44 -0
  298. data/modules/emscripten/system/include/libc/pthread.h +362 -0
  299. data/modules/emscripten/system/include/libc/pwd.h +78 -0
  300. data/modules/emscripten/system/include/libc/readme.txt +3 -0
  301. data/modules/emscripten/system/include/libc/reent.h +183 -0
  302. data/modules/emscripten/system/include/libc/regdef.h +7 -0
  303. data/modules/emscripten/system/include/libc/regex.h +102 -0
  304. data/modules/emscripten/system/include/libc/sched.h +97 -0
  305. data/modules/emscripten/system/include/libc/search.h +59 -0
  306. data/modules/emscripten/system/include/libc/setjmp.h +20 -0
  307. data/modules/emscripten/system/include/libc/signal.h +30 -0
  308. data/modules/emscripten/system/include/libc/stdarg.h +50 -0
  309. data/modules/emscripten/system/include/libc/stddef.h +64 -0
  310. data/modules/emscripten/system/include/libc/stdint.h +493 -0
  311. data/modules/emscripten/system/include/libc/stdio.h +694 -0
  312. data/modules/emscripten/system/include/libc/stdlib.h +230 -0
  313. data/modules/emscripten/system/include/libc/string.h +105 -0
  314. data/modules/emscripten/system/include/libc/strings.h +35 -0
  315. data/modules/emscripten/system/include/libc/sys/_default_fcntl.h +223 -0
  316. data/modules/emscripten/system/include/libc/sys/_types.h +93 -0
  317. data/modules/emscripten/system/include/libc/sys/cdefs.h +123 -0
  318. data/modules/emscripten/system/include/libc/sys/config.h +255 -0
  319. data/modules/emscripten/system/include/libc/sys/custom_file.h +2 -0
  320. data/modules/emscripten/system/include/libc/sys/dir.h +10 -0
  321. data/modules/emscripten/system/include/libc/sys/dirent.h +58 -0
  322. data/modules/emscripten/system/include/libc/sys/errno.h +190 -0
  323. data/modules/emscripten/system/include/libc/sys/fcntl.h +4 -0
  324. data/modules/emscripten/system/include/libc/sys/features.h +212 -0
  325. data/modules/emscripten/system/include/libc/sys/file.h +2 -0
  326. data/modules/emscripten/system/include/libc/sys/iconvnls.h +77 -0
  327. data/modules/emscripten/system/include/libc/sys/lock.h +24 -0
  328. data/modules/emscripten/system/include/libc/sys/param.h +25 -0
  329. data/modules/emscripten/system/include/libc/sys/queue.h +471 -0
  330. data/modules/emscripten/system/include/libc/sys/reent.h +843 -0
  331. data/modules/emscripten/system/include/libc/sys/resource.h +59 -0
  332. data/modules/emscripten/system/include/libc/sys/sched.h +67 -0
  333. data/modules/emscripten/system/include/libc/sys/signal.h +314 -0
  334. data/modules/emscripten/system/include/libc/sys/stat.h +222 -0
  335. data/modules/emscripten/system/include/libc/sys/stdio.h +27 -0
  336. data/modules/emscripten/system/include/libc/sys/string.h +2 -0
  337. data/modules/emscripten/system/include/libc/sys/syslimits.h +65 -0
  338. data/modules/emscripten/system/include/libc/sys/termios.h +280 -0
  339. data/modules/emscripten/system/include/libc/sys/time.h +85 -0
  340. data/modules/emscripten/system/include/libc/sys/timeb.h +39 -0
  341. data/modules/emscripten/system/include/libc/sys/times.h +28 -0
  342. data/modules/emscripten/system/include/libc/sys/ttydefaults.h +97 -0
  343. data/modules/emscripten/system/include/libc/sys/types.h +481 -0
  344. data/modules/emscripten/system/include/libc/sys/unistd.h +514 -0
  345. data/modules/emscripten/system/include/libc/sys/utime.h +26 -0
  346. data/modules/emscripten/system/include/libc/sys/wait.h +40 -0
  347. data/modules/emscripten/system/include/libc/tar.h +39 -0
  348. data/modules/emscripten/system/include/libc/termios.h +7 -0
  349. data/modules/emscripten/system/include/libc/time.h +273 -0
  350. data/modules/emscripten/system/include/libc/unctrl.h +46 -0
  351. data/modules/emscripten/system/include/libc/unistd.h +6 -0
  352. data/modules/emscripten/system/include/libc/utime.h +12 -0
  353. data/modules/emscripten/system/include/libc/utmp.h +8 -0
  354. data/modules/emscripten/system/include/libc/wchar.h +194 -0
  355. data/modules/emscripten/system/include/libc/wctype.h +47 -0
  356. data/modules/emscripten/system/include/libc/wordexp.h +53 -0
  357. data/modules/emscripten/system/include/libcxx/CREDITS.TXT +91 -0
  358. data/modules/emscripten/system/include/libcxx/LICENSE.txt +76 -0
  359. data/modules/emscripten/system/include/libcxx/__bit_reference +1268 -0
  360. data/modules/emscripten/system/include/libcxx/__config +485 -0
  361. data/modules/emscripten/system/include/libcxx/__debug +193 -0
  362. data/modules/emscripten/system/include/libcxx/__functional_03 +2130 -0
  363. data/modules/emscripten/system/include/libcxx/__functional_base +437 -0
  364. data/modules/emscripten/system/include/libcxx/__functional_base_03 +1087 -0
  365. data/modules/emscripten/system/include/libcxx/__hash_table +1945 -0
  366. data/modules/emscripten/system/include/libcxx/__locale +1435 -0
  367. data/modules/emscripten/system/include/libcxx/__mutex_base +438 -0
  368. data/modules/emscripten/system/include/libcxx/__split_buffer +654 -0
  369. data/modules/emscripten/system/include/libcxx/__sso_allocator +77 -0
  370. data/modules/emscripten/system/include/libcxx/__std_stream +317 -0
  371. data/modules/emscripten/system/include/libcxx/__tree +2293 -0
  372. data/modules/emscripten/system/include/libcxx/__tuple +305 -0
  373. data/modules/emscripten/system/include/libcxx/__tuple_03 +27 -0
  374. data/modules/emscripten/system/include/libcxx/__undef_min_max +19 -0
  375. data/modules/emscripten/system/include/libcxx/algorithm +5458 -0
  376. data/modules/emscripten/system/include/libcxx/array +341 -0
  377. data/modules/emscripten/system/include/libcxx/atomic +1521 -0
  378. data/modules/emscripten/system/include/libcxx/bitset +1081 -0
  379. data/modules/emscripten/system/include/libcxx/cassert +25 -0
  380. data/modules/emscripten/system/include/libcxx/ccomplex +29 -0
  381. data/modules/emscripten/system/include/libcxx/cctype +164 -0
  382. data/modules/emscripten/system/include/libcxx/cerrno +393 -0
  383. data/modules/emscripten/system/include/libcxx/cfenv +82 -0
  384. data/modules/emscripten/system/include/libcxx/cfloat +78 -0
  385. data/modules/emscripten/system/include/libcxx/chrono +898 -0
  386. data/modules/emscripten/system/include/libcxx/cinttypes +259 -0
  387. data/modules/emscripten/system/include/libcxx/ciso646 +25 -0
  388. data/modules/emscripten/system/include/libcxx/climits +48 -0
  389. data/modules/emscripten/system/include/libcxx/clocale +53 -0
  390. data/modules/emscripten/system/include/libcxx/cmath +1683 -0
  391. data/modules/emscripten/system/include/libcxx/codecvt +547 -0
  392. data/modules/emscripten/system/include/libcxx/complex +1526 -0
  393. data/modules/emscripten/system/include/libcxx/complex.h +35 -0
  394. data/modules/emscripten/system/include/libcxx/condition_variable +256 -0
  395. data/modules/emscripten/system/include/libcxx/csetjmp +52 -0
  396. data/modules/emscripten/system/include/libcxx/csignal +58 -0
  397. data/modules/emscripten/system/include/libcxx/cstdarg +48 -0
  398. data/modules/emscripten/system/include/libcxx/cstdbool +32 -0
  399. data/modules/emscripten/system/include/libcxx/cstddef +103 -0
  400. data/modules/emscripten/system/include/libcxx/cstdint +191 -0
  401. data/modules/emscripten/system/include/libcxx/cstdio +175 -0
  402. data/modules/emscripten/system/include/libcxx/cstdlib +172 -0
  403. data/modules/emscripten/system/include/libcxx/cstring +112 -0
  404. data/modules/emscripten/system/include/libcxx/ctgmath +29 -0
  405. data/modules/emscripten/system/include/libcxx/ctime +72 -0
  406. data/modules/emscripten/system/include/libcxx/cwchar +208 -0
  407. data/modules/emscripten/system/include/libcxx/cwctype +213 -0
  408. data/modules/emscripten/system/include/libcxx/deque +2846 -0
  409. data/modules/emscripten/system/include/libcxx/exception +250 -0
  410. data/modules/emscripten/system/include/libcxx/ext/__hash +46 -0
  411. data/modules/emscripten/system/include/libcxx/ext/hash_map +1003 -0
  412. data/modules/emscripten/system/include/libcxx/ext/hash_set +657 -0
  413. data/modules/emscripten/system/include/libcxx/forward_list +1636 -0
  414. data/modules/emscripten/system/include/libcxx/fstream +1415 -0
  415. data/modules/emscripten/system/include/libcxx/functional +2063 -0
  416. data/modules/emscripten/system/include/libcxx/future +2505 -0
  417. data/modules/emscripten/system/include/libcxx/initializer_list +105 -0
  418. data/modules/emscripten/system/include/libcxx/iomanip +504 -0
  419. data/modules/emscripten/system/include/libcxx/ios +988 -0
  420. data/modules/emscripten/system/include/libcxx/iosfwd +194 -0
  421. data/modules/emscripten/system/include/libcxx/iostream +60 -0
  422. data/modules/emscripten/system/include/libcxx/istream +1713 -0
  423. data/modules/emscripten/system/include/libcxx/iterator +1869 -0
  424. data/modules/emscripten/system/include/libcxx/limits +809 -0
  425. data/modules/emscripten/system/include/libcxx/list +2275 -0
  426. data/modules/emscripten/system/include/libcxx/locale +4591 -0
  427. data/modules/emscripten/system/include/libcxx/map +1924 -0
  428. data/modules/emscripten/system/include/libcxx/memory +5437 -0
  429. data/modules/emscripten/system/include/libcxx/mutex +566 -0
  430. data/modules/emscripten/system/include/libcxx/new +117 -0
  431. data/modules/emscripten/system/include/libcxx/numeric +197 -0
  432. data/modules/emscripten/system/include/libcxx/ostream +1286 -0
  433. data/modules/emscripten/system/include/libcxx/queue +717 -0
  434. data/modules/emscripten/system/include/libcxx/random +6750 -0
  435. data/modules/emscripten/system/include/libcxx/ratio +487 -0
  436. data/modules/emscripten/system/include/libcxx/readme.txt +1 -0
  437. data/modules/emscripten/system/include/libcxx/regex +6439 -0
  438. data/modules/emscripten/system/include/libcxx/scoped_allocator +578 -0
  439. data/modules/emscripten/system/include/libcxx/set +1025 -0
  440. data/modules/emscripten/system/include/libcxx/sstream +888 -0
  441. data/modules/emscripten/system/include/libcxx/stack +292 -0
  442. data/modules/emscripten/system/include/libcxx/stdexcept +162 -0
  443. data/modules/emscripten/system/include/libcxx/streambuf +564 -0
  444. data/modules/emscripten/system/include/libcxx/string +3987 -0
  445. data/modules/emscripten/system/include/libcxx/strstream +400 -0
  446. data/modules/emscripten/system/include/libcxx/support/solaris/floatingpoint.h +5 -0
  447. data/modules/emscripten/system/include/libcxx/support/solaris/wchar.h +38 -0
  448. data/modules/emscripten/system/include/libcxx/support/solaris/xlocale.h +146 -0
  449. data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +79 -0
  450. data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +116 -0
  451. data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +113 -0
  452. data/modules/emscripten/system/include/libcxx/support/win32/support.h +115 -0
  453. data/modules/emscripten/system/include/libcxx/system_error +636 -0
  454. data/modules/emscripten/system/include/libcxx/tgmath.h +29 -0
  455. data/modules/emscripten/system/include/libcxx/thread +459 -0
  456. data/modules/emscripten/system/include/libcxx/tuple +1092 -0
  457. data/modules/emscripten/system/include/libcxx/type_traits +3040 -0
  458. data/modules/emscripten/system/include/libcxx/typeindex +103 -0
  459. data/modules/emscripten/system/include/libcxx/typeinfo +124 -0
  460. data/modules/emscripten/system/include/libcxx/unordered_map +1864 -0
  461. data/modules/emscripten/system/include/libcxx/unordered_set +1144 -0
  462. data/modules/emscripten/system/include/libcxx/utility +583 -0
  463. data/modules/emscripten/system/include/libcxx/valarray +4779 -0
  464. data/modules/emscripten/system/include/libcxx/vector +3228 -0
  465. data/modules/emscripten/system/include/memory.h +10 -0
  466. data/modules/emscripten/system/include/mntent.h +23 -0
  467. data/modules/emscripten/system/include/net/arpa/inet.h +32 -0
  468. data/modules/emscripten/system/include/net/arpa/nameser.h +535 -0
  469. data/modules/emscripten/system/include/net/arpa/nameser_compat.h +187 -0
  470. data/modules/emscripten/system/include/net/if.h +87 -0
  471. data/modules/emscripten/system/include/net/netinet/in.h +166 -0
  472. data/modules/emscripten/system/include/net/netinet/tcp.h +246 -0
  473. data/modules/emscripten/system/include/net/resolv.h +389 -0
  474. data/modules/emscripten/system/include/netdb.h +94 -0
  475. data/modules/emscripten/system/include/nl_types.h +19 -0
  476. data/modules/emscripten/system/include/poll.h +3 -0
  477. data/modules/emscripten/system/include/pty.h +6 -0
  478. data/modules/emscripten/system/include/semaphore.h +31 -0
  479. data/modules/emscripten/system/include/spawn.h +105 -0
  480. data/modules/emscripten/system/include/stdbool.h +16 -0
  481. data/modules/emscripten/system/include/sys/bitypes.h +3 -0
  482. data/modules/emscripten/system/include/sys/io.h +14 -0
  483. data/modules/emscripten/system/include/sys/ioctl.h +26 -0
  484. data/modules/emscripten/system/include/sys/poll.h +31 -0
  485. data/modules/emscripten/system/include/sys/select.h +14 -0
  486. data/modules/emscripten/system/include/sys/socket.h +101 -0
  487. data/modules/emscripten/system/include/sys/socketvar.h +3 -0
  488. data/modules/emscripten/system/include/sys/statvfs.h +32 -0
  489. data/modules/emscripten/system/include/sys/sysctl.h +14 -0
  490. data/modules/emscripten/system/include/sys/uio.h +22 -0
  491. data/modules/emscripten/system/include/sys/un.h +66 -0
  492. data/modules/emscripten/system/include/sysexits.h +108 -0
  493. data/modules/emscripten/system/include/unwind.h +154 -0
  494. data/modules/emscripten/system/include/xlocale.h +47 -0
  495. data/modules/emscripten/system/include/zconf.h +428 -0
  496. data/modules/emscripten/system/include/zlib.h +1613 -0
  497. data/modules/emscripten/system/lib/compiler-rt/LICENSE.TXT +97 -0
  498. data/modules/emscripten/system/lib/compiler-rt/divdi3.c +47 -0
  499. data/modules/emscripten/system/lib/compiler-rt/int_endianness.h +116 -0
  500. data/modules/emscripten/system/lib/compiler-rt/int_lib.h +46 -0
  501. data/modules/emscripten/system/lib/compiler-rt/int_math.h +67 -0
  502. data/modules/emscripten/system/lib/compiler-rt/int_types.h +140 -0
  503. data/modules/emscripten/system/lib/compiler-rt/int_util.h +29 -0
  504. data/modules/emscripten/system/lib/compiler-rt/muldi3.c +56 -0
  505. data/modules/emscripten/system/lib/compiler-rt/readme.txt +20 -0
  506. data/modules/emscripten/system/lib/compiler-rt/udivdi3.c +36 -0
  507. data/modules/emscripten/system/lib/compiler-rt/udivmoddi4.c +251 -0
  508. data/modules/emscripten/system/lib/debugging.cpp +24 -0
  509. data/modules/emscripten/system/lib/dlmalloc.c +6299 -0
  510. data/modules/emscripten/system/lib/embind/bind.cpp +63 -0
  511. data/modules/emscripten/system/lib/libc/gen/err.c +49 -0
  512. data/modules/emscripten/system/lib/libc/gen/errx.c +49 -0
  513. data/modules/emscripten/system/lib/libc/gen/verr.c +58 -0
  514. data/modules/emscripten/system/lib/libc/gen/verrx.c +51 -0
  515. data/modules/emscripten/system/lib/libc/gen/vwarn.c +55 -0
  516. data/modules/emscripten/system/lib/libc/gen/vwarnx.c +48 -0
  517. data/modules/emscripten/system/lib/libc/gen/warn.c +49 -0
  518. data/modules/emscripten/system/lib/libc/gen/warnx.c +49 -0
  519. data/modules/emscripten/system/lib/libc/musl/COPYRIGHT +92 -0
  520. data/modules/emscripten/system/lib/libc/musl/readme.txt +1 -0
  521. data/modules/emscripten/system/lib/libc/musl/src/ctype/alpha.h +125 -0
  522. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswalnum.c +7 -0
  523. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswalpha.c +14 -0
  524. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswblank.c +8 -0
  525. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswcntrl.c +10 -0
  526. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswctype.c +63 -0
  527. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswdigit.c +9 -0
  528. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswgraph.c +7 -0
  529. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswlower.c +6 -0
  530. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswprint.c +19 -0
  531. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswpunct.c +12 -0
  532. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswspace.c +19 -0
  533. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswupper.c +6 -0
  534. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswxdigit.c +7 -0
  535. data/modules/emscripten/system/lib/libc/musl/src/ctype/nonspacing.h +62 -0
  536. data/modules/emscripten/system/lib/libc/musl/src/ctype/punct.h +109 -0
  537. data/modules/emscripten/system/lib/libc/musl/src/ctype/towctrans.c +268 -0
  538. data/modules/emscripten/system/lib/libc/musl/src/ctype/wcswidth.c +8 -0
  539. data/modules/emscripten/system/lib/libc/musl/src/ctype/wctrans.c +16 -0
  540. data/modules/emscripten/system/lib/libc/musl/src/ctype/wcwidth.c +29 -0
  541. data/modules/emscripten/system/lib/libc/musl/src/ctype/wide.h +42 -0
  542. data/modules/emscripten/system/lib/libc/musl/src/internal/libc.c +22 -0
  543. data/modules/emscripten/system/lib/libc/musl/src/internal/libc.h +71 -0
  544. data/modules/emscripten/system/lib/libc/musl/src/multibyte/btowc.c +7 -0
  545. data/modules/emscripten/system/lib/libc/musl/src/multibyte/internal.c +38 -0
  546. data/modules/emscripten/system/lib/libc/musl/src/multibyte/internal.h +22 -0
  547. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mblen.c +17 -0
  548. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbrlen.c +18 -0
  549. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbrtowc.c +57 -0
  550. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbsinit.c +17 -0
  551. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbsnrtowcs.c +65 -0
  552. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbsrtowcs.c +100 -0
  553. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbstowcs.c +7 -0
  554. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbtowc.c +53 -0
  555. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wcrtomb.c +38 -0
  556. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wcsnrtombs.c +52 -0
  557. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wcsrtombs.c +58 -0
  558. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wcstombs.c +7 -0
  559. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wctob.c +8 -0
  560. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wctomb.c +18 -0
  561. data/modules/emscripten/system/lib/libc/musl/src/string/wcpcpy.c +6 -0
  562. data/modules/emscripten/system/lib/libc/musl/src/string/wcpncpy.c +6 -0
  563. data/modules/emscripten/system/lib/libc/musl/src/string/wcscasecmp.c +7 -0
  564. data/modules/emscripten/system/lib/libc/musl/src/string/wcscasecmp_l.c +6 -0
  565. data/modules/emscripten/system/lib/libc/musl/src/string/wcscat.c +7 -0
  566. data/modules/emscripten/system/lib/libc/musl/src/string/wcschr.c +8 -0
  567. data/modules/emscripten/system/lib/libc/musl/src/string/wcscmp.c +7 -0
  568. data/modules/emscripten/system/lib/libc/musl/src/string/wcscpy.c +8 -0
  569. data/modules/emscripten/system/lib/libc/musl/src/string/wcscspn.c +10 -0
  570. data/modules/emscripten/system/lib/libc/musl/src/string/wcsdup.c +11 -0
  571. data/modules/emscripten/system/lib/libc/musl/src/string/wcslen.c +8 -0
  572. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncasecmp.c +9 -0
  573. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncasecmp_l.c +6 -0
  574. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncat.c +10 -0
  575. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncmp.c +7 -0
  576. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncpy.c +9 -0
  577. data/modules/emscripten/system/lib/libc/musl/src/string/wcsnlen.c +8 -0
  578. data/modules/emscripten/system/lib/libc/musl/src/string/wcspbrk.c +7 -0
  579. data/modules/emscripten/system/lib/libc/musl/src/string/wcsrchr.c +8 -0
  580. data/modules/emscripten/system/lib/libc/musl/src/string/wcsspn.c +8 -0
  581. data/modules/emscripten/system/lib/libc/musl/src/string/wcsstr.c +108 -0
  582. data/modules/emscripten/system/lib/libc/musl/src/string/wcstok.c +12 -0
  583. data/modules/emscripten/system/lib/libc/musl/src/string/wcswcs.c +6 -0
  584. data/modules/emscripten/system/lib/libc/musl/src/string/wmemchr.c +8 -0
  585. data/modules/emscripten/system/lib/libc/musl/src/string/wmemcmp.c +8 -0
  586. data/modules/emscripten/system/lib/libc/musl/src/string/wmemcpy.c +9 -0
  587. data/modules/emscripten/system/lib/libc/musl/src/string/wmemmove.c +12 -0
  588. data/modules/emscripten/system/lib/libc/musl/src/string/wmemset.c +9 -0
  589. data/modules/emscripten/system/lib/libc/stdlib/getopt_long.c +511 -0
  590. data/modules/emscripten/system/lib/libc/stdlib/strtod.c +305 -0
  591. data/modules/emscripten/system/lib/libc.symbols +81 -0
  592. data/modules/emscripten/system/lib/libcextra.symbols +61 -0
  593. data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +91 -0
  594. data/modules/emscripten/system/lib/libcxx/LICENSE.txt +76 -0
  595. data/modules/emscripten/system/lib/libcxx/algorithm.cpp +83 -0
  596. data/modules/emscripten/system/lib/libcxx/bind.cpp +30 -0
  597. data/modules/emscripten/system/lib/libcxx/chrono.cpp +132 -0
  598. data/modules/emscripten/system/lib/libcxx/condition_variable.cpp +81 -0
  599. data/modules/emscripten/system/lib/libcxx/debug.cpp +504 -0
  600. data/modules/emscripten/system/lib/libcxx/exception.cpp +226 -0
  601. data/modules/emscripten/system/lib/libcxx/future.cpp +285 -0
  602. data/modules/emscripten/system/lib/libcxx/hash.cpp +564 -0
  603. data/modules/emscripten/system/lib/libcxx/ios.cpp +455 -0
  604. data/modules/emscripten/system/lib/libcxx/iostream.cpp +68 -0
  605. data/modules/emscripten/system/lib/libcxx/locale.cpp +6093 -0
  606. data/modules/emscripten/system/lib/libcxx/memory.cpp +223 -0
  607. data/modules/emscripten/system/lib/libcxx/mutex.cpp +250 -0
  608. data/modules/emscripten/system/lib/libcxx/new.cpp +205 -0
  609. data/modules/emscripten/system/lib/libcxx/random.cpp +48 -0
  610. data/modules/emscripten/system/lib/libcxx/readme.txt +1 -0
  611. data/modules/emscripten/system/lib/libcxx/regex.cpp +325 -0
  612. data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +196 -0
  613. data/modules/emscripten/system/lib/libcxx/string.cpp +687 -0
  614. data/modules/emscripten/system/lib/libcxx/strstream.cpp +329 -0
  615. data/modules/emscripten/system/lib/libcxx/support/solaris/README +4 -0
  616. data/modules/emscripten/system/lib/libcxx/support/solaris/mbsnrtowcs.inc +76 -0
  617. data/modules/emscripten/system/lib/libcxx/support/solaris/wcsnrtombs.inc +93 -0
  618. data/modules/emscripten/system/lib/libcxx/support/solaris/xlocale.c +245 -0
  619. data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +94 -0
  620. data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +70 -0
  621. data/modules/emscripten/system/lib/libcxx/symbols +2927 -0
  622. data/modules/emscripten/system/lib/libcxx/system_error.cpp +201 -0
  623. data/modules/emscripten/system/lib/libcxx/thread.cpp +208 -0
  624. data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +60 -0
  625. data/modules/emscripten/system/lib/libcxx/utility.cpp +17 -0
  626. data/modules/emscripten/system/lib/libcxx/valarray.cpp +54 -0
  627. data/modules/emscripten/system/lib/libcxxabi/CREDITS.TXT +38 -0
  628. data/modules/emscripten/system/lib/libcxxabi/LICENSE.TXT +76 -0
  629. data/modules/emscripten/system/lib/libcxxabi/include/cxa_demangle.h +167 -0
  630. data/modules/emscripten/system/lib/libcxxabi/include/cxxabi.h +175 -0
  631. data/modules/emscripten/system/lib/libcxxabi/lib/buildit +99 -0
  632. data/modules/emscripten/system/lib/libcxxabi/readme.txt +1 -0
  633. data/modules/emscripten/system/lib/libcxxabi/src/abort_message.cpp +50 -0
  634. data/modules/emscripten/system/lib/libcxxabi/src/abort_message.h +33 -0
  635. data/modules/emscripten/system/lib/libcxxabi/src/cxa_aux_runtime.cpp +34 -0
  636. data/modules/emscripten/system/lib/libcxxabi/src/cxa_demangle.cpp +11036 -0
  637. data/modules/emscripten/system/lib/libcxxabi/src/cxa_exception.cpp +622 -0
  638. data/modules/emscripten/system/lib/libcxxabi/src/cxa_exception.hpp +123 -0
  639. data/modules/emscripten/system/lib/libcxxabi/src/cxa_exception_storage.cpp +91 -0
  640. data/modules/emscripten/system/lib/libcxxabi/src/cxa_guard.cpp +231 -0
  641. data/modules/emscripten/system/lib/libcxxabi/src/cxa_handlers.cpp +125 -0
  642. data/modules/emscripten/system/lib/libcxxabi/src/cxa_handlers.hpp +54 -0
  643. data/modules/emscripten/system/lib/libcxxabi/src/cxa_new_delete.cpp +242 -0
  644. data/modules/emscripten/system/lib/libcxxabi/src/cxa_personality.cpp +1055 -0
  645. data/modules/emscripten/system/lib/libcxxabi/src/cxa_unexpected.cpp +27 -0
  646. data/modules/emscripten/system/lib/libcxxabi/src/cxa_vector.cpp +367 -0
  647. data/modules/emscripten/system/lib/libcxxabi/src/cxa_virtual.cpp +31 -0
  648. data/modules/emscripten/system/lib/libcxxabi/src/exception.cpp +41 -0
  649. data/modules/emscripten/system/lib/libcxxabi/src/fallback_malloc.ipp +174 -0
  650. data/modules/emscripten/system/lib/libcxxabi/src/private_typeinfo.cpp +1146 -0
  651. data/modules/emscripten/system/lib/libcxxabi/src/private_typeinfo.h +248 -0
  652. data/modules/emscripten/system/lib/libcxxabi/src/stdexcept.cpp +169 -0
  653. data/modules/emscripten/system/lib/libcxxabi/src/typeinfo.cpp +53 -0
  654. data/modules/emscripten/system/lib/libcxxabi/symbols +236 -0
  655. data/modules/emscripten/system/lib/sdl.cpp +13 -0
  656. data/modules/emscripten/system/lib/sdl.symbols +1 -0
  657. data/modules/emscripten/tests/hello_world.js +92 -0
  658. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/CppHeaderParser.py +2347 -0
  659. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/__init__.py +4 -0
  660. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/doc/CppHeaderParser.html +657 -0
  661. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/examples/SampleClass.h +147 -0
  662. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/examples/readSampleClass.py +74 -0
  663. data/modules/emscripten/third_party/CppHeaderParser/PKG-INFO +249 -0
  664. data/modules/emscripten/third_party/CppHeaderParser/README.html +544 -0
  665. data/modules/emscripten/third_party/CppHeaderParser/README.txt +226 -0
  666. data/modules/emscripten/third_party/CppHeaderParser/setup.py +43 -0
  667. data/modules/emscripten/third_party/ansidecl.h +371 -0
  668. data/modules/emscripten/third_party/closure-compiler/COPYING +202 -0
  669. data/modules/emscripten/third_party/closure-compiler/README +292 -0
  670. data/modules/emscripten/third_party/closure-compiler/compiler.jar +0 -0
  671. data/modules/emscripten/third_party/closure-compiler/readme.txt +3 -0
  672. data/modules/emscripten/third_party/cp-demangle.h +161 -0
  673. data/modules/emscripten/third_party/demangle.h +549 -0
  674. data/modules/emscripten/third_party/demangler.py +49 -0
  675. data/modules/emscripten/third_party/gcc_demangler.c +4226 -0
  676. data/modules/emscripten/third_party/gcc_demangler.js +21282 -0
  677. data/modules/emscripten/third_party/jni/emjvm.cpp +133 -0
  678. data/modules/emscripten/third_party/jni/emjvm.h +8 -0
  679. data/modules/emscripten/third_party/jni/emjvm.js +185 -0
  680. data/modules/emscripten/third_party/jni/jni.h +1154 -0
  681. data/modules/emscripten/third_party/libiberty.h +634 -0
  682. data/modules/emscripten/third_party/lzma.js/README.markdown +37 -0
  683. data/modules/emscripten/third_party/lzma.js/doit.sh +37 -0
  684. data/modules/emscripten/third_party/lzma.js/lzip/AUTHORS +7 -0
  685. data/modules/emscripten/third_party/lzma.js/lzip/COPYING +676 -0
  686. data/modules/emscripten/third_party/lzma.js/lzip/ChangeLog +201 -0
  687. data/modules/emscripten/third_party/lzma.js/lzip/INSTALL +56 -0
  688. data/modules/emscripten/third_party/lzma.js/lzip/Makefile +160 -0
  689. data/modules/emscripten/third_party/lzma.js/lzip/Makefile.in +138 -0
  690. data/modules/emscripten/third_party/lzma.js/lzip/NEWS +22 -0
  691. data/modules/emscripten/third_party/lzma.js/lzip/README +77 -0
  692. data/modules/emscripten/third_party/lzma.js/lzip/arg_parser.cc +204 -0
  693. data/modules/emscripten/third_party/lzma.js/lzip/arg_parser.h +106 -0
  694. data/modules/emscripten/third_party/lzma.js/lzip/configure +192 -0
  695. data/modules/emscripten/third_party/lzma.js/lzip/decoder.cc +252 -0
  696. data/modules/emscripten/third_party/lzma.js/lzip/decoder.h +268 -0
  697. data/modules/emscripten/third_party/lzma.js/lzip/encoder.cc +643 -0
  698. data/modules/emscripten/third_party/lzma.js/lzip/encoder.h +582 -0
  699. data/modules/emscripten/third_party/lzma.js/lzip/fast_encoder.cc +378 -0
  700. data/modules/emscripten/third_party/lzma.js/lzip/fast_encoder.h +171 -0
  701. data/modules/emscripten/third_party/lzma.js/lzip/lzip.h +264 -0
  702. data/modules/emscripten/third_party/lzma.js/lzip/main.cc +545 -0
  703. data/modules/emscripten/third_party/lzma.js/lzma-decoder.js +27 -0
  704. data/modules/emscripten/third_party/lzma.js/lzma-full.js +27 -0
  705. data/modules/emscripten/third_party/lzma.js/native_test.sh +5 -0
  706. data/modules/emscripten/third_party/lzma.js/post.js +13 -0
  707. data/modules/emscripten/third_party/lzma.js/pre.js +13 -0
  708. data/modules/emscripten/third_party/lzma.js/test-decoder.js +39 -0
  709. data/modules/emscripten/third_party/lzma.js/test-full.html +9 -0
  710. data/modules/emscripten/third_party/lzma.js/test-full.js +78 -0
  711. data/modules/emscripten/third_party/ply/ANNOUNCE +40 -0
  712. data/modules/emscripten/third_party/ply/CHANGES +1093 -0
  713. data/modules/emscripten/third_party/ply/PKG-INFO +22 -0
  714. data/modules/emscripten/third_party/ply/README +271 -0
  715. data/modules/emscripten/third_party/ply/TODO +16 -0
  716. data/modules/emscripten/third_party/ply/doc/internal.html +874 -0
  717. data/modules/emscripten/third_party/ply/doc/makedoc.py +194 -0
  718. data/modules/emscripten/third_party/ply/doc/ply.html +3262 -0
  719. data/modules/emscripten/third_party/ply/example/BASIC/README +79 -0
  720. data/modules/emscripten/third_party/ply/example/BASIC/basic.py +71 -0
  721. data/modules/emscripten/third_party/ply/example/BASIC/basiclex.py +74 -0
  722. data/modules/emscripten/third_party/ply/example/BASIC/basiclog.py +79 -0
  723. data/modules/emscripten/third_party/ply/example/BASIC/basinterp.py +441 -0
  724. data/modules/emscripten/third_party/ply/example/BASIC/basparse.py +424 -0
  725. data/modules/emscripten/third_party/ply/example/BASIC/dim.bas +14 -0
  726. data/modules/emscripten/third_party/ply/example/BASIC/func.bas +5 -0
  727. data/modules/emscripten/third_party/ply/example/BASIC/gcd.bas +22 -0
  728. data/modules/emscripten/third_party/ply/example/BASIC/gosub.bas +13 -0
  729. data/modules/emscripten/third_party/ply/example/BASIC/hello.bas +4 -0
  730. data/modules/emscripten/third_party/ply/example/BASIC/linear.bas +17 -0
  731. data/modules/emscripten/third_party/ply/example/BASIC/maxsin.bas +12 -0
  732. data/modules/emscripten/third_party/ply/example/BASIC/powers.bas +13 -0
  733. data/modules/emscripten/third_party/ply/example/BASIC/rand.bas +4 -0
  734. data/modules/emscripten/third_party/ply/example/BASIC/sales.bas +20 -0
  735. data/modules/emscripten/third_party/ply/example/BASIC/sears.bas +18 -0
  736. data/modules/emscripten/third_party/ply/example/BASIC/sqrt1.bas +5 -0
  737. data/modules/emscripten/third_party/ply/example/BASIC/sqrt2.bas +4 -0
  738. data/modules/emscripten/third_party/ply/example/GardenSnake/GardenSnake.py +709 -0
  739. data/modules/emscripten/third_party/ply/example/GardenSnake/README +5 -0
  740. data/modules/emscripten/third_party/ply/example/README +10 -0
  741. data/modules/emscripten/third_party/ply/example/ansic/README +2 -0
  742. data/modules/emscripten/third_party/ply/example/ansic/clex.py +164 -0
  743. data/modules/emscripten/third_party/ply/example/ansic/cparse.py +863 -0
  744. data/modules/emscripten/third_party/ply/example/calc/calc.py +107 -0
  745. data/modules/emscripten/third_party/ply/example/calcdebug/calc.py +113 -0
  746. data/modules/emscripten/third_party/ply/example/classcalc/calc.py +157 -0
  747. data/modules/emscripten/third_party/ply/example/cleanup.sh +2 -0
  748. data/modules/emscripten/third_party/ply/example/closurecalc/calc.py +130 -0
  749. data/modules/emscripten/third_party/ply/example/hedit/hedit.py +48 -0
  750. data/modules/emscripten/third_party/ply/example/newclasscalc/calc.py +160 -0
  751. data/modules/emscripten/third_party/ply/example/optcalc/README +9 -0
  752. data/modules/emscripten/third_party/ply/example/optcalc/calc.py +119 -0
  753. data/modules/emscripten/third_party/ply/example/unicalc/calc.py +117 -0
  754. data/modules/emscripten/third_party/ply/example/yply/README +41 -0
  755. data/modules/emscripten/third_party/ply/example/yply/ylex.py +112 -0
  756. data/modules/emscripten/third_party/ply/example/yply/yparse.py +217 -0
  757. data/modules/emscripten/third_party/ply/example/yply/yply.py +53 -0
  758. data/modules/emscripten/third_party/ply/ply/__init__.py +4 -0
  759. data/modules/emscripten/third_party/ply/ply/cpp.py +898 -0
  760. data/modules/emscripten/third_party/ply/ply/ctokens.py +133 -0
  761. data/modules/emscripten/third_party/ply/ply/lex.py +1058 -0
  762. data/modules/emscripten/third_party/ply/ply/yacc.py +3276 -0
  763. data/modules/emscripten/third_party/ply/setup.py +31 -0
  764. data/modules/emscripten/third_party/ply/test/README +7 -0
  765. data/modules/emscripten/third_party/ply/test/calclex.py +49 -0
  766. data/modules/emscripten/third_party/ply/test/cleanup.sh +4 -0
  767. data/modules/emscripten/third_party/ply/test/lex_closure.py +54 -0
  768. data/modules/emscripten/third_party/ply/test/lex_doc1.py +26 -0
  769. data/modules/emscripten/third_party/ply/test/lex_dup1.py +29 -0
  770. data/modules/emscripten/third_party/ply/test/lex_dup2.py +33 -0
  771. data/modules/emscripten/third_party/ply/test/lex_dup3.py +31 -0
  772. data/modules/emscripten/third_party/ply/test/lex_empty.py +20 -0
  773. data/modules/emscripten/third_party/ply/test/lex_error1.py +24 -0
  774. data/modules/emscripten/third_party/ply/test/lex_error2.py +26 -0
  775. data/modules/emscripten/third_party/ply/test/lex_error3.py +27 -0
  776. data/modules/emscripten/third_party/ply/test/lex_error4.py +27 -0
  777. data/modules/emscripten/third_party/ply/test/lex_hedit.py +47 -0
  778. data/modules/emscripten/third_party/ply/test/lex_ignore.py +31 -0
  779. data/modules/emscripten/third_party/ply/test/lex_ignore2.py +29 -0
  780. data/modules/emscripten/third_party/ply/test/lex_literal1.py +25 -0
  781. data/modules/emscripten/third_party/ply/test/lex_literal2.py +25 -0
  782. data/modules/emscripten/third_party/ply/test/lex_many_tokens.py +27 -0
  783. data/modules/emscripten/third_party/ply/test/lex_module.py +10 -0
  784. data/modules/emscripten/third_party/ply/test/lex_module_import.py +42 -0
  785. data/modules/emscripten/third_party/ply/test/lex_object.py +55 -0
  786. data/modules/emscripten/third_party/ply/test/lex_opt_alias.py +54 -0
  787. data/modules/emscripten/third_party/ply/test/lex_optimize.py +50 -0
  788. data/modules/emscripten/third_party/ply/test/lex_optimize2.py +50 -0
  789. data/modules/emscripten/third_party/ply/test/lex_optimize3.py +52 -0
  790. data/modules/emscripten/third_party/ply/test/lex_re1.py +27 -0
  791. data/modules/emscripten/third_party/ply/test/lex_re2.py +27 -0
  792. data/modules/emscripten/third_party/ply/test/lex_re3.py +29 -0
  793. data/modules/emscripten/third_party/ply/test/lex_rule1.py +27 -0
  794. data/modules/emscripten/third_party/ply/test/lex_rule2.py +29 -0
  795. data/modules/emscripten/third_party/ply/test/lex_rule3.py +27 -0
  796. data/modules/emscripten/third_party/ply/test/lex_state1.py +40 -0
  797. data/modules/emscripten/third_party/ply/test/lex_state2.py +40 -0
  798. data/modules/emscripten/third_party/ply/test/lex_state3.py +42 -0
  799. data/modules/emscripten/third_party/ply/test/lex_state4.py +41 -0
  800. data/modules/emscripten/third_party/ply/test/lex_state5.py +40 -0
  801. data/modules/emscripten/third_party/ply/test/lex_state_noerror.py +39 -0
  802. data/modules/emscripten/third_party/ply/test/lex_state_norule.py +40 -0
  803. data/modules/emscripten/third_party/ply/test/lex_state_try.py +45 -0
  804. data/modules/emscripten/third_party/ply/test/lex_token1.py +19 -0
  805. data/modules/emscripten/third_party/ply/test/lex_token2.py +22 -0
  806. data/modules/emscripten/third_party/ply/test/lex_token3.py +24 -0
  807. data/modules/emscripten/third_party/ply/test/lex_token4.py +26 -0
  808. data/modules/emscripten/third_party/ply/test/lex_token5.py +31 -0
  809. data/modules/emscripten/third_party/ply/test/lex_token_dup.py +29 -0
  810. data/modules/emscripten/third_party/ply/test/testlex.py +606 -0
  811. data/modules/emscripten/third_party/ply/test/testyacc.py +347 -0
  812. data/modules/emscripten/third_party/ply/test/yacc_badargs.py +68 -0
  813. data/modules/emscripten/third_party/ply/test/yacc_badid.py +77 -0
  814. data/modules/emscripten/third_party/ply/test/yacc_badprec.py +64 -0
  815. data/modules/emscripten/third_party/ply/test/yacc_badprec2.py +68 -0
  816. data/modules/emscripten/third_party/ply/test/yacc_badprec3.py +68 -0
  817. data/modules/emscripten/third_party/ply/test/yacc_badrule.py +68 -0
  818. data/modules/emscripten/third_party/ply/test/yacc_badtok.py +68 -0
  819. data/modules/emscripten/third_party/ply/test/yacc_dup.py +68 -0
  820. data/modules/emscripten/third_party/ply/test/yacc_error1.py +68 -0
  821. data/modules/emscripten/third_party/ply/test/yacc_error2.py +68 -0
  822. data/modules/emscripten/third_party/ply/test/yacc_error3.py +67 -0
  823. data/modules/emscripten/third_party/ply/test/yacc_error4.py +72 -0
  824. data/modules/emscripten/third_party/ply/test/yacc_inf.py +56 -0
  825. data/modules/emscripten/third_party/ply/test/yacc_literal.py +69 -0
  826. data/modules/emscripten/third_party/ply/test/yacc_misplaced.py +68 -0
  827. data/modules/emscripten/third_party/ply/test/yacc_missing1.py +68 -0
  828. data/modules/emscripten/third_party/ply/test/yacc_nested.py +33 -0
  829. data/modules/emscripten/third_party/ply/test/yacc_nodoc.py +67 -0
  830. data/modules/emscripten/third_party/ply/test/yacc_noerror.py +66 -0
  831. data/modules/emscripten/third_party/ply/test/yacc_nop.py +68 -0
  832. data/modules/emscripten/third_party/ply/test/yacc_notfunc.py +66 -0
  833. data/modules/emscripten/third_party/ply/test/yacc_notok.py +67 -0
  834. data/modules/emscripten/third_party/ply/test/yacc_prec1.py +68 -0
  835. data/modules/emscripten/third_party/ply/test/yacc_rr.py +72 -0
  836. data/modules/emscripten/third_party/ply/test/yacc_rr_unused.py +30 -0
  837. data/modules/emscripten/third_party/ply/test/yacc_simple.py +68 -0
  838. data/modules/emscripten/third_party/ply/test/yacc_sr.py +63 -0
  839. data/modules/emscripten/third_party/ply/test/yacc_term1.py +68 -0
  840. data/modules/emscripten/third_party/ply/test/yacc_unused.py +77 -0
  841. data/modules/emscripten/third_party/ply/test/yacc_unused_rule.py +72 -0
  842. data/modules/emscripten/third_party/ply/test/yacc_uprec.py +63 -0
  843. data/modules/emscripten/third_party/ply/test/yacc_uprec2.py +63 -0
  844. data/modules/emscripten/third_party/readme.txt +7 -0
  845. data/modules/emscripten/third_party/websockify/CHANGES.txt +23 -0
  846. data/modules/emscripten/third_party/websockify/LICENSE.txt +16 -0
  847. data/modules/emscripten/third_party/websockify/MANIFEST.in +1 -0
  848. data/modules/emscripten/third_party/websockify/Makefile +11 -0
  849. data/modules/emscripten/third_party/websockify/README.md +168 -0
  850. data/modules/emscripten/third_party/websockify/Windows/Windows Service Readme.txt +39 -0
  851. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/Program.cs +24 -0
  852. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.Designer.cs +61 -0
  853. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.cs +19 -0
  854. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.resx +129 -0
  855. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/Properties/AssemblyInfo.cs +36 -0
  856. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/Service1.Designer.cs +37 -0
  857. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/Service1.cs +41 -0
  858. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/noVNC Websocket.csproj +75 -0
  859. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/noVNC Websocket.sln +20 -0
  860. data/modules/emscripten/third_party/websockify/docs/LICENSE.GPL-3 +621 -0
  861. data/modules/emscripten/third_party/websockify/docs/LICENSE.LGPL-3 +165 -0
  862. data/modules/emscripten/third_party/websockify/docs/LICENSE.MPL-2.0 +373 -0
  863. data/modules/emscripten/third_party/websockify/docs/TODO +9 -0
  864. data/modules/emscripten/third_party/websockify/docs/flash_policy.txt +4 -0
  865. data/modules/emscripten/third_party/websockify/docs/latency_results.txt +114 -0
  866. data/modules/emscripten/third_party/websockify/docs/notes +17 -0
  867. data/modules/emscripten/third_party/websockify/docs/release.txt +9 -0
  868. data/modules/emscripten/third_party/websockify/docs/websockify.1 +110 -0
  869. data/modules/emscripten/third_party/websockify/include/VT100.js +919 -0
  870. data/modules/emscripten/third_party/websockify/include/base64.js +114 -0
  871. data/modules/emscripten/third_party/websockify/include/keysym.js +99 -0
  872. data/modules/emscripten/third_party/websockify/include/util.js +359 -0
  873. data/modules/emscripten/third_party/websockify/include/web-socket-js/README.txt +109 -0
  874. data/modules/emscripten/third_party/websockify/include/web-socket-js/WebSocketMain.swf +0 -0
  875. data/modules/emscripten/third_party/websockify/include/web-socket-js/swfobject.js +4 -0
  876. data/modules/emscripten/third_party/websockify/include/web-socket-js/web_socket.js +391 -0
  877. data/modules/emscripten/third_party/websockify/include/websock.js +422 -0
  878. data/modules/emscripten/third_party/websockify/include/webutil.js +216 -0
  879. data/modules/emscripten/third_party/websockify/include/wsirc.js +235 -0
  880. data/modules/emscripten/third_party/websockify/include/wstelnet.js +335 -0
  881. data/modules/emscripten/third_party/websockify/other/Makefile +14 -0
  882. data/modules/emscripten/third_party/websockify/other/README.md +51 -0
  883. data/modules/emscripten/third_party/websockify/other/launch.sh +108 -0
  884. data/modules/emscripten/third_party/websockify/other/project.clj +13 -0
  885. data/modules/emscripten/third_party/websockify/other/websocket.c +802 -0
  886. data/modules/emscripten/third_party/websockify/other/websocket.h +84 -0
  887. data/modules/emscripten/third_party/websockify/other/websocket.rb +456 -0
  888. data/modules/emscripten/third_party/websockify/other/websockify.c +385 -0
  889. data/modules/emscripten/third_party/websockify/other/websockify.clj +233 -0
  890. data/modules/emscripten/third_party/websockify/other/websockify.js +196 -0
  891. data/modules/emscripten/third_party/websockify/other/websockify.rb +171 -0
  892. data/modules/emscripten/third_party/websockify/other/wswrap +22 -0
  893. data/modules/emscripten/third_party/websockify/rebind +18 -0
  894. data/modules/emscripten/third_party/websockify/rebind.c +94 -0
  895. data/modules/emscripten/third_party/websockify/run +5 -0
  896. data/modules/emscripten/third_party/websockify/setup.py +30 -0
  897. data/modules/emscripten/third_party/websockify/tests/b64_vs_utf8.py +29 -0
  898. data/modules/emscripten/third_party/websockify/tests/base64.html +91 -0
  899. data/modules/emscripten/third_party/websockify/tests/base64.js +12 -0
  900. data/modules/emscripten/third_party/websockify/tests/echo.html +148 -0
  901. data/modules/emscripten/third_party/websockify/tests/echo.py +75 -0
  902. data/modules/emscripten/third_party/websockify/tests/echo.rb +62 -0
  903. data/modules/emscripten/third_party/websockify/tests/latency.html +290 -0
  904. data/modules/emscripten/third_party/websockify/tests/latency.py +75 -0
  905. data/modules/emscripten/third_party/websockify/tests/load.html +250 -0
  906. data/modules/emscripten/third_party/websockify/tests/load.py +167 -0
  907. data/modules/emscripten/third_party/websockify/tests/plain_echo.html +168 -0
  908. data/modules/emscripten/third_party/websockify/tests/simple.html +68 -0
  909. data/modules/emscripten/third_party/websockify/tests/utf8-list.py +22 -0
  910. data/modules/emscripten/third_party/websockify/websockify/__init__.py +2 -0
  911. data/modules/emscripten/third_party/websockify/websockify/websocket.py +982 -0
  912. data/modules/emscripten/third_party/websockify/websockify/websocketproxy.py +393 -0
  913. data/modules/emscripten/third_party/websockify/websockify.py +5 -0
  914. data/modules/emscripten/third_party/websockify/wsirc.html +99 -0
  915. data/modules/emscripten/third_party/websockify/wstelnet.html +74 -0
  916. data/modules/emscripten/tools/__init__.py +0 -0
  917. data/modules/emscripten/tools/__init__.pyc +0 -0
  918. data/modules/emscripten/tools/autodebugger.py +289 -0
  919. data/modules/emscripten/tools/autodebugger_c.py +37 -0
  920. data/modules/emscripten/tools/autodebugger_indenter.py +18 -0
  921. data/modules/emscripten/tools/autodebugger_js.py +47 -0
  922. data/modules/emscripten/tools/autodediffer.py +60 -0
  923. data/modules/emscripten/tools/bindings_generator.py +832 -0
  924. data/modules/emscripten/tools/bisect_pair.py +88 -0
  925. data/modules/emscripten/tools/cache.py +198 -0
  926. data/modules/emscripten/tools/cache.pyc +0 -0
  927. data/modules/emscripten/tools/clean_webconsole.py +34 -0
  928. data/modules/emscripten/tools/crunch-worker.js +124 -0
  929. data/modules/emscripten/tools/diff_autodebugger.py +15 -0
  930. data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +5129 -0
  931. data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +6861 -0
  932. data/modules/emscripten/tools/eliminator/eliminator-test-output.js +6122 -0
  933. data/modules/emscripten/tools/eliminator/eliminator-test.js +8856 -0
  934. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/README.html +888 -0
  935. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/README.org +463 -0
  936. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/bin/uglifyjs +317 -0
  937. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/docstyle.css +75 -0
  938. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/lib/object-ast.js +75 -0
  939. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/lib/parse-js.js +1363 -0
  940. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/lib/process.js +2005 -0
  941. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/lib/squeeze-more.js +51 -0
  942. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/package.json +22 -0
  943. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/beautify.js +28 -0
  944. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/testparser.js +402 -0
  945. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/array1.js +1 -0
  946. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/array2.js +1 -0
  947. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/array3.js +1 -0
  948. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/array4.js +1 -0
  949. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/assignment.js +1 -0
  950. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/concatstring.js +1 -0
  951. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/const.js +1 -0
  952. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/empty-blocks.js +1 -0
  953. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/forstatement.js +1 -0
  954. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/if.js +1 -0
  955. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/ifreturn.js +1 -0
  956. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/ifreturn2.js +1 -0
  957. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue10.js +1 -0
  958. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue11.js +1 -0
  959. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue13.js +1 -0
  960. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue14.js +1 -0
  961. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue16.js +1 -0
  962. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue17.js +1 -0
  963. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue20.js +1 -0
  964. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue21.js +1 -0
  965. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue25.js +1 -0
  966. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue27.js +1 -0
  967. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue28.js +1 -0
  968. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue29.js +1 -0
  969. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue30.js +1 -0
  970. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue34.js +1 -0
  971. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue4.js +1 -0
  972. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue48.js +1 -0
  973. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue50.js +1 -0
  974. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue53.js +1 -0
  975. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue54.1.js +1 -0
  976. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue68.js +1 -0
  977. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue69.js +1 -0
  978. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue9.js +1 -0
  979. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/mangle.js +1 -0
  980. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/strict-equals.js +1 -0
  981. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/var.js +1 -0
  982. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/with.js +1 -0
  983. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/array1.js +3 -0
  984. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/array2.js +4 -0
  985. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/array3.js +4 -0
  986. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/array4.js +6 -0
  987. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/assignment.js +20 -0
  988. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/concatstring.js +3 -0
  989. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/const.js +5 -0
  990. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/empty-blocks.js +4 -0
  991. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/forstatement.js +10 -0
  992. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/if.js +6 -0
  993. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/ifreturn.js +9 -0
  994. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/ifreturn2.js +16 -0
  995. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue10.js +1 -0
  996. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue11.js +3 -0
  997. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue13.js +1 -0
  998. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue14.js +1 -0
  999. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue16.js +1 -0
  1000. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue17.js +4 -0
  1001. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue20.js +1 -0
  1002. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue21.js +6 -0
  1003. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue25.js +7 -0
  1004. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue27.js +1 -0
  1005. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue28.js +3 -0
  1006. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue29.js +1 -0
  1007. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue30.js +3 -0
  1008. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue34.js +3 -0
  1009. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue4.js +3 -0
  1010. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue48.js +1 -0
  1011. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue50.js +9 -0
  1012. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue53.js +1 -0
  1013. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue54.1.js +3 -0
  1014. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue68.js +5 -0
  1015. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue69.js +1 -0
  1016. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue9.js +4 -0
  1017. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/mangle.js +5 -0
  1018. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/strict-equals.js +3 -0
  1019. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/var.js +3 -0
  1020. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/with.js +2 -0
  1021. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/scripts.js +55 -0
  1022. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/tmp/hoist.js +33 -0
  1023. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/tmp/instrument.js +97 -0
  1024. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/tmp/instrument2.js +138 -0
  1025. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/tmp/test.js +16 -0
  1026. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/uglify-js.js +17 -0
  1027. data/modules/emscripten/tools/eliminator/safe-eliminator-test-output.js +85 -0
  1028. data/modules/emscripten/tools/eliminator/safe-eliminator-test.js +103 -0
  1029. data/modules/emscripten/tools/emconfiguren.py +19 -0
  1030. data/modules/emscripten/tools/emmaken.py +230 -0
  1031. data/modules/emscripten/tools/emmakenxx.py +18 -0
  1032. data/modules/emscripten/tools/exec_llvm.py +50 -0
  1033. data/modules/emscripten/tools/file2json.py +49 -0
  1034. data/modules/emscripten/tools/file_packager.py +649 -0
  1035. data/modules/emscripten/tools/find_bigfuncs.py +23 -0
  1036. data/modules/emscripten/tools/find_bigis.py +18 -0
  1037. data/modules/emscripten/tools/fix_closure.py +88 -0
  1038. data/modules/emscripten/tools/ie7_fix.py +14 -0
  1039. data/modules/emscripten/tools/js-optimizer.js +3440 -0
  1040. data/modules/emscripten/tools/js_optimizer.py +341 -0
  1041. data/modules/emscripten/tools/js_optimizer.pyc +0 -0
  1042. data/modules/emscripten/tools/jsrun.py +27 -0
  1043. data/modules/emscripten/tools/jsrun.pyc +0 -0
  1044. data/modules/emscripten/tools/ll-strip.py +56 -0
  1045. data/modules/emscripten/tools/make_file.py +19 -0
  1046. data/modules/emscripten/tools/make_minigzip.py +13 -0
  1047. data/modules/emscripten/tools/namespacer.py +95 -0
  1048. data/modules/emscripten/tools/nativize_llvm.py +34 -0
  1049. data/modules/emscripten/tools/node_modules/source-map/CHANGELOG.md +58 -0
  1050. data/modules/emscripten/tools/node_modules/source-map/LICENSE +28 -0
  1051. data/modules/emscripten/tools/node_modules/source-map/Makefile.dryice.js +166 -0
  1052. data/modules/emscripten/tools/node_modules/source-map/README.md +347 -0
  1053. data/modules/emscripten/tools/node_modules/source-map/build/assert-shim.js +56 -0
  1054. data/modules/emscripten/tools/node_modules/source-map/build/mini-require.js +152 -0
  1055. data/modules/emscripten/tools/node_modules/source-map/build/prefix-source-map.jsm +20 -0
  1056. data/modules/emscripten/tools/node_modules/source-map/build/prefix-utils.jsm +18 -0
  1057. data/modules/emscripten/tools/node_modules/source-map/build/suffix-browser.js +8 -0
  1058. data/modules/emscripten/tools/node_modules/source-map/build/suffix-source-map.jsm +6 -0
  1059. data/modules/emscripten/tools/node_modules/source-map/build/suffix-utils.jsm +21 -0
  1060. data/modules/emscripten/tools/node_modules/source-map/build/test-prefix.js +8 -0
  1061. data/modules/emscripten/tools/node_modules/source-map/build/test-suffix.js +3 -0
  1062. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/array-set.js +96 -0
  1063. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/base64-vlq.js +144 -0
  1064. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/base64.js +42 -0
  1065. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/binary-search.js +81 -0
  1066. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/source-map-consumer.js +430 -0
  1067. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/source-map-generator.js +381 -0
  1068. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/source-node.js +353 -0
  1069. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/util.js +117 -0
  1070. data/modules/emscripten/tools/node_modules/source-map/lib/source-map.js +8 -0
  1071. data/modules/emscripten/tools/node_modules/source-map/node_modules/amdefine/LICENSE +58 -0
  1072. data/modules/emscripten/tools/node_modules/source-map/node_modules/amdefine/README.md +119 -0
  1073. data/modules/emscripten/tools/node_modules/source-map/node_modules/amdefine/amdefine.js +299 -0
  1074. data/modules/emscripten/tools/node_modules/source-map/node_modules/amdefine/package.json +33 -0
  1075. data/modules/emscripten/tools/node_modules/source-map/package.json +74 -0
  1076. data/modules/emscripten/tools/node_modules/source-map/test/run-tests.js +73 -0
  1077. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-api.js +26 -0
  1078. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-array-set.js +71 -0
  1079. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-base64-vlq.js +24 -0
  1080. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-base64.js +35 -0
  1081. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-binary-search.js +54 -0
  1082. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-dog-fooding.js +72 -0
  1083. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-source-map-consumer.js +306 -0
  1084. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-source-map-generator.js +391 -0
  1085. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-source-node.js +282 -0
  1086. data/modules/emscripten/tools/node_modules/source-map/test/source-map/util.js +152 -0
  1087. data/modules/emscripten/tools/reproduceriter.js +216 -0
  1088. data/modules/emscripten/tools/reproduceriter.py +160 -0
  1089. data/modules/emscripten/tools/response_file.py +28 -0
  1090. data/modules/emscripten/tools/response_file.pyc +0 -0
  1091. data/modules/emscripten/tools/scan_js.py +20 -0
  1092. data/modules/emscripten/tools/scan_ll.py +18 -0
  1093. data/modules/emscripten/tools/scons/site_scons/site_tools/emscripten/__init__.py +3 -0
  1094. data/modules/emscripten/tools/scons/site_scons/site_tools/emscripten/emscripten.py +46 -0
  1095. data/modules/emscripten/tools/settings_template_readonly.py +47 -0
  1096. data/modules/emscripten/tools/shared.py +1437 -0
  1097. data/modules/emscripten/tools/shared.pyc +0 -0
  1098. data/modules/emscripten/tools/source-maps/sourcemap2json.js +15 -0
  1099. data/modules/emscripten/tools/source-maps/sourcemapper.js +177 -0
  1100. data/modules/emscripten/tools/split.py +97 -0
  1101. data/modules/emscripten/tools/tempfiles.py +40 -0
  1102. data/modules/emscripten/tools/tempfiles.pyc +0 -0
  1103. data/modules/emscripten/tools/test-js-optimizer-asm-last-output.js +75 -0
  1104. data/modules/emscripten/tools/test-js-optimizer-asm-last.js +91 -0
  1105. data/modules/emscripten/tools/test-js-optimizer-asm-outline-output.js +570 -0
  1106. data/modules/emscripten/tools/test-js-optimizer-asm-outline.js +606 -0
  1107. data/modules/emscripten/tools/test-js-optimizer-asm-pre-output.js +540 -0
  1108. data/modules/emscripten/tools/test-js-optimizer-asm-pre.js +550 -0
  1109. data/modules/emscripten/tools/test-js-optimizer-asm-regs-min-output.js +36 -0
  1110. data/modules/emscripten/tools/test-js-optimizer-asm-regs-min.js +37 -0
  1111. data/modules/emscripten/tools/test-js-optimizer-asm-regs-output.js +106 -0
  1112. data/modules/emscripten/tools/test-js-optimizer-asm-regs.js +110 -0
  1113. data/modules/emscripten/tools/test-js-optimizer-asm-relocate-output.js +9 -0
  1114. data/modules/emscripten/tools/test-js-optimizer-asm-relocate.js +12 -0
  1115. data/modules/emscripten/tools/test-js-optimizer-output.js +291 -0
  1116. data/modules/emscripten/tools/test-js-optimizer-regs-output.js +232 -0
  1117. data/modules/emscripten/tools/test-js-optimizer-regs.js +237 -0
  1118. data/modules/emscripten/tools/test-js-optimizer-t2-output.js +91 -0
  1119. data/modules/emscripten/tools/test-js-optimizer-t2.js +92 -0
  1120. data/modules/emscripten/tools/test-js-optimizer-t2c-output.js +17 -0
  1121. data/modules/emscripten/tools/test-js-optimizer-t2c.js +18 -0
  1122. data/modules/emscripten/tools/test-js-optimizer-t3-output.js +49 -0
  1123. data/modules/emscripten/tools/test-js-optimizer-t3.js +50 -0
  1124. data/modules/emscripten/tools/test-js-optimizer.js +401 -0
  1125. data/modules/mruby/AUTHORS +18 -0
  1126. data/modules/mruby/CONTRIBUTING.md +65 -0
  1127. data/modules/mruby/ChangeLog +15 -0
  1128. data/modules/mruby/INSTALL +29 -0
  1129. data/modules/mruby/LEGAL +6 -0
  1130. data/modules/mruby/MITL +20 -0
  1131. data/modules/mruby/Makefile +18 -0
  1132. data/modules/mruby/NEWS +13 -0
  1133. data/modules/mruby/README.md +116 -0
  1134. data/modules/mruby/Rakefile +114 -0
  1135. data/modules/mruby/TODO +11 -0
  1136. data/modules/mruby/benchmark/ao-render.rb +315 -0
  1137. data/modules/mruby/benchmark/bm_so_lists.rb +47 -0
  1138. data/modules/mruby/benchmark/fib39.rb +8 -0
  1139. data/modules/mruby/build_config.rb +88 -0
  1140. data/modules/mruby/doc/compile/README.md +376 -0
  1141. data/modules/mruby/doc/mrbgems/README.md +254 -0
  1142. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/README.md +4 -0
  1143. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake +23 -0
  1144. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +5 -0
  1145. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +20 -0
  1146. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/test/example.rb +7 -0
  1147. data/modules/mruby/examples/mrbgems/c_extension_example/README.md +4 -0
  1148. data/modules/mruby/examples/mrbgems/c_extension_example/mrbgem.rake +23 -0
  1149. data/modules/mruby/examples/mrbgems/c_extension_example/src/example.c +20 -0
  1150. data/modules/mruby/examples/mrbgems/c_extension_example/test/example.c +7 -0
  1151. data/modules/mruby/examples/mrbgems/c_extension_example/test/example.rb +3 -0
  1152. data/modules/mruby/examples/mrbgems/ruby_extension_example/README.md +4 -0
  1153. data/modules/mruby/examples/mrbgems/ruby_extension_example/mrbgem.rake +23 -0
  1154. data/modules/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +5 -0
  1155. data/modules/mruby/examples/mrbgems/ruby_extension_example/test/example.rb +3 -0
  1156. data/modules/mruby/examples/targets/ArduinoDue.rb +65 -0
  1157. data/modules/mruby/examples/targets/chipKitMax32.rb +68 -0
  1158. data/modules/mruby/include/mrbconf.h +87 -0
  1159. data/modules/mruby/include/mruby/array.h +63 -0
  1160. data/modules/mruby/include/mruby/class.h +75 -0
  1161. data/modules/mruby/include/mruby/compile.h +176 -0
  1162. data/modules/mruby/include/mruby/data.h +53 -0
  1163. data/modules/mruby/include/mruby/dump.h +151 -0
  1164. data/modules/mruby/include/mruby/gc.h +17 -0
  1165. data/modules/mruby/include/mruby/hash.h +54 -0
  1166. data/modules/mruby/include/mruby/irep.h +40 -0
  1167. data/modules/mruby/include/mruby/khash.h +257 -0
  1168. data/modules/mruby/include/mruby/numeric.h +32 -0
  1169. data/modules/mruby/include/mruby/proc.h +62 -0
  1170. data/modules/mruby/include/mruby/range.h +35 -0
  1171. data/modules/mruby/include/mruby/string.h +78 -0
  1172. data/modules/mruby/include/mruby/value.h +483 -0
  1173. data/modules/mruby/include/mruby/variable.h +78 -0
  1174. data/modules/mruby/include/mruby.h +388 -0
  1175. data/modules/mruby/minirake +477 -0
  1176. data/modules/mruby/mrbgems/default.gembox +61 -0
  1177. data/modules/mruby/mrbgems/full-core.gembox +9 -0
  1178. data/modules/mruby/mrbgems/mruby-array-ext/mrbgem.rake +4 -0
  1179. data/modules/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +204 -0
  1180. data/modules/mruby/mrbgems/mruby-array-ext/src/array.c +140 -0
  1181. data/modules/mruby/mrbgems/mruby-array-ext/test/array.rb +109 -0
  1182. data/modules/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +5 -0
  1183. data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +365 -0
  1184. data/modules/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +5 -0
  1185. data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +243 -0
  1186. data/modules/mruby/mrbgems/mruby-enum-ext/mrbgem.rake +4 -0
  1187. data/modules/mruby/mrbgems/mruby-enum-ext/mrblib/enum.rb +164 -0
  1188. data/modules/mruby/mrbgems/mruby-enum-ext/test/enum.rb +44 -0
  1189. data/modules/mruby/mrbgems/mruby-eval/mrbgem.rake +4 -0
  1190. data/modules/mruby/mrbgems/mruby-eval/src/eval.c +23 -0
  1191. data/modules/mruby/mrbgems/mruby-fiber/mrbgem.rake +4 -0
  1192. data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +251 -0
  1193. data/modules/mruby/mrbgems/mruby-fiber/test/fiber.rb +64 -0
  1194. data/modules/mruby/mrbgems/mruby-hash-ext/mrbgem.rake +4 -0
  1195. data/modules/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb +13 -0
  1196. data/modules/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +62 -0
  1197. data/modules/mruby/mrbgems/mruby-hash-ext/test/hash.rb +26 -0
  1198. data/modules/mruby/mrbgems/mruby-math/mrbgem.rake +4 -0
  1199. data/modules/mruby/mrbgems/mruby-math/src/math.c +685 -0
  1200. data/modules/mruby/mrbgems/mruby-math/test/math.rb +136 -0
  1201. data/modules/mruby/mrbgems/mruby-numeric-ext/mrbgem.rake +4 -0
  1202. data/modules/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +31 -0
  1203. data/modules/mruby/mrbgems/mruby-numeric-ext/test/numeric.rb +10 -0
  1204. data/modules/mruby/mrbgems/mruby-object-ext/mrbgem.rake +4 -0
  1205. data/modules/mruby/mrbgems/mruby-object-ext/src/object.c +108 -0
  1206. data/modules/mruby/mrbgems/mruby-object-ext/test/nil.rb +11 -0
  1207. data/modules/mruby/mrbgems/mruby-object-ext/test/object.rb +9 -0
  1208. data/modules/mruby/mrbgems/mruby-objectspace/mrbgem.rake +4 -0
  1209. data/modules/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +117 -0
  1210. data/modules/mruby/mrbgems/mruby-objectspace/test/objectspace.rb +38 -0
  1211. data/modules/mruby/mrbgems/mruby-print/mrbgem.rake +4 -0
  1212. data/modules/mruby/mrbgems/mruby-print/mrblib/print.rb +64 -0
  1213. data/modules/mruby/mrbgems/mruby-print/src/print.c +44 -0
  1214. data/modules/mruby/mrbgems/mruby-proc-ext/mrbgem.rake +4 -0
  1215. data/modules/mruby/mrbgems/mruby-proc-ext/mrblib/proc.rb +40 -0
  1216. data/modules/mruby/mrbgems/mruby-proc-ext/src/proc.c +97 -0
  1217. data/modules/mruby/mrbgems/mruby-proc-ext/test/proc.rb +41 -0
  1218. data/modules/mruby/mrbgems/mruby-random/mrbgem.rake +4 -0
  1219. data/modules/mruby/mrbgems/mruby-random/src/mt19937ar.c +193 -0
  1220. data/modules/mruby/mrbgems/mruby-random/src/mt19937ar.h +48 -0
  1221. data/modules/mruby/mrbgems/mruby-random/src/random.c +231 -0
  1222. data/modules/mruby/mrbgems/mruby-random/src/random.h +12 -0
  1223. data/modules/mruby/mrbgems/mruby-random/test/random.rb +32 -0
  1224. data/modules/mruby/mrbgems/mruby-range-ext/mrbgem.rake +4 -0
  1225. data/modules/mruby/mrbgems/mruby-range-ext/src/range.c +141 -0
  1226. data/modules/mruby/mrbgems/mruby-range-ext/test/range.rb +20 -0
  1227. data/modules/mruby/mrbgems/mruby-sprintf/mrbgem.rake +4 -0
  1228. data/modules/mruby/mrbgems/mruby-sprintf/src/kernel.c +30 -0
  1229. data/modules/mruby/mrbgems/mruby-sprintf/src/sprintf.c +1102 -0
  1230. data/modules/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +3 -0
  1231. data/modules/mruby/mrbgems/mruby-string-ext/mrbgem.rake +4 -0
  1232. data/modules/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +52 -0
  1233. data/modules/mruby/mrbgems/mruby-string-ext/src/string.c +175 -0
  1234. data/modules/mruby/mrbgems/mruby-string-ext/test/string.rb +112 -0
  1235. data/modules/mruby/mrbgems/mruby-struct/mrbgem.rake +4 -0
  1236. data/modules/mruby/mrbgems/mruby-struct/mrblib/struct.rb +50 -0
  1237. data/modules/mruby/mrbgems/mruby-struct/src/struct.c +818 -0
  1238. data/modules/mruby/mrbgems/mruby-struct/test/struct.rb +77 -0
  1239. data/modules/mruby/mrbgems/mruby-symbol-ext/mrbgem.rake +4 -0
  1240. data/modules/mruby/mrbgems/mruby-symbol-ext/mrblib/symbol.rb +9 -0
  1241. data/modules/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +55 -0
  1242. data/modules/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +12 -0
  1243. data/modules/mruby/mrbgems/mruby-time/mrbgem.rake +4 -0
  1244. data/modules/mruby/mrbgems/mruby-time/src/time.c +749 -0
  1245. data/modules/mruby/mrbgems/mruby-time/test/time.rb +201 -0
  1246. data/modules/mruby/mrbgems/mruby-toplevel-ext/mrbgem.rake +4 -0
  1247. data/modules/mruby/mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb +11 -0
  1248. data/modules/mruby/mrbgems/mruby-toplevel-ext/test/toplevel.rb +24 -0
  1249. data/modules/mruby/mrblib/array.rb +111 -0
  1250. data/modules/mruby/mrblib/class.rb +26 -0
  1251. data/modules/mruby/mrblib/compar.rb +104 -0
  1252. data/modules/mruby/mrblib/enum.rb +398 -0
  1253. data/modules/mruby/mrblib/error.rb +66 -0
  1254. data/modules/mruby/mrblib/hash.rb +193 -0
  1255. data/modules/mruby/mrblib/init_mrblib.c +14 -0
  1256. data/modules/mruby/mrblib/kernel.rb +46 -0
  1257. data/modules/mruby/mrblib/mrblib.rake +18 -0
  1258. data/modules/mruby/mrblib/numeric.rb +101 -0
  1259. data/modules/mruby/mrblib/print.rb +18 -0
  1260. data/modules/mruby/mrblib/range.rb +40 -0
  1261. data/modules/mruby/mrblib/string.rb +145 -0
  1262. data/modules/mruby/src/array.c +1150 -0
  1263. data/modules/mruby/src/backtrace.c +73 -0
  1264. data/modules/mruby/src/class.c +1942 -0
  1265. data/modules/mruby/src/codegen.c +2864 -0
  1266. data/modules/mruby/src/compar.c +13 -0
  1267. data/modules/mruby/src/crc.c +38 -0
  1268. data/modules/mruby/src/dump.c +542 -0
  1269. data/modules/mruby/src/enum.c +14 -0
  1270. data/modules/mruby/src/error.c +454 -0
  1271. data/modules/mruby/src/error.h +18 -0
  1272. data/modules/mruby/src/etc.c +204 -0
  1273. data/modules/mruby/src/gc.c +1542 -0
  1274. data/modules/mruby/src/hash.c +1261 -0
  1275. data/modules/mruby/src/init.c +62 -0
  1276. data/modules/mruby/src/kernel.c +1105 -0
  1277. data/modules/mruby/src/keywords +50 -0
  1278. data/modules/mruby/src/lex.def +212 -0
  1279. data/modules/mruby/src/load.c +629 -0
  1280. data/modules/mruby/src/mruby_core.rake +28 -0
  1281. data/modules/mruby/src/node.h +117 -0
  1282. data/modules/mruby/src/numeric.c +1418 -0
  1283. data/modules/mruby/src/object.c +593 -0
  1284. data/modules/mruby/src/opcode.h +160 -0
  1285. data/modules/mruby/src/parse.y +6050 -0
  1286. data/modules/mruby/src/pool.c +190 -0
  1287. data/modules/mruby/src/print.c +71 -0
  1288. data/modules/mruby/src/proc.c +209 -0
  1289. data/modules/mruby/src/range.c +442 -0
  1290. data/modules/mruby/src/re.h +13 -0
  1291. data/modules/mruby/src/state.c +200 -0
  1292. data/modules/mruby/src/string.c +2580 -0
  1293. data/modules/mruby/src/symbol.c +456 -0
  1294. data/modules/mruby/src/value_array.h +27 -0
  1295. data/modules/mruby/src/variable.c +1147 -0
  1296. data/modules/mruby/src/vm.c +2129 -0
  1297. data/modules/mruby/tasks/libmruby.rake +18 -0
  1298. data/modules/mruby/tasks/mrbgem_spec.rake +297 -0
  1299. data/modules/mruby/tasks/mrbgems.rake +85 -0
  1300. data/modules/mruby/tasks/mrbgems_test.rake +88 -0
  1301. data/modules/mruby/tasks/mruby_build.rake +211 -0
  1302. data/modules/mruby/tasks/mruby_build_commands.rake +287 -0
  1303. data/modules/mruby/tasks/mruby_build_gem.rake +67 -0
  1304. data/modules/mruby/tasks/ruby_ext.rake +70 -0
  1305. data/modules/mruby/tasks/toolchains/androideabi.rake +126 -0
  1306. data/modules/mruby/tasks/toolchains/clang.rake +8 -0
  1307. data/modules/mruby/tasks/toolchains/gcc.rake +21 -0
  1308. data/modules/mruby/tasks/toolchains/vs2010.rake +3 -0
  1309. data/modules/mruby/tasks/toolchains/vs2012.rake +44 -0
  1310. data/modules/mruby/test/README.md +7 -0
  1311. data/modules/mruby/test/assert.rb +238 -0
  1312. data/modules/mruby/test/driver.c +118 -0
  1313. data/modules/mruby/test/init_mrbtest.c +24 -0
  1314. data/modules/mruby/test/mrbtest.rake +47 -0
  1315. data/modules/mruby/test/report.rb +4 -0
  1316. data/modules/mruby/test/t/argumenterror.rb +21 -0
  1317. data/modules/mruby/test/t/array.rb +309 -0
  1318. data/modules/mruby/test/t/basicobject.rb +11 -0
  1319. data/modules/mruby/test/t/bs_block.rb +489 -0
  1320. data/modules/mruby/test/t/bs_literal.rb +38 -0
  1321. data/modules/mruby/test/t/class.rb +219 -0
  1322. data/modules/mruby/test/t/comparable.rb +72 -0
  1323. data/modules/mruby/test/t/enumerable.rb +108 -0
  1324. data/modules/mruby/test/t/exception.rb +337 -0
  1325. data/modules/mruby/test/t/false.rb +33 -0
  1326. data/modules/mruby/test/t/float.rb +145 -0
  1327. data/modules/mruby/test/t/gc.rb +45 -0
  1328. data/modules/mruby/test/t/hash.rb +310 -0
  1329. data/modules/mruby/test/t/indexerror.rb +10 -0
  1330. data/modules/mruby/test/t/integer.rb +222 -0
  1331. data/modules/mruby/test/t/kernel.rb +425 -0
  1332. data/modules/mruby/test/t/literals.rb +287 -0
  1333. data/modules/mruby/test/t/localjumperror.rb +13 -0
  1334. data/modules/mruby/test/t/methods.rb +109 -0
  1335. data/modules/mruby/test/t/module.rb +344 -0
  1336. data/modules/mruby/test/t/nameerror.rb +32 -0
  1337. data/modules/mruby/test/t/nil.rb +29 -0
  1338. data/modules/mruby/test/t/nomethoderror.rb +13 -0
  1339. data/modules/mruby/test/t/numeric.rb +29 -0
  1340. data/modules/mruby/test/t/object.rb +11 -0
  1341. data/modules/mruby/test/t/proc.rb +56 -0
  1342. data/modules/mruby/test/t/range.rb +82 -0
  1343. data/modules/mruby/test/t/rangeerror.rb +10 -0
  1344. data/modules/mruby/test/t/regexperror.rb +4 -0
  1345. data/modules/mruby/test/t/runtimeerror.rb +6 -0
  1346. data/modules/mruby/test/t/standarderror.rb +10 -0
  1347. data/modules/mruby/test/t/string.rb +483 -0
  1348. data/modules/mruby/test/t/symbol.rb +27 -0
  1349. data/modules/mruby/test/t/syntax.rb +67 -0
  1350. data/modules/mruby/test/t/true.rb +33 -0
  1351. data/modules/mruby/test/t/typeerror.rb +11 -0
  1352. data/modules/mruby/tools/mrbc/mrbc.c +318 -0
  1353. data/modules/mruby/tools/mrbc/mrbc.rake +14 -0
  1354. data/modules/mruby/travis_config.rb +6 -0
  1355. data/modules/mrubymix/LICENSE +21 -0
  1356. data/modules/mrubymix/README.md +6 -0
  1357. data/modules/mrubymix/bin/mrubymix +29 -0
  1358. data/modules/mrubymix/lib/mrubymix.rb +93 -0
  1359. data/modules/mrubymix/mrubymix.gemspec +13 -0
  1360. data/scripts/gen_gems_config.rb +185 -0
  1361. data/scripts/gen_post.rb +104 -0
  1362. data/templates/minimal/Rakefile +36 -0
  1363. data/templates/minimal/app/app.rb +3 -0
  1364. metadata +1408 -0
@@ -0,0 +1,1744 @@
1
+ #!/usr/bin/env python2
2
+ # -*- Mode: python -*-
3
+
4
+ '''
5
+ emcc - compiler helper script
6
+ =============================
7
+
8
+ emcc is a drop-in replacement for a compiler like gcc or clang.
9
+
10
+ Tell your build system to use this instead of the compiler, and similarly
11
+ use emar, emranlib etc. instead of the same command without 'em'.
12
+
13
+ Example uses:
14
+
15
+ * For configure, instead of ./configure, cmake, etc., run emconfigure.py
16
+ with that command as an argument, for example
17
+
18
+ emconfigure.py ./configure [options]
19
+
20
+ emconfigure.py is a tiny script that just sets some environment vars
21
+ as a convenience. The command just shown is equivalent to
22
+
23
+ EMMAKEN_JUST_CONFIGURE=1 RANLIB=PATH/emranlib AR=PATH/emar CXX=PATH/em++ CC=PATH/emcc ./configure [options]
24
+
25
+ where PATH is the path to this file.
26
+
27
+ EMMAKEN_JUST_CONFIGURE tells emcc that it is being run in ./configure,
28
+ so it should relay everything to gcc/g++. You should not define that when
29
+ running make, of course.
30
+
31
+ After setting that up, run your build system normally.
32
+
33
+ Note the appearance of em++ instead of emcc
34
+ for the C++ compiler. This is needed for cases where we get
35
+ a C++ file with a C extension, in which case CMake can be told
36
+ to run g++ on it despite the .c extension, see
37
+
38
+ https://github.com/kripken/emscripten/issues/6
39
+
40
+ (If a similar situation occurs with ./configure, you can do the same there too.)
41
+
42
+ emcc can be influenced by a few environment variables:
43
+
44
+ EMMAKEN_NO_SDK - Will tell emcc *not* to use the emscripten headers. Instead
45
+ your system headers will be used.
46
+
47
+ EMMAKEN_COMPILER - The compiler to be used, if you don't want the default clang.
48
+ '''
49
+
50
+ import os, sys, shutil, tempfile, subprocess, shlex, time, re, logging
51
+ from subprocess import PIPE, STDOUT
52
+ from tools import shared, jsrun
53
+ from tools.shared import Compression, execute, suffix, unsuffixed, unsuffixed_basename
54
+ from tools.response_file import read_response_file
55
+
56
+ # Mapping of emcc opt levels to llvm opt levels. We use llvm opt level 3 in emcc opt
57
+ # levels 2 and 3 (emcc 3 is unsafe opts, so unsuitable for the only level to get
58
+ # llvm opt level 3, and speed-wise emcc level 2 is already the slowest/most optimizing
59
+ # level)
60
+ LLVM_OPT_LEVEL = {
61
+ 0: 0,
62
+ 1: 1,
63
+ 2: 3,
64
+ 3: 3,
65
+ }
66
+
67
+ DEBUG = os.environ.get('EMCC_DEBUG')
68
+ if DEBUG == "0":
69
+ DEBUG = None
70
+
71
+ TEMP_DIR = os.environ.get('EMCC_TEMP_DIR')
72
+ LEAVE_INPUTS_RAW = os.environ.get('EMCC_LEAVE_INPUTS_RAW') # Do not compile .ll files into .bc, just compile them with emscripten directly
73
+ # Not recommended, this is mainly for the test runner, or if you have some other
74
+ # specific need.
75
+ # One major limitation with this mode is that libc and libc++ cannot be
76
+ # added in. Also, LLVM optimizations will not be done, nor dead code elimination
77
+ AUTODEBUG = os.environ.get('EMCC_AUTODEBUG') # If set to 1, we will run the autodebugger (the automatic debugging tool, see tools/autodebugger).
78
+ # Note that this will disable inclusion of libraries. This is useful because including
79
+ # dlmalloc makes it hard to compare native and js builds
80
+ EMCC_CFLAGS = os.environ.get('EMCC_CFLAGS') # Additional compiler flags that we treat as if they were passed to us on the commandline
81
+
82
+ logging.debug('invocation: ' + ' '.join(sys.argv) + (' + ' + EMCC_CFLAGS if EMCC_CFLAGS else ''))
83
+ if EMCC_CFLAGS: sys.argv.append(EMCC_CFLAGS)
84
+
85
+ if DEBUG and LEAVE_INPUTS_RAW: logging.warning('leaving inputs raw')
86
+
87
+ stdout = PIPE if not DEBUG else None # suppress output of child processes
88
+ stderr = PIPE if not DEBUG else None # unless we are in DEBUG mode
89
+
90
+ shared.check_sanity(force=DEBUG)
91
+
92
+ # Handle some global flags
93
+
94
+ if len(sys.argv) == 1:
95
+ logging.warning('no input files')
96
+ exit(1)
97
+
98
+ # read response files very early on
99
+ response_file = True
100
+ while response_file:
101
+ response_file = None
102
+ for index in range(1, len(sys.argv)):
103
+ if sys.argv[index][0] == '@':
104
+ # found one, loop again next time
105
+ response_file = True
106
+ extra_args = read_response_file(sys.argv[index])
107
+ # slice in extra_args in place of the response file arg
108
+ sys.argv[index:index+1] = extra_args
109
+ break
110
+
111
+ if len(sys.argv) == 1 or '--help' in sys.argv:
112
+ this = os.path.basename('em++' if os.environ.get('EMMAKEN_CXX') else 'emcc')
113
+
114
+ print '''%s [options] file...
115
+
116
+ Most normal gcc/g++ options will work, for example:
117
+ --help Display this information
118
+ --version Display compiler version information
119
+
120
+ Options that are modified or new in %s include:
121
+ -O0 No optimizations (default)
122
+ -O1 Simple optimizations, including asm.js, LLVM -O1
123
+ optimizations, and no runtime assertions
124
+ or C++ exception catching (to re-enable
125
+ C++ exception catching, use
126
+ -s DISABLE_EXCEPTION_CATCHING=0 ).
127
+ (For details on the affects of different
128
+ opt levels, see apply_opt_level() in
129
+ tools/shared.py and also src/settings.js.)
130
+ -O2 As -O1, plus the relooper (loop recreation),
131
+ LLVM -O2 optimizations, and
132
+
133
+ -s ALIASING_FUNCTION_POINTERS=1
134
+
135
+ -O3 As -O2, plus dangerous optimizations that may
136
+ break the generated code! This adds
137
+
138
+ -s FORCE_ALIGNED_MEMORY=1
139
+ -s DOUBLE_MODE=0
140
+ -s PRECISE_I64_MATH=0
141
+ --closure 1
142
+ --llvm-lto 3
143
+
144
+ This is not recommended at all. A better idea
145
+ is to try each of these separately on top of
146
+ -O2 to see what works. See the wiki and
147
+ src/settings.js (for the -s options) for more
148
+ information.
149
+
150
+ -s OPTION=VALUE JavaScript code generation option passed
151
+ into the emscripten compiler. For the
152
+ available options, see src/settings.js
153
+ Note that for options that are lists, you
154
+ need quotation marks in most shells, for
155
+ example
156
+
157
+ -s RUNTIME_LINKED_LIBS="['liblib.so']"
158
+
159
+ or
160
+
161
+ -s "RUNTIME_LINKED_LIBS=['liblib.so']"
162
+
163
+ (without the external "s in either of those,
164
+ you would get an error)
165
+
166
+ You can also specify a file from which the
167
+ value would be read, for example,
168
+
169
+ -s DEAD_FUNCTIONS=@/path/to/file
170
+
171
+ The contents of /path/to/file will be read,
172
+ JSON.parsed and set into DEAD_FUNCTIONS (so
173
+ the file could contain
174
+
175
+ ["_func1", "func2"]
176
+
177
+ ). Note that the path must be absolute, not
178
+ relative.
179
+
180
+ -g Use debug info. When compiling to bitcode,
181
+ this is the same as in clang and gcc, it
182
+ adds debug info to the object files. When
183
+ compiling from source to JS or bitcode to JS,
184
+ it is equivalent to -g3 (keep code as debuggable
185
+ as possible, except for discarding LLVM
186
+ debug info, so no C/C++ line numbers; use
187
+ -g4 to get line number debugging info in JS).
188
+
189
+ -g<level> When compiling from bitcode to JS, we can
190
+ keep the code debuggable to different
191
+ degrees. Each of these levels builds on the
192
+ previous:
193
+
194
+ -g0 Make no effort to keep code debuggable.
195
+ Will discard LLVM debug info. (default
196
+ in -O1+)
197
+ -g1 Preserve (do not minify) whitespace
198
+ -g2 Preserve function names
199
+ -g3 Preserve variable names
200
+ -g4 Preserve LLVM debug info (if -g was
201
+ used when compiling the C/C++ sources),
202
+ show line number debug comments, and
203
+ generate source maps. This is the highest
204
+ level of debuggability. Note that this
205
+ may make -O1 and above significantly
206
+ slower because JS optimization will be
207
+ limited to 1 core. (default in -O0)
208
+
209
+ --typed-arrays <mode> 0: No typed arrays
210
+ 1: Parallel typed arrays
211
+ 2: Shared (C-like) typed arrays (default)
212
+
213
+ --llvm-opts <level> 0: No LLVM optimizations (default in -O0)
214
+ 1: -O1 LLVM optimizations (default in -O1)
215
+ 2: -O2 LLVM optimizations
216
+ 3: -O3 LLVM optimizations (default in -O2+)
217
+
218
+ --llvm-lto <level> 0: No LLVM LTO (default)
219
+ 1: LLVM LTO is performed
220
+ 2: We combine all the bitcode and run LLVM opt -O3
221
+ on that (which optimizes across modules, but is
222
+ not the same as normal LTO), but do not do normal
223
+ LTO
224
+ 3: We do both 2 and then 1
225
+ Note: If LLVM optimizations are not run
226
+ (see --llvm-opts), setting this has no
227
+ effect.
228
+
229
+ --closure <on> 0: No closure compiler (default in -O2 and below)
230
+ 1: Run closure compiler. This greatly reduces
231
+ code size and may in some cases increase
232
+ runtime speed (although the opposite can also
233
+ occur). Note that it takes time to run, and
234
+ may require some changes to the code. This
235
+ is run by default in -O3.
236
+
237
+ In asm.js mode, closure will only be used on the
238
+ 'shell' code around the compiled code (the
239
+ compiled code will be processed by the custom
240
+ asm.js minifier).
241
+
242
+ Note: If closure compiler hits an out-of-memory,
243
+ try adjusting JAVA_HEAP_SIZE in the environment
244
+ (for example, to 4096m for 4GB).
245
+
246
+ --js-transform <cmd> <cmd> will be called on the generated code
247
+ before it is optimized. This lets you modify
248
+ the JavaScript, for example adding some code
249
+ or removing some code, in a way that those
250
+ modifications will be optimized together with
251
+ the generated code properly. <cmd> will be
252
+ called with the filename of the generated
253
+ code as a parameter; to modify the code, you
254
+ can read the original data and then append to
255
+ it or overwrite it with the modified data.
256
+ <cmd> is interpreted as a space-separated
257
+ list of arguments, for example, <cmd> of
258
+ "python processor.py" will cause a python
259
+ script to be run.
260
+
261
+ --pre-js <file> A file whose contents are added before the
262
+ generated code. This is done *before*
263
+ optimization, so it will be minified
264
+ properly if closure compiler is run.
265
+
266
+ --post-js <file> A file whose contents are added after the
267
+ generated code This is done *before*
268
+ optimization, so it will be minified
269
+ properly if closure compiler is run.
270
+
271
+ --embed-file <file> A file to embed inside the generated
272
+ JavaScript. The compiled code will be able
273
+ to access the file in the current directory
274
+ with the same name as given here. So if
275
+ you do --embed-file dir/file.dat, then
276
+ (1) dir/file.dat must exist relative to
277
+ where you run emcc, and (2) your compiled
278
+ code will be able to find the file by
279
+ reading that same path, dir/file.dat.
280
+ If a directory is passed here, its entire
281
+ contents will be embedded.
282
+
283
+ --preload-file <name> A file to preload before running the
284
+ compiled code asynchronously. Otherwise
285
+ similar to --embed-file, except that this
286
+ option is only relevant when generating
287
+ HTML (it uses asynchronous binary XHRs),
288
+ or JS that will be used in a web page.
289
+ If a directory is passed here, its entire
290
+ contents will be preloaded.
291
+ Preloaded files are stored in filename.data,
292
+ where filename.html is the main file you
293
+ are compiling to. To run your code, you
294
+ will need both the .html and the .data.
295
+
296
+ emcc runs tools/file_packager.py to do the
297
+ actual packaging of embedded and preloaded
298
+ files. You can run the file packager yourself
299
+ if you want, see docs inside that file. You
300
+ should then put the output of the file packager
301
+ in an emcc --pre-js, so that it executes before
302
+ your main compiled code (or run it before in
303
+ some other way).
304
+
305
+ --compression <codec> Compress both the compiled code and embedded/
306
+ preloaded files. <codec> should be a triple,
307
+
308
+ <native_encoder>,<js_decoder>,<js_name>
309
+
310
+ where native_encoder is a native executable
311
+ that compresses stdin to stdout (the simplest
312
+ possible interface), js_decoder is a
313
+ JavaScript file that implements a decoder,
314
+ and js_name is the name of the function to
315
+ call in the decoder file (which should
316
+ receive an array/typed array and return
317
+ an array/typed array.
318
+ Compression only works when generating HTML.
319
+ When compression is on, all filed specified
320
+ to be preloaded are compressed in one big
321
+ archive, which is given the same name as the
322
+ output HTML but with suffix .data.compress
323
+
324
+ --minify 0 Identical to -g1
325
+
326
+ --split <size> Splits the resulting javascript file into pieces
327
+ to ease debugging. This option only works if
328
+ Javascript is generated (target -o <name>.js).
329
+ Files with function declarations must be loaded
330
+ before main file upon execution.
331
+
332
+ Without "-g" option:
333
+ Creates files with function declarations up
334
+ to the given size with the suffix
335
+ "_functions.partxxx.js" and a main file with
336
+ the suffix ".js".
337
+
338
+ With "-g" option:
339
+ Recreates the directory structure of the C
340
+ source files and stores function declarations
341
+ in their respective C files with the suffix
342
+ ".js". If such a file exceeds the given size,
343
+ files with the suffix ".partxxx.js" are created.
344
+ The main file resides in the base directory and
345
+ has the suffix ".js".
346
+
347
+ --bind Compiles the source code using the "embind"
348
+ bindings approach, which connects C/C++ and JS.
349
+
350
+ --ignore-dynamic-linking Normally emcc will treat dynamic linking like
351
+ static linking, by linking in the code from
352
+ the dynamic library. This fails if the same
353
+ dynamic library is linked more than once.
354
+ With this option, dynamic linking is ignored,
355
+ which allows the build system to proceed without
356
+ errors. However, you will need to manually
357
+ link to the shared libraries later on yourself.
358
+
359
+ --shell-file <path> The path name to a skeleton HTML file used
360
+ when generating HTML output. The shell file
361
+ used needs to have this token inside it:
362
+ {{{ SCRIPT_CODE }}}
363
+ Note that this argument is ignored if a
364
+ target other than HTML is specified using
365
+ the -o option.
366
+
367
+ --js-library <lib> A JavaScript library to use in addition to
368
+ those in Emscripten's src/library_*
369
+
370
+ -v Turns on verbose output. This will pass
371
+ -v to Clang, and also enable EMCC_DEBUG
372
+ to details emcc's operations
373
+
374
+ --jcache Use a JavaScript cache. This is disabled by
375
+ default. When enabled, emcc will store the
376
+ results of compilation in a cache and check
377
+ the cache when compiling later, something
378
+ like what ccache does. This allows incremental
379
+ builds - where you are compiling a large
380
+ program but only modified a small part of it -
381
+ to be much faster (at the cost of more disk
382
+ IO for cache accesses). Note that you need
383
+ to enable --jcache for both loading and saving
384
+ of data, so you must enable it on a full build
385
+ for a later incremental build (where you also
386
+ enable it) to be sped up.
387
+
388
+ Caching works separately on 4 parts of compilation:
389
+ 'pre' which is types and global variables; that
390
+ information is then fed into 'funcs' which are
391
+ the functions (which we parallelize), and then
392
+ 'post' which adds final information based on
393
+ the functions (e.g., do we need long64 support
394
+ code). Finally, 'jsfuncs' are JavaScript-level
395
+ optimizations. Each of the 4 parts can be cached
396
+ separately, but note that they can affect each
397
+ other: If you recompile a single C++ file that
398
+ changes a global variable - e.g., adds, removes
399
+ or modifies a global variable, say by adding
400
+ a printf or by adding a compile-time timestamp,
401
+ then 'pre' cannot be loaded from the cache. And
402
+ since 'pre's output is sent to 'funcs' and 'post',
403
+ they will get invalidated as well, and only
404
+ 'jsfuncs' will be cached. So avoid modifying
405
+ globals to let caching work fully.
406
+
407
+ To work around the problem mentioned in the
408
+ previous paragraph, you can use
409
+
410
+ emscripten_jcache_printf
411
+
412
+ when adding debug printfs to your code. That
413
+ function is specially preprocessed so that it
414
+ does not create a constant string global for
415
+ its first argument. See emscripten.h for more
416
+ details. Note in particular that you need to
417
+ already have a call to that function in your
418
+ code *before* you add one and do an incremental
419
+ build, so that adding an external reference
420
+ (also a global property) does not invalidate
421
+ everything.
422
+
423
+ Note that you should use -g during the linking
424
+ stage (bitcode to JS), for jcache to work
425
+ (otherwise, JS minification can confuse it).
426
+
427
+ --clear-cache Manually clears the cache of compiled
428
+ emscripten system libraries (libc++,
429
+ libc++abi, libc). This is normally
430
+ handled automatically, but if you update
431
+ llvm in-place (instead of having a different
432
+ directory for a new version), the caching
433
+ mechanism can get confused. Clearing the
434
+ cache can fix weird problems related to
435
+ cache incompatibilities, like clang failing
436
+ to link with library files. This also clears
437
+ other cached data like the jcache and
438
+ the bootstrapped relooper. After the cache
439
+ is cleared, this process will exit.
440
+
441
+ --save-bc PATH When compiling to JavaScript or HTML, this
442
+ option will save a copy of the bitcode to
443
+ the specified path. The bitcode will include
444
+ all files being linked, including standard
445
+ libraries, and after any link-time optimizations
446
+ (if any).
447
+
448
+ --memory-init-file <on> If on, we generate a separate memory initialization
449
+ file. This is more efficient than storing the
450
+ memory initialization data embedded inside
451
+ JavaScript as text. (default is off)
452
+
453
+ The target file, if specified (-o <target>), defines what will
454
+ be generated:
455
+
456
+ <name>.js JavaScript
457
+ <name>.html HTML with embedded JavaScript
458
+ <name>.bc LLVM bitcode (default)
459
+ <name>.o LLVM bitcode (same as .bc)
460
+
461
+ (Note that if --memory-init-file is used, then in addition to a
462
+ .js or .html file that is generated, a .mem file will also appear.)
463
+
464
+ The -c option (which tells gcc not to run the linker) will
465
+ cause LLVM bitcode to be generated, as %s only generates
466
+ JavaScript in the final linking stage of building.
467
+
468
+ The input file(s) can be either source code files that
469
+ Clang can handle (C or C++), LLVM bitcode in binary form,
470
+ or LLVM assembly files in human-readable form.
471
+
472
+ emcc is affected by several environment variables. For details, view
473
+ the source of emcc (search for 'os.environ').
474
+
475
+ emcc: supported targets: llvm bitcode, javascript, NOT elf
476
+ (autoconf likes to see elf above to enable shared object support)
477
+ ''' % (this, this, this)
478
+ exit(0)
479
+
480
+ elif sys.argv[1] == '--version':
481
+ revision = '(unknown revision)'
482
+ here = os.getcwd()
483
+ os.chdir(shared.path_from_root())
484
+ try:
485
+ revision = execute(['git', 'show'], stdout=PIPE, stderr=PIPE)[0].split('\n')[0]
486
+ except:
487
+ pass
488
+ finally:
489
+ os.chdir(here)
490
+ print '''emcc (Emscripten GCC-like replacement) %s (%s)
491
+ Copyright (C) 2013 the Emscripten authors (see AUTHORS.txt)
492
+ This is free and open source software under the MIT license.
493
+ There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
494
+ ''' % (shared.EMSCRIPTEN_VERSION, revision)
495
+ exit(0)
496
+
497
+ elif len(sys.argv) == 2 and sys.argv[1] == '-v': # -v with no inputs
498
+ print 'emcc (Emscripten GCC-like replacement + linker emulating GNU ld ) 2.0'
499
+ exit(subprocess.call([shared.CLANG, '-v']))
500
+
501
+ def is_minus_s_for_emcc(newargs,i):
502
+ assert newargs[i] == '-s'
503
+ if i+1 < len(newargs) and '=' in newargs[i+1]: # -s OPT=VALUE is for us, -s by itself is a linker option
504
+ return True
505
+ else:
506
+ logging.warning('treating -s as linker option and not as -s OPT=VALUE for js compilation')
507
+ return False
508
+
509
+ # If this is a configure-type thing, do not compile to JavaScript, instead use clang
510
+ # to compile to a native binary (using our headers, so things make sense later)
511
+ CONFIGURE_CONFIG = (os.environ.get('EMMAKEN_JUST_CONFIGURE') or 'conftest.c' in sys.argv) and not os.environ.get('EMMAKEN_JUST_CONFIGURE_RECURSE')
512
+ CMAKE_CONFIG = 'CMakeFiles/cmTryCompileExec.dir' in ' '.join(sys.argv)# or 'CMakeCCompilerId' in ' '.join(sys.argv)
513
+ if CONFIGURE_CONFIG or CMAKE_CONFIG:
514
+ debug_configure = 0 # XXX use this to debug configure stuff. ./configure's generally hide our normal output including stderr so we write to a file
515
+ use_js = os.environ.get('EMCONFIGURE_JS') # whether we fake configure tests using clang - the local, native compiler - or not. if not we generate JS and use node with a shebang
516
+ # neither approach is perfect, you can try both, but may need to edit configure scripts in some cases
517
+ # XXX False is not fully tested yet
518
+
519
+ if debug_configure:
520
+ tempout = '/tmp/emscripten_temp/out'
521
+ if not os.path.exists(tempout):
522
+ open(tempout, 'w').write('//\n')
523
+
524
+ src = None
525
+ for arg in sys.argv:
526
+ if arg.endswith('.c'):
527
+ try:
528
+ src = open(arg).read()
529
+ if debug_configure: open(tempout, 'a').write('============= ' + arg + '\n' + src + '\n=============\n\n')
530
+ except:
531
+ pass
532
+ if arg.endswith('.s'):
533
+ if debug_configure: open(tempout, 'a').write('(compiling .s assembly, must use clang\n')
534
+ use_js = 0
535
+
536
+ if src:
537
+ if 'fopen' in src and '"w"' in src:
538
+ use_js = 0 # we cannot write to files from js!
539
+ if debug_configure: open(tempout, 'a').write('Forcing clang since uses fopen to write\n')
540
+
541
+ compiler = os.environ.get('CONFIGURE_CC') or (shared.CLANG if not use_js else shared.EMCC) # if CONFIGURE_CC is defined, use that. let's you use local gcc etc. if you need that
542
+ if not ('CXXCompiler' in ' '.join(sys.argv) or os.environ.get('EMMAKEN_CXX')):
543
+ compiler = shared.to_cc(compiler)
544
+
545
+ def filter_emscripten_options(argv):
546
+ idx = 0
547
+ skip_next = False
548
+ for el in argv:
549
+ if skip_next:
550
+ skip_next = False
551
+ idx += 1
552
+ continue
553
+ if not use_js and el == '-s' and is_minus_s_for_emcc(argv, idx): # skip -s X=Y if not using js for configure
554
+ skip_next = True
555
+ else:
556
+ yield el
557
+ idx += 1
558
+
559
+ cmd = [compiler] + list(filter_emscripten_options(sys.argv[1:]))
560
+ if not use_js: cmd += shared.EMSDK_OPTS + ['-DEMSCRIPTEN']
561
+ if use_js: cmd += ['-s', 'ERROR_ON_UNDEFINED_SYMBOLS=1'] # configure tests should fail when an undefined symbol exists
562
+
563
+ logging.debug('just configuring: ' + ' '.join(cmd))
564
+ if debug_configure: open(tempout, 'a').write('emcc, just configuring: ' + ' '.join(cmd) + '\n\n')
565
+
566
+ if not use_js:
567
+ exit(subprocess.call(cmd))
568
+ else:
569
+ only_object = '-c' in cmd
570
+ target = None
571
+ for i in range(len(cmd)-1):
572
+ if cmd[i] == '-o':
573
+ if not only_object:
574
+ cmd[i+1] += '.js'
575
+ target = cmd[i+1]
576
+ break
577
+ print 't1', target
578
+ if not target:
579
+ target = 'a.out.js'
580
+ print 't2', target, only_object
581
+ os.environ['EMMAKEN_JUST_CONFIGURE_RECURSE'] = '1'
582
+ ret = subprocess.call(cmd)
583
+ os.environ['EMMAKEN_JUST_CONFIGURE_RECURSE'] = ''
584
+ if not os.path.exists(target): exit(1)
585
+ if target.endswith('.js'):
586
+ shutil.copyfile(target, target[:-3])
587
+ target = target[:-3]
588
+ src = open(target).read()
589
+ full_node = ' '.join(shared.listify(shared.NODE_JS))
590
+ if os.path.sep not in full_node:
591
+ full_node = '/usr/bin/' + full_node # TODO: use whereis etc. And how about non-*NIX?
592
+ open(target, 'w').write('#!' + full_node + '\n' + src) # add shebang
593
+ import stat
594
+ os.chmod(target, stat.S_IMODE(os.stat(target).st_mode) | stat.S_IXUSR) # make executable
595
+ exit(ret)
596
+
597
+ if os.environ.get('EMMAKEN_COMPILER'):
598
+ CXX = os.environ['EMMAKEN_COMPILER']
599
+ else:
600
+ CXX = shared.CLANG
601
+
602
+ CC = shared.to_cc(CXX)
603
+
604
+ # If we got here from a redirection through emmakenxx.py, then force a C++ compiler here
605
+ if os.environ.get('EMMAKEN_CXX'):
606
+ CC = CXX
607
+
608
+ CC_ADDITIONAL_ARGS = shared.COMPILER_OPTS
609
+
610
+ EMMAKEN_CFLAGS = os.environ.get('EMMAKEN_CFLAGS')
611
+ if EMMAKEN_CFLAGS: CC_ADDITIONAL_ARGS += shlex.split(EMMAKEN_CFLAGS)
612
+
613
+ # ---------------- Utilities ---------------
614
+
615
+ SOURCE_SUFFIXES = ('.c', '.cpp', '.cxx', '.cc', '.m', '.mm')
616
+ BITCODE_SUFFIXES = ('.bc', '.o', '.obj')
617
+ DYNAMICLIB_SUFFIXES = ('.dylib', '.so', '.dll')
618
+ STATICLIB_SUFFIXES = ('.a',)
619
+ ASSEMBLY_SUFFIXES = ('.ll',)
620
+ LIB_PREFIXES = ('', 'lib')
621
+
622
+ JS_CONTAINING_SUFFIXES = ('js', 'html')
623
+
624
+ seen_names = {}
625
+ def uniquename(name):
626
+ if name not in seen_names:
627
+ seen_names[name] = str(len(seen_names))
628
+ return unsuffixed(name) + '_' + seen_names[name] + (('.' + suffix(name)) if suffix(name) else '')
629
+
630
+ # ---------------- End configs -------------
631
+
632
+ if len(sys.argv) == 1 or sys.argv[1] in ['x', 't']:
633
+ # noop ar
634
+ logging.debug('just ar')
635
+ sys.exit(0)
636
+
637
+ use_cxx = True
638
+ header = False # pre-compiled headers. We fake that by just copying the file
639
+
640
+ for i in range(1, len(sys.argv)):
641
+ arg = sys.argv[i]
642
+ if not arg.startswith('-'):
643
+ if arg.endswith(('.c','.m')):
644
+ use_cxx = False
645
+ if arg.endswith('.h') and sys.argv[i-1] != '-include':
646
+ header = True
647
+
648
+ if '-M' in sys.argv or '-MM' in sys.argv:
649
+ # Just output dependencies, do not compile. Warning: clang and gcc behave differently with -MF! (clang seems to not recognize it)
650
+ cmd = [CC] + shared.COMPILER_OPTS + sys.argv[1:]
651
+ logging.debug('just dependencies: ' + ' '.join(cmd))
652
+ exit(subprocess.call(cmd))
653
+
654
+ # Check if a target is specified
655
+ target = None
656
+ for i in range(len(sys.argv)-1):
657
+ if sys.argv[i].startswith('-o='):
658
+ raise Exception('Invalid syntax: do not use -o=X, use -o X')
659
+
660
+ if sys.argv[i] == '-o':
661
+ target = sys.argv[i+1]
662
+ sys.argv = sys.argv[:i] + sys.argv[i+2:]
663
+ break
664
+
665
+ specified_target = target
666
+ target = specified_target if specified_target is not None else 'a.out.js' # specified_target is the user-specified one, target is what we will generate
667
+ target_basename = unsuffixed_basename(target)
668
+
669
+ if '.' in target:
670
+ final_suffix = target.split('.')[-1]
671
+ else:
672
+ final_suffix = ''
673
+
674
+ if header: # header or such
675
+ if len(sys.argv) >= 3: # if there is a source and a target, then copy, otherwise do nothing
676
+ sys.argv = filter(lambda arg: not arg.startswith('-I'), sys.argv)
677
+ logging.debug('Just copy:' + sys.argv[-1] + target)
678
+ shutil.copy(sys.argv[-1], target)
679
+ else:
680
+ logging.debug('No-op.')
681
+ exit(0)
682
+
683
+ if TEMP_DIR:
684
+ temp_dir = TEMP_DIR
685
+ if os.path.exists(temp_dir):
686
+ shutil.rmtree(temp_dir) # clear it
687
+ os.makedirs(temp_dir)
688
+ else:
689
+ temp_root = shared.TEMP_DIR
690
+ if not os.path.exists(temp_root):
691
+ os.makedirs(temp_root)
692
+ temp_dir = tempfile.mkdtemp(dir=temp_root)
693
+
694
+ def in_temp(name):
695
+ return os.path.join(temp_dir, os.path.basename(name))
696
+
697
+ try:
698
+ call = CXX if use_cxx else CC
699
+
700
+ ## Parse args
701
+
702
+ newargs = sys.argv[1:]
703
+
704
+ opt_level = 0
705
+ debug_level = 0
706
+ llvm_opts = None
707
+ llvm_lto = None
708
+ closure = None
709
+ js_transform = None
710
+ pre_js = ''
711
+ post_js = ''
712
+ split_js_file = None
713
+ preload_files = []
714
+ embed_files = []
715
+ compression = None
716
+ ignore_dynamic_linking = False
717
+ shell_path = shared.path_from_root('src', 'shell.html')
718
+ js_libraries = []
719
+ bind = False
720
+ jcache = False
721
+ save_bc = False
722
+ memory_init_file = False
723
+ use_preload_cache = False
724
+
725
+ if use_cxx:
726
+ default_cxx_std = '-std=c++03' # Enforce a consistent C++ standard when compiling .cpp files, if user does not specify one on the cmdline.
727
+ else:
728
+ default_cxx_std = '' # Compiling C code with .c files, don't enforce a default C++ std.
729
+
730
+ def check_bad_eq(arg):
731
+ assert '=' not in arg, 'Invalid parameter (do not use "=" with "--" options)'
732
+
733
+ absolute_warning_shown = False
734
+
735
+ settings_changes = []
736
+
737
+ def validate_arg_level(level_string, max_level, err_msg):
738
+ try:
739
+ level = int(level_string)
740
+ assert 0 <= level <= max_level
741
+ except:
742
+ raise Exception(err_msg)
743
+ return level
744
+
745
+ for i in range(len(newargs)):
746
+ newargs[i] = newargs[i].strip() # On Windows Vista (and possibly others), excessive spaces in the command line leak into the items in this array, so trim e.g. 'foo.cpp ' -> 'foo.cpp'
747
+ if newargs[i].startswith('-O'):
748
+ # Let -O default to -O2, which is what gcc does.
749
+ requested_level = newargs[i][2:] or '2'
750
+ if requested_level == 's':
751
+ requested_level = 2
752
+ settings_changes.append('INLINING_LIMIT=50')
753
+ opt_level = validate_arg_level(requested_level, 3, 'Invalid optimization level: ' + newargs[i])
754
+ newargs[i] = ''
755
+ elif newargs[i].startswith('--llvm-opts'):
756
+ check_bad_eq(newargs[i])
757
+ llvm_opts = eval(newargs[i+1])
758
+ newargs[i] = ''
759
+ newargs[i+1] = ''
760
+ elif newargs[i].startswith('--llvm-lto'):
761
+ check_bad_eq(newargs[i])
762
+ llvm_lto = eval(newargs[i+1])
763
+ newargs[i] = ''
764
+ newargs[i+1] = ''
765
+ elif newargs[i].startswith('--closure'):
766
+ check_bad_eq(newargs[i])
767
+ closure = int(newargs[i+1])
768
+ newargs[i] = ''
769
+ newargs[i+1] = ''
770
+ elif newargs[i].startswith('--js-transform'):
771
+ check_bad_eq(newargs[i])
772
+ js_transform = newargs[i+1]
773
+ newargs[i] = ''
774
+ newargs[i+1] = ''
775
+ elif newargs[i].startswith('--pre-js'):
776
+ check_bad_eq(newargs[i])
777
+ pre_js += open(newargs[i+1]).read() + '\n'
778
+ newargs[i] = ''
779
+ newargs[i+1] = ''
780
+ elif newargs[i].startswith('--post-js'):
781
+ check_bad_eq(newargs[i])
782
+ post_js += open(newargs[i+1]).read() + '\n'
783
+ newargs[i] = ''
784
+ newargs[i+1] = ''
785
+ elif newargs[i].startswith('--minify'):
786
+ check_bad_eq(newargs[i])
787
+ debug_level = max(1, debug_level)
788
+ newargs[i] = ''
789
+ newargs[i+1] = ''
790
+ elif newargs[i].startswith('--split'):
791
+ check_bad_eq(newargs[i])
792
+ split_js_file = int(newargs[i+1])
793
+ newargs[i] = ''
794
+ newargs[i+1] = ''
795
+ elif newargs[i].startswith('-g'):
796
+ requested_level = newargs[i][2:] or '3'
797
+ debug_level = validate_arg_level(requested_level, 4, 'Invalid debug level: ' + newargs[i])
798
+ newargs[i] = '-g' # we'll need this to get LLVM debug info
799
+ elif newargs[i] == '--bind':
800
+ bind = True
801
+ newargs[i] = ''
802
+ if default_cxx_std:
803
+ default_cxx_std = '-std=c++11' # Force C++11 for embind code, but only if user has not explicitly overridden a standard.
804
+ elif newargs[i].startswith('-std='):
805
+ default_cxx_std = '' # User specified a standard to use, clear Emscripten from specifying it.
806
+ elif newargs[i].startswith('--embed-file'):
807
+ check_bad_eq(newargs[i])
808
+ embed_files.append(newargs[i+1])
809
+ newargs[i] = ''
810
+ newargs[i+1] = ''
811
+ elif newargs[i].startswith('--preload-file'):
812
+ check_bad_eq(newargs[i])
813
+ preload_files.append(newargs[i+1])
814
+ newargs[i] = ''
815
+ newargs[i+1] = ''
816
+ elif newargs[i].startswith('--compression'):
817
+ check_bad_eq(newargs[i])
818
+ parts = newargs[i+1].split(',')
819
+ assert len(parts) == 3, '--compression requires specifying native_encoder,js_decoder,js_name - see emcc --help. got: %s' % newargs[i+1]
820
+ Compression.encoder = parts[0]
821
+ Compression.decoder = parts[1]
822
+ Compression.js_name = parts[2]
823
+ assert os.path.exists(Compression.encoder), 'native encoder %s does not exist' % Compression.encoder
824
+ assert os.path.exists(Compression.decoder), 'js decoder %s does not exist' % Compression.decoder
825
+ Compression.on = True
826
+ newargs[i] = ''
827
+ newargs[i+1] = ''
828
+ elif newargs[i].startswith('--use-preload-cache'):
829
+ use_preload_cache = True
830
+ newargs[i] = ''
831
+ elif newargs[i] == '--ignore-dynamic-linking':
832
+ ignore_dynamic_linking = True
833
+ newargs[i] = ''
834
+ elif newargs[i] == '-v':
835
+ shared.COMPILER_OPTS += ['-v']
836
+ os.environ['EMCC_DEBUG'] = '1' # send to child processes too
837
+ if DEBUG != 1:
838
+ # swap in debug logging
839
+ DEBUG = 1
840
+ shared.set_logging()
841
+ logging.debug('invocation: ' + ' '.join(sys.argv))
842
+ shared.apply_configuration() # reset config to pick up change
843
+ newargs[i] = ''
844
+ elif newargs[i].startswith('--shell-file'):
845
+ check_bad_eq(newargs[i])
846
+ shell_path = newargs[i+1]
847
+ newargs[i] = ''
848
+ newargs[i+1] = ''
849
+ elif newargs[i].startswith('--js-library'):
850
+ check_bad_eq(newargs[i])
851
+ js_libraries.append(newargs[i+1])
852
+ newargs[i] = ''
853
+ newargs[i+1] = ''
854
+ elif newargs[i] == '--remove-duplicates':
855
+ logging.warning ('--remove-duplicates is deprecated as it is no longer needed. If you cannot link without it, file a bug with a testcase')
856
+ newargs[i] = ''
857
+ elif newargs[i] == '--jcache':
858
+ jcache = True
859
+ newargs[i] = ''
860
+ elif newargs[i] == '--clear-cache':
861
+ newargs[i] = ''
862
+ logging.warning('clearing cache')
863
+ shared.Cache.erase()
864
+ sys.exit(0)
865
+ elif newargs[i] == '--save-bc':
866
+ check_bad_eq(newargs[i])
867
+ save_bc = newargs[i+1]
868
+ newargs[i] = ''
869
+ newargs[i+1] = ''
870
+ elif newargs[i] == '--memory-init-file':
871
+ check_bad_eq(newargs[i])
872
+ memory_init_file = int(newargs[i+1])
873
+ newargs[i] = ''
874
+ newargs[i+1] = ''
875
+ elif newargs[i].startswith(('-I', '-L')):
876
+ path_name = newargs[i][2:]
877
+ if not absolute_warning_shown and os.path.isabs(path_name):
878
+ logging.warning ('-I or -L of an absolute path "' + newargs[i] + '" encountered. If this is to a local system header/library, it may cause problems (local system files make sense for compiling natively on your system, but not necessarily to JavaScript)') # Of course an absolute path to a non-system-specific library or header is fine, and you can ignore this warning. The danger are system headers that are e.g. x86 specific and nonportable. The emscripten bundled headers are modified to be portable, local system ones are generally not
879
+ absolute_warning_shown = True
880
+ newargs = [ arg for arg in newargs if arg is not '' ]
881
+
882
+ # If user did not specify a default -std for C++ code, specify the emscripten default.
883
+ if default_cxx_std:
884
+ newargs = newargs + [default_cxx_std]
885
+
886
+ if llvm_opts is None: llvm_opts = LLVM_OPT_LEVEL[opt_level]
887
+ if llvm_lto is None and opt_level >= 3: llvm_lto = 3
888
+ if opt_level == 0: debug_level = 4
889
+ if closure is None and opt_level == 3: closure = True
890
+
891
+ if llvm_lto is None and bind:
892
+ logging.debug('running lto for embind') # XXX this is a workaround for a pointer issue
893
+ llvm_lto = 1
894
+
895
+ # TODO: support source maps with js_transform
896
+ if js_transform and debug_level >= 4:
897
+ logging.warning('disabling source maps because a js transform is being done')
898
+ debug_level = 3
899
+
900
+ if DEBUG: start_time = time.time() # done after parsing arguments, which might affect debug state
901
+
902
+ if closure:
903
+ assert os.path.exists(shared.CLOSURE_COMPILER), logging.error('fatal: Closure compiler (%s) does not exist' % shared.CLOSURE_COMPILER)
904
+
905
+ for i in range(len(newargs)):
906
+ if newargs[i] == '-s':
907
+ if is_minus_s_for_emcc(newargs, i):
908
+ settings_changes.append(newargs[i+1])
909
+ newargs[i] = newargs[i+1] = ''
910
+ elif newargs[i].startswith('--typed-arrays'):
911
+ assert '=' not in newargs[i], 'Invalid typed arrays parameter (do not use "=")'
912
+ settings_changes.append('USE_TYPED_ARRAYS=' + newargs[i+1])
913
+ newargs[i] = ''
914
+ newargs[i+1] = ''
915
+ newargs = [ arg for arg in newargs if arg is not '' ]
916
+
917
+ if split_js_file:
918
+ settings_changes.append("PRINT_SPLIT_FILE_MARKER=1")
919
+
920
+ # Find input files
921
+
922
+ input_files = []
923
+ has_source_inputs = False
924
+ lib_dirs = [shared.path_from_root('system', 'local', 'lib'),
925
+ shared.path_from_root('system', 'lib')]
926
+ libs = []
927
+ for i in range(len(newargs)): # find input files XXX this a simple heuristic. we should really analyze based on a full understanding of gcc params,
928
+ # right now we just assume that what is left contains no more |-x OPT| things
929
+ arg = newargs[i]
930
+
931
+ if i > 0:
932
+ prev = newargs[i-1]
933
+ if prev in ['-MT', '-MF', '-MQ', '-D', '-U', '-o', '-x', '-Xpreprocessor', '-include', '-imacros', '-idirafter', '-iprefix', '-iwithprefix', '-iwithprefixbefore', '-isysroot', '-imultilib', '-A', '-isystem', '-iquote', '-install_name', '-I', '-L']: continue # ignore this gcc-style argument
934
+
935
+ if (os.path.islink(arg) and os.path.realpath(arg).endswith(SOURCE_SUFFIXES + BITCODE_SUFFIXES + DYNAMICLIB_SUFFIXES + ASSEMBLY_SUFFIXES)):
936
+ arg = os.path.realpath(arg)
937
+
938
+ if not arg.startswith('-') and (arg.endswith(SOURCE_SUFFIXES + BITCODE_SUFFIXES + DYNAMICLIB_SUFFIXES + ASSEMBLY_SUFFIXES) or shared.Building.is_ar(arg)): # we already removed -o <target>, so all these should be inputs
939
+ newargs[i] = ''
940
+ if os.path.exists(arg):
941
+ if arg.endswith(SOURCE_SUFFIXES):
942
+ input_files.append(arg)
943
+ has_source_inputs = True
944
+ else:
945
+ # this should be bitcode, make sure it is valid
946
+ if arg.endswith(ASSEMBLY_SUFFIXES) or shared.Building.is_bitcode(arg):
947
+ input_files.append(arg)
948
+ elif arg.endswith(STATICLIB_SUFFIXES + DYNAMICLIB_SUFFIXES):
949
+ # if it's not, and it's a library, just add it to libs to find later
950
+ l = unsuffixed_basename(arg)
951
+ for prefix in LIB_PREFIXES:
952
+ if not prefix: continue
953
+ if l.startswith(prefix):
954
+ l = l[len(prefix):]
955
+ break
956
+ libs.append(l)
957
+ newargs[i] = ''
958
+ else:
959
+ logging.warning(arg + ' is not valid LLVM bitcode')
960
+ else:
961
+ logging.error(arg + ': No such file or directory')
962
+ exit(1)
963
+ elif arg.startswith('-L'):
964
+ lib_dirs.append(arg[2:])
965
+ newargs[i] = ''
966
+ elif arg.startswith('-l'):
967
+ libs.append(arg[2:])
968
+ newargs[i] = ''
969
+
970
+ original_input_files = input_files[:]
971
+
972
+ newargs = [ arg for arg in newargs if arg is not '' ]
973
+
974
+ # -c means do not link in gcc, and for us, the parallel is to not go all the way to JS, but stop at bitcode
975
+ has_dash_c = '-c' in newargs
976
+ if has_dash_c:
977
+ assert has_source_inputs, 'Must have source code inputs to use -c'
978
+ target = target_basename + '.o'
979
+ final_suffix = 'o'
980
+
981
+ # do not link in libs when just generating object code (not an 'executable', i.e. JS, or a library)
982
+ if ('.' + final_suffix) in BITCODE_SUFFIXES and len(libs) > 0:
983
+ logging.warning('not linking against libraries since only compiling to bitcode')
984
+ libs = []
985
+
986
+ # Find library files
987
+ for lib in libs:
988
+ logging.debug('looking for library "%s"' % lib)
989
+ found = False
990
+ for prefix in LIB_PREFIXES:
991
+ for suff in STATICLIB_SUFFIXES + DYNAMICLIB_SUFFIXES:
992
+ name = prefix + lib + suff
993
+ for lib_dir in lib_dirs:
994
+ path = os.path.join(lib_dir, name)
995
+ if os.path.exists(path):
996
+ logging.debug('found library "%s" at %s' % (lib, path))
997
+ input_files.append(path)
998
+ found = True
999
+ break
1000
+ if found: break
1001
+ if found: break
1002
+
1003
+ if ignore_dynamic_linking:
1004
+ input_files = filter(lambda input_file: not input_file.endswith(DYNAMICLIB_SUFFIXES), input_files)
1005
+
1006
+ if len(input_files) == 0:
1007
+ logging.error('no input files\nnote that input files without a known suffix are ignored, make sure your input files end with one of: ' + str(SOURCE_SUFFIXES + BITCODE_SUFFIXES + DYNAMICLIB_SUFFIXES + STATICLIB_SUFFIXES + ASSEMBLY_SUFFIXES))
1008
+ exit(0)
1009
+
1010
+ newargs += CC_ADDITIONAL_ARGS
1011
+
1012
+ assert not (Compression.on and final_suffix != 'html'), 'Compression only works when generating HTML'
1013
+
1014
+ # If we are using embind and generating JS, now is the time to link in bind.cpp
1015
+ if bind and final_suffix in JS_CONTAINING_SUFFIXES:
1016
+ input_files.append(shared.path_from_root('system', 'lib', 'embind', 'bind.cpp'))
1017
+
1018
+ # Apply optimization level settings
1019
+ shared.Settings.apply_opt_level(opt_level, noisy=True)
1020
+
1021
+ # Apply -s settings in newargs here (after optimization levels, so they can override them)
1022
+ for change in settings_changes:
1023
+ key, value = change.split('=')
1024
+ if value[0] == '@':
1025
+ value = '"@' + os.path.abspath(value[1:]) + '"'
1026
+ value = value.replace('\\\\', '/').replace('\\', '/') # Convert backslash paths to forward slashes on Windows as well, since the JS compiler otherwise needs the backslashes escaped (alternative is to escape all input paths passing to JS, which feels clumsier to read)
1027
+ exec('shared.Settings.' + key + ' = ' + value)
1028
+
1029
+ # Apply effects from settings
1030
+ if shared.Settings.ASM_JS:
1031
+ assert opt_level >= 1, 'asm.js requires -O1 or above'
1032
+
1033
+ if bind:
1034
+ shared.Settings.RESERVED_FUNCTION_POINTERS = max(shared.Settings.RESERVED_FUNCTION_POINTERS, 10)
1035
+ if shared.Settings.CORRECT_SIGNS != 1:
1036
+ logging.warning('setting CORRECT_SIGNS to 1 for asm.js code generation')
1037
+ shared.Settings.CORRECT_SIGNS = 1
1038
+ if shared.Settings.CORRECT_OVERFLOWS != 1:
1039
+ logging.warning('setting CORRECT_OVERFLOWS to 1 for asm.js code generation')
1040
+ shared.Settings.CORRECT_OVERFLOWS = 1
1041
+ assert not shared.Settings.PGO, 'cannot run PGO in ASM_JS mode'
1042
+
1043
+ if shared.Settings.ASSERTIONS and shared.Settings.ALIASING_FUNCTION_POINTERS:
1044
+ logging.warning('ALIASING_FUNCTION_POINTERS is on, function pointer comparisons may be invalid across types')
1045
+
1046
+ if shared.Settings.CORRECT_SIGNS >= 2 or shared.Settings.CORRECT_OVERFLOWS >= 2 or shared.Settings.CORRECT_ROUNDINGS >= 2:
1047
+ debug_level = 4 # must keep debug info to do line-by-line operations
1048
+
1049
+ if debug_level > 0 and closure:
1050
+ logging.warning('disabling closure because debug info was requested')
1051
+ closure = False
1052
+
1053
+ assert shared.LLVM_TARGET in shared.COMPILER_OPTS
1054
+ if shared.LLVM_TARGET == 'i386-pc-linux-gnu':
1055
+ shared.Settings.TARGET_X86 = 1
1056
+ shared.Settings.TARGET_LE32 = 0
1057
+ assert 'le32-unknown-nacl' not in shared.COMPILER_OPTS
1058
+ elif shared.LLVM_TARGET == 'le32-unknown-nacl':
1059
+ shared.Settings.TARGET_LE32 = 1
1060
+ shared.Settings.TARGET_X86 = 0
1061
+ assert 'i386-pc-linux-gnu' not in shared.COMPILER_OPTS
1062
+ else:
1063
+ raise Exception('unknown llvm target: ' + str(shared.LLVM_TARGET))
1064
+
1065
+ if shared.Settings.USE_TYPED_ARRAYS != 2 and llvm_opts > 0:
1066
+ logging.warning('disabling LLVM optimizations, need typed arrays mode 2 for them')
1067
+ llvm_opts = 0
1068
+
1069
+ if shared.Settings.MAIN_MODULE:
1070
+ assert not shared.Settings.SIDE_MODULE
1071
+ shared.Settings.INCLUDE_FULL_LIBRARY = 1
1072
+ elif shared.Settings.SIDE_MODULE:
1073
+ assert not shared.Settings.MAIN_MODULE
1074
+
1075
+ if shared.Settings.MAIN_MODULE or shared.Settings.SIDE_MODULE:
1076
+ assert not memory_init_file, 'memory init file is not supported with module linking'
1077
+ shared.Settings.LINKABLE = 1 # TODO: add FORCE_DCE option for the brave people that do want to dce here and in side modules
1078
+ debug_level = max(debug_level, 2)
1079
+
1080
+ ## Compile source code to bitcode
1081
+
1082
+ logging.debug('compiling to bitcode')
1083
+
1084
+ temp_files = []
1085
+
1086
+ # First, generate LLVM bitcode. For each input file, we get base.o with bitcode
1087
+ for input_file in input_files:
1088
+ if input_file.endswith(SOURCE_SUFFIXES):
1089
+ logging.debug('compiling source file: ' + input_file)
1090
+ input_file = shared.Building.preprocess(input_file, in_temp(uniquename(input_file)))
1091
+ output_file = in_temp(unsuffixed(uniquename(input_file)) + '.o')
1092
+ temp_files.append(output_file)
1093
+ args = newargs + ['-emit-llvm', '-c', input_file, '-o', output_file]
1094
+ logging.debug("running:" + call + ' ' + ' '.join(args))
1095
+ execute([call] + args) # let compiler frontend print directly, so colors are saved (PIPE kills that)
1096
+ if not os.path.exists(output_file):
1097
+ logging.error('compiler frontend failed to generate LLVM bitcode, halting')
1098
+ sys.exit(1)
1099
+ else: # bitcode
1100
+ if input_file.endswith(BITCODE_SUFFIXES):
1101
+ logging.debug('copying bitcode file: ' + input_file)
1102
+ temp_file = in_temp(unsuffixed(uniquename(input_file)) + '.o')
1103
+ shutil.copyfile(input_file, temp_file)
1104
+ temp_files.append(temp_file)
1105
+ elif input_file.endswith(DYNAMICLIB_SUFFIXES) or shared.Building.is_ar(input_file):
1106
+ logging.debug('copying library file: ' + input_file)
1107
+ temp_file = in_temp(uniquename(input_file))
1108
+ shutil.copyfile(input_file, temp_file)
1109
+ temp_files.append(temp_file)
1110
+ else: #.ll
1111
+ if not LEAVE_INPUTS_RAW:
1112
+ # Note that by assembling the .ll file, then disassembling it later, we will
1113
+ # remove annotations which is a good thing for compilation time
1114
+ logging.debug('assembling assembly file: ' + input_file)
1115
+ temp_file = in_temp(unsuffixed(uniquename(input_file)) + '.o')
1116
+ shared.Building.llvm_as(input_file, temp_file)
1117
+ temp_files.append(temp_file)
1118
+
1119
+ if not LEAVE_INPUTS_RAW:
1120
+ assert len(temp_files) == len(input_files)
1121
+
1122
+ # Optimize source files
1123
+ if llvm_opts > 0:
1124
+ for i, input_file in enumerate(input_files):
1125
+ if input_file.endswith(SOURCE_SUFFIXES):
1126
+ temp_file = temp_files[i]
1127
+ logging.debug('optimizing %s with -O%d' % (input_file, llvm_opts))
1128
+ shared.Building.llvm_opt(temp_file, llvm_opts)
1129
+
1130
+ # If we were just asked to generate bitcode, stop there
1131
+ if final_suffix not in JS_CONTAINING_SUFFIXES:
1132
+ if not specified_target:
1133
+ for input_file in input_files:
1134
+ shutil.move(in_temp(unsuffixed(uniquename(input_file)) + '.o'), unsuffixed_basename(input_file) + '.' + final_suffix)
1135
+ else:
1136
+ if len(input_files) == 1:
1137
+ shutil.move(in_temp(unsuffixed(uniquename(input_files[0])) + '.o'), specified_target)
1138
+ else:
1139
+ assert len(original_input_files) == 1 or not has_dash_c, 'fatal error: cannot specify -o with -c with multiple files' + str(sys.argv) + ':' + str(original_input_files)
1140
+ # We have a specified target (-o <target>), which is not JavaScript or HTML, and
1141
+ # we have multiple files: Link them
1142
+ logging.debug('link: ' + str(temp_files) + specified_target)
1143
+ shared.Building.link(temp_files, specified_target)
1144
+ exit(0)
1145
+
1146
+ ## Continue on to create JavaScript
1147
+
1148
+ logging.debug('will generate JavaScript')
1149
+
1150
+ extra_files_to_link = []
1151
+
1152
+ if not LEAVE_INPUTS_RAW and not AUTODEBUG and \
1153
+ not shared.Settings.BUILD_AS_SHARED_LIB == 2 and \
1154
+ not shared.Settings.SIDE_MODULE: # shared libraries/side modules link no C libraries, need them in parent
1155
+
1156
+ # Check if we need to include some libraries that we compile. (We implement libc ourselves in js, but
1157
+ # compile a malloc implementation and stdlibc++.)
1158
+
1159
+ def read_symbols(path, exclude=None):
1160
+ symbols = map(lambda line: line.strip().split(' ')[1], open(path).readlines())
1161
+ if exclude:
1162
+ symbols = filter(lambda symbol: symbol not in exclude, symbols)
1163
+ return set(symbols)
1164
+
1165
+ lib_opts = ['-O2']
1166
+
1167
+ # XXX We also need to add libc symbols that use malloc, for example strdup. It's very rare to use just them and not
1168
+ # a normal malloc symbol (like free, after calling strdup), so we haven't hit this yet, but it is possible.
1169
+ libc_symbols = read_symbols(shared.path_from_root('system', 'lib', 'libc.symbols'))
1170
+ sdl_symbols = read_symbols(shared.path_from_root('system', 'lib', 'sdl.symbols'))
1171
+ libcextra_symbols = read_symbols(shared.path_from_root('system', 'lib', 'libcextra.symbols'))
1172
+ libcxx_symbols = read_symbols(shared.path_from_root('system', 'lib', 'libcxx', 'symbols'), exclude=libc_symbols)
1173
+ libcxxabi_symbols = read_symbols(shared.path_from_root('system', 'lib', 'libcxxabi', 'symbols'), exclude=libc_symbols)
1174
+
1175
+ # XXX we should disable EMCC_DEBUG when building libs, just like in the relooper
1176
+
1177
+ def build_libc(lib_filename, files):
1178
+ o_s = []
1179
+ prev_cxx = os.environ.get('EMMAKEN_CXX')
1180
+ if prev_cxx: os.environ['EMMAKEN_CXX'] = ''
1181
+ musl_internal_includes = shared.path_from_root('system', 'lib', 'libc', 'musl', 'src', 'internal')
1182
+ for src in files:
1183
+ o = in_temp(os.path.basename(src) + '.o')
1184
+ execute([shared.PYTHON, shared.EMCC, shared.path_from_root('system', 'lib', src), '-o', o, '-I', musl_internal_includes] + lib_opts, stdout=stdout, stderr=stderr)
1185
+ o_s.append(o)
1186
+ if prev_cxx: os.environ['EMMAKEN_CXX'] = prev_cxx
1187
+ shared.Building.link(o_s, in_temp(lib_filename))
1188
+ return in_temp(lib_filename)
1189
+
1190
+ def build_libcxx(src_dirname, lib_filename, files):
1191
+ o_s = []
1192
+ for src in files:
1193
+ o = in_temp(src + '.o')
1194
+ srcfile = shared.path_from_root(src_dirname, src)
1195
+ execute([shared.PYTHON, shared.EMXX, srcfile, '-o', o, '-std=c++11'] + lib_opts, stdout=stdout, stderr=stderr)
1196
+ o_s.append(o)
1197
+ shared.Building.link(o_s, in_temp(lib_filename))
1198
+ return in_temp(lib_filename)
1199
+
1200
+ # libc
1201
+ def create_libc():
1202
+ logging.debug(' building libc for cache')
1203
+ libc_files = [
1204
+ 'dlmalloc.c',
1205
+ os.path.join('libcxx', 'new.cpp'),
1206
+ os.path.join('libc', 'stdlib', 'getopt_long.c'),
1207
+ os.path.join('libc', 'gen', 'err.c'),
1208
+ os.path.join('libc', 'gen', 'errx.c'),
1209
+ os.path.join('libc', 'gen', 'warn.c'),
1210
+ os.path.join('libc', 'gen', 'warnx.c'),
1211
+ os.path.join('libc', 'gen', 'verr.c'),
1212
+ os.path.join('libc', 'gen', 'verrx.c'),
1213
+ os.path.join('libc', 'gen', 'vwarn.c'),
1214
+ os.path.join('libc', 'gen', 'vwarnx.c'),
1215
+ os.path.join('libc', 'stdlib', 'strtod.c'),
1216
+ ]
1217
+ return build_libc('libc.bc', libc_files)
1218
+
1219
+ def apply_libc(need):
1220
+ # libc needs some sign correction. # If we are in mode 0, switch to 2. We will add our lines
1221
+ try:
1222
+ if shared.Settings.CORRECT_SIGNS == 0: raise Exception('we need to change to 2')
1223
+ except: # we fail if equal to 0 - so we need to switch to 2 - or if CORRECT_SIGNS is not even in Settings
1224
+ shared.Settings.CORRECT_SIGNS = 2
1225
+ if shared.Settings.CORRECT_SIGNS == 2:
1226
+ shared.Settings.CORRECT_SIGNS_LINES = [shared.path_from_root('src', 'dlmalloc.c') + ':' + str(i+4) for i in [4816, 4191, 4246, 4199, 4205, 4235, 4227]]
1227
+ # If we are in mode 1, we are correcting everything anyhow. If we are in mode 3, we will be corrected
1228
+ # so all is well anyhow too.
1229
+ return True
1230
+
1231
+ # libcextra
1232
+ def create_libcextra():
1233
+ logging.debug('building libcextra for cache')
1234
+ musl_files = [
1235
+ ['ctype', [
1236
+ 'iswalnum.c',
1237
+ 'iswalpha.c',
1238
+ 'iswblank.c',
1239
+ 'iswcntrl.c',
1240
+ 'iswctype.c',
1241
+ 'iswdigit.c',
1242
+ 'iswgraph.c',
1243
+ 'iswlower.c',
1244
+ 'iswprint.c',
1245
+ 'iswpunct.c',
1246
+ 'iswspace.c',
1247
+ 'iswupper.c',
1248
+ 'iswxdigit.c',
1249
+ 'towctrans.c',
1250
+ 'wcswidth.c',
1251
+ 'wctrans.c',
1252
+ 'wcwidth.c',
1253
+ ]],
1254
+ ['multibyte', [
1255
+ 'btowc.c',
1256
+ 'mblen.c',
1257
+ 'mbrlen.c',
1258
+ 'mbrtowc.c',
1259
+ 'mbsinit.c',
1260
+ 'mbsnrtowcs.c',
1261
+ 'mbsrtowcs.c',
1262
+ 'mbstowcs.c',
1263
+ 'mbtowc.c',
1264
+ 'wcrtomb.c',
1265
+ 'wcsnrtombs.c',
1266
+ 'wcsrtombs.c',
1267
+ 'wcstombs.c',
1268
+ 'wctob.c',
1269
+ 'wctomb.c',
1270
+ ]],
1271
+ ['string', [
1272
+ 'wcpcpy.c',
1273
+ 'wcpncpy.c',
1274
+ 'wcscasecmp.c',
1275
+ # 'wcscasecmp_l.c', # XXX: alltypes.h issue
1276
+ 'wcscat.c',
1277
+ 'wcschr.c',
1278
+ 'wcscmp.c',
1279
+ 'wcscpy.c',
1280
+ 'wcscspn.c',
1281
+ 'wcsdup.c',
1282
+ 'wcslen.c',
1283
+ 'wcsncasecmp.c',
1284
+ # 'wcsncasecmp_l.c', # XXX: alltypes.h issue
1285
+ 'wcsncat.c',
1286
+ 'wcsncmp.c',
1287
+ 'wcsncpy.c',
1288
+ 'wcsnlen.c',
1289
+ 'wcspbrk.c',
1290
+ 'wcsrchr.c',
1291
+ 'wcsspn.c',
1292
+ 'wcsstr.c',
1293
+ 'wcstok.c',
1294
+ 'wcswcs.c',
1295
+ 'wmemchr.c',
1296
+ 'wmemcmp.c',
1297
+ 'wmemcpy.c',
1298
+ 'wmemmove.c',
1299
+ 'wmemset.c',
1300
+ ]]
1301
+ ]
1302
+ libcextra_files = []
1303
+ for directory, sources in musl_files:
1304
+ libcextra_files += [os.path.join('libc', 'musl', 'src', directory, source) for source in sources]
1305
+ return build_libc('libcextra.bc', libcextra_files)
1306
+
1307
+ # libcxx
1308
+ def create_libcxx():
1309
+ logging.debug('building libcxx for cache')
1310
+ libcxx_files = [
1311
+ 'algorithm.cpp',
1312
+ 'condition_variable.cpp',
1313
+ 'future.cpp',
1314
+ 'iostream.cpp',
1315
+ 'memory.cpp',
1316
+ 'random.cpp',
1317
+ 'stdexcept.cpp',
1318
+ 'system_error.cpp',
1319
+ 'utility.cpp',
1320
+ 'bind.cpp',
1321
+ 'debug.cpp',
1322
+ 'hash.cpp',
1323
+ 'mutex.cpp',
1324
+ 'string.cpp',
1325
+ 'thread.cpp',
1326
+ 'valarray.cpp',
1327
+ 'chrono.cpp',
1328
+ 'exception.cpp',
1329
+ 'ios.cpp',
1330
+ 'locale.cpp',
1331
+ 'regex.cpp',
1332
+ 'strstream.cpp'
1333
+ ]
1334
+ return build_libcxx(os.path.join('system', 'lib', 'libcxx'), 'libcxx.bc', libcxx_files)
1335
+
1336
+ def apply_libcxx(need):
1337
+ assert shared.Settings.QUANTUM_SIZE == 4, 'We do not support libc++ with QUANTUM_SIZE == 1'
1338
+ # libcxx might need corrections, so turn them all on. TODO: check which are actually needed
1339
+ shared.Settings.CORRECT_SIGNS = shared.Settings.CORRECT_OVERFLOWS = shared.Settings.CORRECT_ROUNDINGS = 1
1340
+ #logging.info('using libcxx turns on CORRECT_* options')
1341
+ return True
1342
+
1343
+ # libcxxabi - just for dynamic_cast for now
1344
+ def create_libcxxabi():
1345
+ logging.debug('building libcxxabi for cache')
1346
+ libcxxabi_files = [
1347
+ 'typeinfo.cpp',
1348
+ 'private_typeinfo.cpp'
1349
+ ]
1350
+ return build_libcxx(os.path.join('system', 'lib', 'libcxxabi', 'src'), 'libcxxabi.bc', libcxxabi_files)
1351
+
1352
+ def apply_libcxxabi(need):
1353
+ assert shared.Settings.QUANTUM_SIZE == 4, 'We do not support libc++abi with QUANTUM_SIZE == 1'
1354
+ #logging.info('using libcxxabi, this may need CORRECT_* options')
1355
+ #shared.Settings.CORRECT_SIGNS = shared.Settings.CORRECT_OVERFLOWS = shared.Settings.CORRECT_ROUNDINGS = 1
1356
+ return True
1357
+
1358
+ # SDL. We include code that demands malloc/free if not already required, so we have proper malloc/free from JS SDL code.
1359
+ # Note that the Force instance here can be optimized out, but we still export malloc/free, so they will be kept alive.
1360
+ def create_sdl():
1361
+ return build_libcxx(os.path.join('system', 'lib'), 'sdl.bc', ['sdl.cpp'])
1362
+
1363
+ def apply_sdl(need):
1364
+ return 'SDL_Init' in all_needed and ('malloc' not in all_needed or 'free' not in all_needed)
1365
+
1366
+ # Settings this in the environment will avoid checking dependencies and make building big projects a little faster
1367
+ # 1 means include everything; otherwise it can be the name of a lib (libcxx, etc.)
1368
+ force = os.environ.get('EMCC_FORCE_STDLIBS')
1369
+ force_all = force == '1'
1370
+
1371
+ # Scan symbols
1372
+ all_needed = set()
1373
+ symbolses = map(lambda temp_file: shared.Building.llvm_nm(temp_file), temp_files)
1374
+ for symbols in symbolses:
1375
+ all_needed.update(symbols.undefs)
1376
+ for symbols in symbolses:
1377
+ all_needed.difference_update(symbols.defs)
1378
+
1379
+ # Go over libraries to figure out which we must include
1380
+ # If we have libcxx, we must force inclusion of libc, since libcxx uses new internally. Note: this is kind of hacky.
1381
+ has = need = None
1382
+ for name, create, apply_, library_symbols in [('libcxx', create_libcxx, apply_libcxx, libcxx_symbols),
1383
+ ('libcextra', create_libcextra, lambda x: True, libcextra_symbols),
1384
+ ('libcxxabi', create_libcxxabi, apply_libcxxabi, libcxxabi_symbols),
1385
+ ('sdl', create_sdl, apply_sdl, sdl_symbols),
1386
+ ('libc', create_libc, apply_libc, libc_symbols)]:
1387
+ force_this = force_all or force == name
1388
+ if not force_this:
1389
+ need = set()
1390
+ has = set()
1391
+ for symbols in symbolses:
1392
+ for library_symbol in library_symbols:
1393
+ if library_symbol in symbols.undefs:
1394
+ need.add(library_symbol)
1395
+ if library_symbol in symbols.defs:
1396
+ has.add(library_symbol)
1397
+ for haz in has: # remove symbols that are supplied by another of the inputs
1398
+ if haz in need:
1399
+ need.remove(haz)
1400
+ if shared.Settings.VERBOSE: logging.debug('considering %s: we need %s and have %s' % (name, str(need), str(has)))
1401
+ if force_this or len(need) > 0:
1402
+ force_all = True
1403
+ if apply_(need):
1404
+ # We need to build and link the library in
1405
+ logging.debug('including %s' % name)
1406
+ libfile = shared.Cache.get(name, create)
1407
+ extra_files_to_link.append(libfile)
1408
+
1409
+ # First, combine the bitcode files if there are several. We must also link if we have a singleton .a
1410
+ if len(input_files) + len(extra_files_to_link) > 1 or \
1411
+ (not LEAVE_INPUTS_RAW and not (suffix(temp_files[0]) in BITCODE_SUFFIXES or suffix(temp_files[0]) in DYNAMICLIB_SUFFIXES) and shared.Building.is_ar(temp_files[0])):
1412
+ linker_inputs = temp_files + extra_files_to_link
1413
+ logging.debug('linking: ' + str(linker_inputs))
1414
+ t0 = time.time()
1415
+ shared.Building.link(linker_inputs, in_temp(target_basename + '.bc'), force_archive_contents = len(filter(lambda temp: not temp.endswith(STATICLIB_SUFFIXES), temp_files)) == 0)
1416
+ t1 = time.time()
1417
+ logging.debug(' linking took %.2f seconds' % (t1 - t0))
1418
+ final = in_temp(target_basename + '.bc')
1419
+ else:
1420
+ if not LEAVE_INPUTS_RAW:
1421
+ shutil.move(temp_files[0], in_temp(target_basename + '.bc'))
1422
+ final = in_temp(target_basename + '.bc')
1423
+ else:
1424
+ final = in_temp(input_files[0])
1425
+ shutil.copyfile(input_files[0], final)
1426
+
1427
+ if DEBUG:
1428
+ logging.debug('saving intermediate processing steps to %s' % shared.EMSCRIPTEN_TEMP_DIR)
1429
+
1430
+ intermediate_counter = 0
1431
+ intermediate_time = None
1432
+ def save_intermediate(name=None, suffix='js'):
1433
+ global intermediate_counter, intermediate_time
1434
+ shutil.copyfile(final, os.path.join(shared.EMSCRIPTEN_TEMP_DIR, 'emcc-%d%s.%s' % (intermediate_counter, '' if name is None else '-' + name, suffix)))
1435
+ intermediate_counter += 1
1436
+ now = time.time()
1437
+ if intermediate_time:
1438
+ logging.debug(' step took %.2f seconds' % (now - intermediate_time))
1439
+ intermediate_time = now
1440
+
1441
+ if not LEAVE_INPUTS_RAW: save_intermediate('basebc', 'bc')
1442
+
1443
+ # Optimize, if asked to
1444
+ if not LEAVE_INPUTS_RAW:
1445
+ link_opts = [] if debug_level >= 4 else ['-strip-debug'] # remove LLVM debug if we are not asked for it
1446
+
1447
+ if llvm_lto >= 2:
1448
+ logging.debug('running LLVM opt -O3 as pre-LTO')
1449
+ shared.Building.llvm_opt(in_temp(target_basename + '.bc'), ['-O3'])
1450
+ if DEBUG: save_intermediate('opt', 'bc')
1451
+
1452
+ # If we can LTO, do it before dce, since it opens up dce opportunities
1453
+ if shared.Building.can_build_standalone() and llvm_lto and llvm_lto != 2 and shared.Building.can_use_unsafe_opts():
1454
+ if not shared.Building.can_inline(): link_opts.append('-disable-inlining')
1455
+ # do not internalize in std-link-opts - it ignores internalize-public-api-list - and add a manual internalize
1456
+ link_opts += ['-disable-internalize'] + shared.Building.get_safe_internalize() + ['-std-link-opts']
1457
+ else:
1458
+ # At minimum remove dead functions etc., this potentially saves a lot in the size of the generated code (and the time to compile it)
1459
+ link_opts += shared.Building.get_safe_internalize() + ['-globaldce']
1460
+ shared.Building.llvm_opt(in_temp(target_basename + '.bc'), link_opts)
1461
+ if DEBUG: save_intermediate('linktime', 'bc')
1462
+
1463
+ if save_bc:
1464
+ shutil.copyfile(final, save_bc)
1465
+
1466
+ # Prepare .ll for Emscripten
1467
+ if not LEAVE_INPUTS_RAW:
1468
+ final = shared.Building.llvm_dis(final, final + '.ll')
1469
+ else:
1470
+ assert len(input_files) == 1
1471
+ if DEBUG: save_intermediate('ll', 'll')
1472
+
1473
+ if AUTODEBUG:
1474
+ logging.debug('autodebug')
1475
+ execute([shared.PYTHON, shared.AUTODEBUGGER, final, final + '.ad.ll'])
1476
+ final += '.ad.ll'
1477
+ if DEBUG: save_intermediate('autodebug', 'll')
1478
+
1479
+ # Emscripten
1480
+ logging.debug('LLVM => JS')
1481
+ extra_args = [] if not js_libraries else ['--libraries', ','.join(map(os.path.abspath, js_libraries))]
1482
+ if jcache: extra_args.append('--jcache')
1483
+ final = shared.Building.emscripten(final, append_ext=False, extra_args=extra_args)
1484
+ if DEBUG: save_intermediate('original')
1485
+
1486
+ # Embed and preload files
1487
+ if len(preload_files) + len(embed_files) > 0:
1488
+ logging.debug('setting up files')
1489
+ file_args = []
1490
+ if len(preload_files) > 0:
1491
+ file_args.append('--preload')
1492
+ file_args += preload_files
1493
+ if len(embed_files) > 0:
1494
+ file_args.append('--embed')
1495
+ file_args += embed_files
1496
+ if Compression.on:
1497
+ file_args += ['--compress', Compression.encoder, Compression.decoder, Compression.js_name]
1498
+ if use_preload_cache:
1499
+ file_args.append('--use-preload-cache')
1500
+ code = execute([shared.PYTHON, shared.FILE_PACKAGER, unsuffixed(target) + '.data'] + file_args, stdout=PIPE)[0]
1501
+ src = open(final).read().replace('// {{PRE_RUN_ADDITIONS}}', '// {{PRE_RUN_ADDITIONS}}\n' + code)
1502
+ final += '.files.js'
1503
+ open(final, 'w').write(src)
1504
+ if DEBUG: save_intermediate('files')
1505
+
1506
+ # Apply pre and postjs files
1507
+ if pre_js or post_js:
1508
+ logging.debug('applying pre/postjses')
1509
+ src = open(final).read()
1510
+ final += '.pp.js'
1511
+ open(final, 'w').write(pre_js + src + post_js)
1512
+ if DEBUG: save_intermediate('pre-post')
1513
+
1514
+ # Add bindings glue if used
1515
+ if bind:
1516
+ logging.debug('adding embind glue')
1517
+ src = open(final).read().replace('// {{PRE_RUN_ADDITIONS}}', '// {{PRE_RUN_ADDITIONS}}\n' +
1518
+ open(shared.path_from_root('src', 'embind', 'embind.js')).read() +
1519
+ open(shared.path_from_root('src', 'embind', 'emval.js')).read()
1520
+ )
1521
+ final += '.bd.js'
1522
+ open(final, 'w').write(src)
1523
+ if DEBUG: save_intermediate('bind')
1524
+
1525
+ # Apply a source code transformation, if requested
1526
+ if js_transform:
1527
+ shutil.copyfile(final, final + '.tr.js')
1528
+ final += '.tr.js'
1529
+ posix = True if not shared.WINDOWS else False
1530
+ logging.debug('applying transform: %s' % js_transform)
1531
+ subprocess.check_call(shlex.split(js_transform, posix=posix) + [os.path.abspath(final)])
1532
+ if DEBUG: save_intermediate('transformed')
1533
+
1534
+ js_transform_tempfiles = [final]
1535
+
1536
+ # It is useful to run several js optimizer passes together, to save on unneeded unparsing/reparsing
1537
+ js_optimizer_queue = []
1538
+ def flush_js_optimizer_queue():
1539
+ global final, js_optimizer_queue
1540
+ if len(js_optimizer_queue) > 0 and not(len(js_optimizer_queue) == 1 and js_optimizer_queue[0] == 'last'):
1541
+ if DEBUG != '2':
1542
+ if shared.Settings.ASM_JS:
1543
+ js_optimizer_queue = ['asm'] + js_optimizer_queue
1544
+ logging.debug('applying js optimization passes: %s', js_optimizer_queue)
1545
+ final = shared.Building.js_optimizer(final, js_optimizer_queue, jcache, debug_level >= 4)
1546
+ js_transform_tempfiles.append(final)
1547
+ if DEBUG: save_intermediate('js_opts')
1548
+ else:
1549
+ for name in js_optimizer_queue:
1550
+ passes = [name]
1551
+ if shared.Settings.ASM_JS:
1552
+ passes = ['asm'] + passes
1553
+ logging.debug('applying js optimization pass: %s', passes)
1554
+ final = shared.Building.js_optimizer(final, passes, jcache, debug_level >= 4)
1555
+ js_transform_tempfiles.append(final)
1556
+ save_intermediate(name)
1557
+ js_optimizer_queue = []
1558
+
1559
+ if opt_level >= 1:
1560
+ logging.debug('running pre-closure post-opts')
1561
+
1562
+ if DEBUG == '2':
1563
+ # Clean up the syntax a bit
1564
+ final = shared.Building.js_optimizer(final, [], jcache, debug_level >= 4)
1565
+ js_transform_tempfiles.append(final)
1566
+ if DEBUG: save_intermediate('pretty')
1567
+
1568
+ def get_eliminate():
1569
+ if shared.Settings.ALLOW_MEMORY_GROWTH:
1570
+ return 'eliminateMemSafe'
1571
+ else:
1572
+ return 'eliminate'
1573
+
1574
+ js_optimizer_queue += [get_eliminate(), 'simplifyExpressionsPre']
1575
+
1576
+ if shared.Settings.RELOOP and not shared.Settings.ASM_JS:
1577
+ js_optimizer_queue += ['optimizeShiftsAggressive', get_eliminate()] # aggressive shifts optimization requires loops, it breaks on switches
1578
+
1579
+ if closure and not shared.Settings.ASM_JS:
1580
+ flush_js_optimizer_queue()
1581
+
1582
+ logging.debug('running closure')
1583
+ # no need to add this to js_transform_tempfiles, because closure and
1584
+ # debug_level > 0 are never simultaneously true
1585
+ final = shared.Building.closure_compiler(final)
1586
+ if DEBUG: save_intermediate('closure')
1587
+
1588
+ if opt_level >= 1:
1589
+ logging.debug('running post-closure post-opts')
1590
+ js_optimizer_queue += ['simplifyExpressionsPost']
1591
+
1592
+ if (not closure or shared.Settings.ASM_JS) and shared.Settings.RELOOP and debug_level < 3:
1593
+ js_optimizer_queue += ['registerize']
1594
+
1595
+ if opt_level > 0:
1596
+ if debug_level < 2 and shared.Settings.ASM_JS: js_optimizer_queue = map(lambda p: p if p != 'registerize' else 'registerizeAndMinify', js_optimizer_queue)
1597
+ if debug_level == 0: js_optimizer_queue += ['minifyWhitespace']
1598
+
1599
+ if closure and shared.Settings.ASM_JS:
1600
+ js_optimizer_queue += ['closure']
1601
+
1602
+ if not shared.Settings.SIDE_MODULE: js_optimizer_queue += ['last'] # side modules are not finalized until after relocation
1603
+
1604
+ flush_js_optimizer_queue()
1605
+
1606
+ # Remove some trivial whitespace # TODO: do not run when compress has already been done on all parts of the code
1607
+ src = open(final).read()
1608
+ src = re.sub(r'\n+[ \n]*\n+', '\n', src)
1609
+ open(final, 'w').write(src)
1610
+
1611
+ if memory_init_file:
1612
+ if shared.Settings.USE_TYPED_ARRAYS != 2:
1613
+ if type(memory_init_file) == int: logging.warning('memory init file requires typed arrays mode 2')
1614
+ else:
1615
+ memfile = target + '.mem'
1616
+ shared.try_delete(memfile)
1617
+ def repl(m):
1618
+ # handle chunking of the memory initializer
1619
+ s = re.sub('[\[\]\n\(\)\. ]', '', m.groups(0)[0])
1620
+ s = s.replace('concat', ',')
1621
+ if s[-1] == ',': s = s[:-1]
1622
+ open(memfile, 'wb').write(''.join(map(lambda x: chr(int(x or '0')), s.split(','))))
1623
+ if DEBUG:
1624
+ # Copy into temp dir as well, so can be run there too
1625
+ temp_memfile = os.path.join(shared.EMSCRIPTEN_TEMP_DIR, os.path.basename(memfile))
1626
+ if os.path.abspath(memfile) != os.path.abspath(memfile):
1627
+ shutil.copyfile(memfile, temp_memfile)
1628
+ return 'loadMemoryInitializer("%s");' % os.path.basename(memfile)
1629
+ src = re.sub(shared.JS.memory_initializer_pattern, repl, src, count=1)
1630
+ open(final + '.mem.js', 'w').write(src)
1631
+ final += '.mem.js'
1632
+ js_transform_tempfiles[-1] = final # simple text substitution preserves comment line number mappings
1633
+ if DEBUG:
1634
+ if os.path.exists(memfile):
1635
+ save_intermediate('meminit')
1636
+ logging.debug('wrote memory initialization to %s' % memfile)
1637
+ else:
1638
+ logging.debug('did not see memory initialization')
1639
+
1640
+ def generate_source_map(map_file_base_name, offset=0):
1641
+ jsrun.run_js(shared.path_from_root('tools', 'source-maps', 'sourcemapper.js'),
1642
+ shared.NODE_JS, js_transform_tempfiles +
1643
+ ['--sourceRoot', os.getcwd(),
1644
+ '--mapFileBaseName', map_file_base_name,
1645
+ '--offset', str(offset)])
1646
+
1647
+ # If we were asked to also generate HTML, do that
1648
+ if final_suffix == 'html':
1649
+ logging.debug('generating HTML')
1650
+ shell = open(shell_path).read()
1651
+ html = open(target, 'w')
1652
+ if not Compression.on:
1653
+ if debug_level >= 4:
1654
+ match = re.match('.*?<script[^>]*>{{{ SCRIPT_CODE }}}</script>', shell,
1655
+ re.DOTALL)
1656
+ if match is None:
1657
+ raise RuntimeError('''Could not find script insertion point - make sure you have <script type='text/javascript'>{{{ SCRIPT_CODE }}}</script> in your HTML file (with no newlines)''')
1658
+ generate_source_map(target, match.group().count('\n'))
1659
+ html.write(shell.replace('{{{ SCRIPT_CODE }}}', open(final).read()))
1660
+ else:
1661
+ # Compress the main code
1662
+ js_target = unsuffixed(target) + '.js'
1663
+ shutil.move(final, js_target)
1664
+ Compression.compress(js_target)
1665
+
1666
+ # Run the decompressor in a worker, and add code to
1667
+ # 1. download the compressed file
1668
+ # 2. decompress to a typed array
1669
+ # 3. convert to a string of source code
1670
+ # 4. insert a script element with that source code (more effective than eval)
1671
+ decoding = '''
1672
+ var decompressWorker = new Worker('decompress.js');
1673
+ var decompressCallbacks = [];
1674
+ var decompressions = 0;
1675
+ Module["decompress"] = function(data, callback) {
1676
+ var id = decompressCallbacks.length;
1677
+ decompressCallbacks.push(callback);
1678
+ decompressWorker.postMessage({ data: data, id: id });
1679
+ if (Module['setStatus']) {
1680
+ decompressions++;
1681
+ Module['setStatus']('Decompressing...');
1682
+ }
1683
+ };
1684
+ decompressWorker.onmessage = function(event) {
1685
+ decompressCallbacks[event.data.id](event.data.data);
1686
+ decompressCallbacks[event.data.id] = null;
1687
+ if (Module['setStatus']) {
1688
+ decompressions--;
1689
+ if (decompressions == 0) {
1690
+ Module['setStatus']('');
1691
+ }
1692
+ }
1693
+ };
1694
+ var compiledCodeXHR = new XMLHttpRequest();
1695
+ compiledCodeXHR.open('GET', '%s', true);
1696
+ compiledCodeXHR.responseType = 'arraybuffer';
1697
+ compiledCodeXHR.onload = function() {
1698
+ var arrayBuffer = compiledCodeXHR.response;
1699
+ if (!arrayBuffer) throw('Loading compressed code failed.');
1700
+ var byteArray = new Uint8Array(arrayBuffer);
1701
+ Module.decompress(byteArray, function(decompressed) {
1702
+ var source = Array.prototype.slice.apply(decompressed).map(function(x) { return String.fromCharCode(x) }).join(''); // createObjectURL instead?
1703
+ var scriptTag = document.createElement('script');
1704
+ scriptTag.setAttribute('type', 'text/javascript');
1705
+ scriptTag.innerHTML = source;
1706
+ document.body.appendChild(scriptTag);
1707
+ });
1708
+ };
1709
+ compiledCodeXHR.send(null);
1710
+ ''' % Compression.compressed_name(js_target)
1711
+ html.write(shell.replace('{{{ SCRIPT_CODE }}}', decoding))
1712
+
1713
+ # Add decompressor with web worker glue code
1714
+ decompressor = open('decompress.js', 'w')
1715
+ decompressor.write(open(Compression.decoder).read())
1716
+ decompressor.write('''
1717
+ onmessage = function(event) {
1718
+ postMessage({ data: %s(event.data.data), id: event.data.id });
1719
+ };
1720
+ ''' % Compression.js_name)
1721
+ decompressor.close()
1722
+
1723
+ html.close()
1724
+ else:
1725
+ if split_js_file:
1726
+ from tools.split import split_javascript_file
1727
+ split_javascript_file(final, unsuffixed(target), split_js_file)
1728
+ else:
1729
+ if debug_level >= 4: generate_source_map(target)
1730
+
1731
+ # copy final JS to output
1732
+ shutil.move(final, target)
1733
+
1734
+ if DEBUG: logging.debug('total time: %.2f seconds' % (time.time() - start_time))
1735
+
1736
+ finally:
1737
+ if not TEMP_DIR:
1738
+ try:
1739
+ shutil.rmtree(temp_dir)
1740
+ except:
1741
+ pass
1742
+ else:
1743
+ logging.info('emcc saved files are in:' + temp_dir)
1744
+