build.sh 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/bin/sh
  2. # Build the .wasm Module first
  3. # Since we're compiling a side module here, so that we can load it without the
  4. # runtime cruft, we have to explicitly compile in support for malloc and
  5. # friends.
  6. # Note memcpy, memmove and memset are explicitly exported, otherwise they will
  7. # be eliminated by the SIDE_MODULE=2 setting - not sure why that happens.
  8. emcc \
  9. src/wasm/mpeg1.c \
  10. src/wasm/mp2.c \
  11. src/wasm/buffer.c \
  12. $EMSCRIPTEN/system/lib/emmalloc.cpp \
  13. $EMSCRIPTEN/system/lib/libc/musl/src/string/memcpy.c \
  14. $EMSCRIPTEN/system/lib/libc/musl/src/string/memmove.c \
  15. $EMSCRIPTEN/system/lib/libc/musl/src/string/memset.c \
  16. -s WASM=1 \
  17. -s SIDE_MODULE=2 \
  18. -s TOTAL_STACK=5242880\
  19. -s USE_PTHREADS=0 \
  20. -s LEGALIZE_JS_FFI=0\
  21. -s NO_FILESYSTEM=1 \
  22. -s DEFAULT_LIBRARY_FUNCS_TO_INCLUDE="[]" \
  23. -s "EXPORTED_FUNCTIONS=[
  24. '_memcpy',
  25. '_memmove',
  26. '_memset',
  27. '_mpeg1_decoder_create',
  28. '_mpeg1_decoder_destroy',
  29. '_mpeg1_decoder_get_write_ptr',
  30. '_mpeg1_decoder_get_index',
  31. '_mpeg1_decoder_set_index',
  32. '_mpeg1_decoder_did_write',
  33. '_mpeg1_decoder_has_sequence_header',
  34. '_mpeg1_decoder_get_frame_rate',
  35. '_mpeg1_decoder_get_coded_size',
  36. '_mpeg1_decoder_get_width',
  37. '_mpeg1_decoder_get_height',
  38. '_mpeg1_decoder_get_y_ptr',
  39. '_mpeg1_decoder_get_cr_ptr',
  40. '_mpeg1_decoder_get_cb_ptr',
  41. '_mpeg1_decoder_decode',
  42. '_mp2_decoder_create',
  43. '_mp2_decoder_destroy',
  44. '_mp2_decoder_get_write_ptr',
  45. '_mp2_decoder_get_index',
  46. '_mp2_decoder_set_index',
  47. '_mp2_decoder_did_write',
  48. '_mp2_decoder_get_left_channel_ptr',
  49. '_mp2_decoder_get_right_channel_ptr',
  50. '_mp2_decoder_get_sample_rate',
  51. '_mp2_decoder_decode']" \
  52. -O3 \
  53. -o jsmpeg.wasm
  54. # Concat all .js sources
  55. cat \
  56. src/jsmpeg.js \
  57. src/video-element.js \
  58. src/player.js \
  59. src/buffer.js \
  60. src/ajax.js \
  61. src/fetch.js \
  62. src/ajax-progressive.js \
  63. src/websocket.js \
  64. src/ts.js \
  65. src/decoder.js \
  66. src/mpeg1.js \
  67. src/mpeg1-wasm.js \
  68. src/mp2.js \
  69. src/mp2-wasm.js \
  70. src/webgl.js \
  71. src/canvas2d.js \
  72. src/webaudio.js \
  73. src/wasm-module.js \
  74. > jsmpeg.js
  75. # Append the .wasm module to the .js source as base64 string
  76. echo "JSMpeg.WASM_BINARY_INLINED='$(base64 -w 0 jsmpeg.wasm)';" \
  77. >> jsmpeg.js
  78. # Minify
  79. uglifyjs jsmpeg.js -o jsmpeg.min.js
  80. # Cleanup
  81. rm jsmpeg.js
  82. rm jsmpeg.wasm