ruby2d 0.12.0 → 1.0.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 (619) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +7 -0
  3. data/README.md +141 -0
  4. data/USAGE.md +2435 -0
  5. data/assets/Rakefile +637 -0
  6. data/assets/build_support/CMakeLists.txt +94 -0
  7. data/assets/build_support/mruby/build_config.rb +34 -0
  8. data/assets/build_support/mruby/build_config_wasm.rb +30 -0
  9. data/assets/build_support/sdl_test.c +174 -0
  10. data/assets/deps.yaml +16 -0
  11. data/assets/platform/include/SDL3/SDL.h +91 -0
  12. data/assets/platform/include/SDL3/SDL_assert.h +705 -0
  13. data/assets/platform/include/SDL3/SDL_asyncio.h +550 -0
  14. data/assets/platform/include/SDL3/SDL_atomic.h +692 -0
  15. data/assets/platform/include/SDL3/SDL_audio.h +2370 -0
  16. data/assets/platform/include/SDL3/SDL_begin_code.h +553 -0
  17. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_bits.h +47 -27
  18. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_blendmode.h +59 -55
  19. data/assets/platform/include/SDL3/SDL_camera.h +535 -0
  20. data/assets/platform/include/SDL3/SDL_clipboard.h +331 -0
  21. data/assets/{include/SDL2/close_code.h → platform/include/SDL3/SDL_close_code.h} +9 -8
  22. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_copying.h +3 -1
  23. data/assets/platform/include/SDL3/SDL_cpuinfo.h +374 -0
  24. data/assets/platform/include/SDL3/SDL_dialog.h +343 -0
  25. data/assets/platform/include/SDL3/SDL_dlopennote.h +234 -0
  26. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_egl.h +11 -8
  27. data/assets/platform/include/SDL3/SDL_endian.h +645 -0
  28. data/assets/platform/include/SDL3/SDL_error.h +226 -0
  29. data/assets/platform/include/SDL3/SDL_events.h +1645 -0
  30. data/assets/platform/include/SDL3/SDL_filesystem.h +537 -0
  31. data/assets/platform/include/SDL3/SDL_gamepad.h +1656 -0
  32. data/assets/platform/include/SDL3/SDL_gpu.h +4608 -0
  33. data/assets/platform/include/SDL3/SDL_guid.h +106 -0
  34. data/assets/platform/include/SDL3/SDL_haptic.h +1461 -0
  35. data/assets/platform/include/SDL3/SDL_hidapi.h +571 -0
  36. data/assets/platform/include/SDL3/SDL_hints.h +5001 -0
  37. data/assets/platform/include/SDL3/SDL_init.h +507 -0
  38. data/assets/platform/include/SDL3/SDL_intrin.h +410 -0
  39. data/assets/platform/include/SDL3/SDL_iostream.h +1379 -0
  40. data/assets/platform/include/SDL3/SDL_joystick.h +1385 -0
  41. data/assets/platform/include/SDL3/SDL_keyboard.h +608 -0
  42. data/assets/platform/include/SDL3/SDL_keycode.h +347 -0
  43. data/assets/platform/include/SDL3/SDL_loadso.h +145 -0
  44. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_locale.h +40 -24
  45. data/assets/platform/include/SDL3/SDL_log.h +541 -0
  46. data/assets/platform/include/SDL3/SDL_main.h +704 -0
  47. data/assets/platform/include/SDL3/SDL_main_impl.h +151 -0
  48. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_messagebox.h +85 -48
  49. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_metal.h +29 -29
  50. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_misc.h +13 -12
  51. data/assets/platform/include/SDL3/SDL_mouse.h +813 -0
  52. data/assets/platform/include/SDL3/SDL_mutex.h +1117 -0
  53. data/assets/platform/include/SDL3/SDL_oldnames.h +1339 -0
  54. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl.h +1247 -278
  55. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl_glext.h +5 -1
  56. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles.h +6 -7
  57. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2.h +10 -11
  58. data/assets/platform/include/SDL3/SDL_pen.h +198 -0
  59. data/assets/platform/include/SDL3/SDL_pixels.h +1441 -0
  60. data/assets/{include/SDL2/SDL_test_log.h → platform/include/SDL3/SDL_platform.h} +25 -26
  61. data/assets/platform/include/SDL3/SDL_platform_defines.h +497 -0
  62. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_power.h +40 -20
  63. data/assets/platform/include/SDL3/SDL_process.h +441 -0
  64. data/assets/platform/include/SDL3/SDL_properties.h +572 -0
  65. data/assets/platform/include/SDL3/SDL_rect.h +528 -0
  66. data/assets/platform/include/SDL3/SDL_render.h +3028 -0
  67. data/assets/platform/include/SDL3/SDL_revision.h +59 -0
  68. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_scancode.h +59 -68
  69. data/assets/platform/include/SDL3/SDL_sensor.h +321 -0
  70. data/assets/platform/include/SDL3/SDL_stdinc.h +6186 -0
  71. data/assets/platform/include/SDL3/SDL_storage.h +686 -0
  72. data/assets/platform/include/SDL3/SDL_surface.h +1769 -0
  73. data/assets/platform/include/SDL3/SDL_system.h +840 -0
  74. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test.h +16 -22
  75. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_assert.h +27 -34
  76. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_common.h +109 -52
  77. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_compare.h +22 -14
  78. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_crc32.h +27 -30
  79. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_font.h +50 -49
  80. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_fuzzer.h +64 -79
  81. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_harness.h +47 -30
  82. data/assets/platform/include/SDL3/SDL_test_log.h +83 -0
  83. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_md5.h +21 -28
  84. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_memory.h +19 -16
  85. data/assets/platform/include/SDL3/SDL_thread.h +602 -0
  86. data/assets/platform/include/SDL3/SDL_time.h +249 -0
  87. data/assets/platform/include/SDL3/SDL_timer.h +454 -0
  88. data/assets/platform/include/SDL3/SDL_touch.h +184 -0
  89. data/assets/platform/include/SDL3/SDL_tray.h +544 -0
  90. data/assets/platform/include/SDL3/SDL_version.h +198 -0
  91. data/assets/platform/include/SDL3/SDL_video.h +3497 -0
  92. data/assets/platform/include/SDL3/SDL_vulkan.h +287 -0
  93. data/assets/platform/include/SDL3_image/SDL_image.h +3328 -0
  94. data/assets/platform/include/SDL3_mixer/SDL_mixer.h +3369 -0
  95. data/assets/platform/include/SDL3_ttf/SDL_textengine.h +181 -0
  96. data/assets/platform/include/SDL3_ttf/SDL_ttf.h +2833 -0
  97. data/assets/{include → platform/include}/mrbconf.h +42 -31
  98. data/assets/{include → platform/include}/mruby/array.h +3 -4
  99. data/assets/{include → platform/include}/mruby/boxing_nan.h +10 -0
  100. data/assets/platform/include/mruby/boxing_no.h +59 -0
  101. data/assets/{include → platform/include}/mruby/boxing_word.h +72 -26
  102. data/assets/platform/include/mruby/class.h +157 -0
  103. data/assets/{include → platform/include}/mruby/common.h +30 -1
  104. data/assets/{include → platform/include}/mruby/compile.h +52 -74
  105. data/assets/{include → platform/include}/mruby/data.h +2 -2
  106. data/assets/{include → platform/include}/mruby/debug.h +12 -5
  107. data/assets/{include → platform/include}/mruby/dump.h +7 -9
  108. data/assets/{include → platform/include}/mruby/endian.h +1 -1
  109. data/assets/platform/include/mruby/error.h +173 -0
  110. data/assets/platform/include/mruby/gc.h +79 -0
  111. data/assets/{include → platform/include}/mruby/hash.h +1 -7
  112. data/assets/platform/include/mruby/internal.h +282 -0
  113. data/assets/platform/include/mruby/irep.h +143 -0
  114. data/assets/{include → platform/include}/mruby/istruct.h +1 -1
  115. data/assets/platform/include/mruby/khash.h +455 -0
  116. data/assets/platform/include/mruby/mempool.h +19 -0
  117. data/assets/{include → platform/include}/mruby/numeric.h +7 -10
  118. data/assets/platform/include/mruby/object.h +51 -0
  119. data/assets/{include → platform/include}/mruby/opcode.h +5 -5
  120. data/assets/{include → platform/include}/mruby/ops.h +19 -6
  121. data/assets/platform/include/mruby/presym/id.h +1447 -0
  122. data/assets/{include → platform/include}/mruby/presym/scanning.h +10 -7
  123. data/assets/platform/include/mruby/presym/table.h +2893 -0
  124. data/assets/platform/include/mruby/presym.h +65 -0
  125. data/assets/platform/include/mruby/proc.h +184 -0
  126. data/assets/{include → platform/include}/mruby/range.h +0 -2
  127. data/assets/{include → platform/include}/mruby/string.h +33 -53
  128. data/assets/platform/include/mruby/throw.h +81 -0
  129. data/assets/{include → platform/include}/mruby/value.h +64 -29
  130. data/assets/{include → platform/include}/mruby/variable.h +6 -23
  131. data/assets/{include → platform/include}/mruby/version.h +7 -7
  132. data/assets/{include → platform/include}/mruby.h +238 -116
  133. data/assets/platform/macos-arm64/bin/mrbc +0 -0
  134. data/assets/platform/macos-arm64/lib/libSDL3.a +0 -0
  135. data/assets/platform/macos-arm64/lib/libSDL3_image.a +0 -0
  136. data/assets/platform/macos-arm64/lib/libSDL3_mixer.a +0 -0
  137. data/assets/platform/macos-arm64/lib/libSDL3_ttf.a +0 -0
  138. data/assets/platform/macos-arm64/lib/libmruby.a +0 -0
  139. data/assets/platform/wasm/lib/libFLAC.a +0 -0
  140. data/assets/platform/wasm/lib/libSDL3.a +0 -0
  141. data/assets/platform/wasm/lib/libSDL3_image.a +0 -0
  142. data/assets/platform/wasm/lib/libSDL3_mixer.a +0 -0
  143. data/assets/platform/wasm/lib/libSDL3_ttf.a +0 -0
  144. data/assets/platform/wasm/lib/libfreetype.a +0 -0
  145. data/assets/platform/wasm/lib/libharfbuzz.a +0 -0
  146. data/assets/platform/wasm/lib/libmruby.a +0 -0
  147. data/assets/platform/wasm/lib/libogg.a +0 -0
  148. data/assets/platform/wasm/lib/libplutosvg.a +0 -0
  149. data/assets/platform/wasm/lib/libplutovg.a +0 -0
  150. data/assets/platform/wasm/lib/libpng.a +0 -0
  151. data/assets/platform/wasm/lib/libpng16.a +0 -0
  152. data/assets/platform/wasm/lib/libvorbis.a +0 -0
  153. data/assets/platform/wasm/lib/libvorbisfile.a +0 -0
  154. data/assets/platform/wasm/lib/libzlibstatic.a +0 -0
  155. data/assets/platform/windows-arm64-mingw-ucrt/bin/mrbc.exe +0 -0
  156. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3.a +0 -0
  157. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_image.a +0 -0
  158. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
  159. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
  160. data/assets/platform/windows-arm64-mingw-ucrt/lib/libmruby.a +0 -0
  161. data/assets/platform/windows-x86_64-mingw-ucrt/bin/mrbc.exe +0 -0
  162. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3.a +0 -0
  163. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_image.a +0 -0
  164. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
  165. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
  166. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libmruby.a +0 -0
  167. data/assets/resources/fonts/outfit/OFL.txt +93 -0
  168. data/assets/resources/fonts/outfit/outfit.ttf +0 -0
  169. data/assets/resources/fonts/roboto_mono/OFL.txt +91 -0
  170. data/assets/resources/fonts/roboto_mono/roboto_mono.ttf +0 -0
  171. data/assets/resources/icons/icon.icns +0 -0
  172. data/assets/resources/icons/icon.png +0 -0
  173. data/assets/resources/spritesheets/License.txt +28 -0
  174. data/assets/resources/spritesheets/spritesheet-backgrounds.png +0 -0
  175. data/assets/resources/spritesheets/spritesheet-backgrounds.xml +16 -0
  176. data/assets/resources/spritesheets/spritesheet-characters.png +0 -0
  177. data/assets/resources/spritesheets/spritesheet-characters.xml +47 -0
  178. data/assets/resources/spritesheets/spritesheet-enemies.png +0 -0
  179. data/assets/resources/spritesheets/spritesheet-enemies.xml +62 -0
  180. data/assets/resources/spritesheets/spritesheet-tiles.png +0 -0
  181. data/assets/resources/spritesheets/spritesheet-tiles.xml +316 -0
  182. data/assets/{wasm → resources/web}/template.html +1 -1
  183. data/assets/target.rb +131 -0
  184. data/bin/ruby2d +281 -82
  185. data/examples/astar.rb +269 -0
  186. data/examples/asteroids.rb +403 -0
  187. data/examples/bezier_editor.rb +96 -0
  188. data/examples/boids.rb +191 -0
  189. data/examples/bouncing_balls.rb +119 -0
  190. data/examples/breakout.rb +186 -0
  191. data/examples/constellations.rb +100 -0
  192. data/examples/dashboard.rb +133 -0
  193. data/examples/double_pendulum.rb +254 -0
  194. data/examples/falling_sand.rb +291 -0
  195. data/examples/fireworks.rb +110 -0
  196. data/examples/fluid_dynamics.rb +340 -0
  197. data/examples/fourier_epicycles.rb +142 -0
  198. data/examples/fractal_tree.rb +326 -0
  199. data/examples/game_of_life.rb +148 -0
  200. data/examples/gamepads.rb +333 -0
  201. data/examples/hill_driver.rb +613 -0
  202. data/examples/logo_animation.rb +251 -0
  203. data/examples/lorenz_attractor.rb +115 -0
  204. data/examples/mandelbrot.rb +207 -0
  205. data/examples/marching_squares.rb +200 -0
  206. data/examples/maze.rb +323 -0
  207. data/examples/nbody.rb +338 -0
  208. data/examples/outrun.rb +391 -0
  209. data/examples/pixel_paint.rb +313 -0
  210. data/examples/platformer.rb +335 -0
  211. data/examples/ray_casting_maze.rb +175 -0
  212. data/examples/shadow_casting.rb +151 -0
  213. data/examples/shape_recognizer.rb +908 -0
  214. data/examples/snake.rb +144 -0
  215. data/examples/sprite_sheets.rb +246 -0
  216. data/examples/swarm.rb +206 -0
  217. data/examples/tsp_annealing.rb +104 -0
  218. data/examples/ui_controls.rb +163 -0
  219. data/examples/wireframe_3d.rb +139 -0
  220. data/ext/ruby2d/audio.c +324 -0
  221. data/ext/ruby2d/canvas.c +1715 -494
  222. data/ext/ruby2d/ext.c +541 -0
  223. data/ext/ruby2d/extconf.rb +122 -145
  224. data/ext/ruby2d/font.c +566 -20
  225. data/ext/ruby2d/fps.c +92 -0
  226. data/ext/ruby2d/image.c +466 -41
  227. data/ext/ruby2d/ruby2d.c +374 -1890
  228. data/ext/ruby2d/ruby2d.h +840 -460
  229. data/ext/ruby2d/shapes.c +931 -101
  230. data/ext/ruby2d/text.c +586 -21
  231. data/ext/ruby2d/window.c +1693 -283
  232. data/lib/ruby2d/atlas_parser.rb +194 -0
  233. data/lib/ruby2d/audio.rb +73 -0
  234. data/lib/ruby2d/benchmark.rb +259 -0
  235. data/lib/ruby2d/bitmap_text.rb +155 -0
  236. data/lib/ruby2d/button.rb +402 -0
  237. data/lib/ruby2d/canvas.rb +703 -279
  238. data/lib/ruby2d/circle.rb +206 -29
  239. data/lib/ruby2d/cli/browser.rb +314 -0
  240. data/lib/ruby2d/cli/build.rb +471 -257
  241. data/lib/ruby2d/cli/colorize.rb +7 -5
  242. data/lib/ruby2d/cli/examples.rb +127 -0
  243. data/lib/ruby2d/cli/launch.rb +24 -39
  244. data/lib/ruby2d/cli/lib_files.rb +48 -0
  245. data/lib/ruby2d/cli/messages.rb +40 -0
  246. data/lib/ruby2d/cli/setup.rb +273 -0
  247. data/lib/ruby2d/cli/static_server.rb +160 -0
  248. data/lib/ruby2d/cli/usage.rb +255 -0
  249. data/lib/ruby2d/color.rb +191 -69
  250. data/lib/ruby2d/core.rb +37 -19
  251. data/lib/ruby2d/deps_help.rb +89 -0
  252. data/lib/ruby2d/dsl.rb +51 -12
  253. data/lib/ruby2d/ellipse.rb +228 -0
  254. data/lib/ruby2d/exceptions.rb +0 -2
  255. data/lib/ruby2d/font.rb +34 -74
  256. data/lib/ruby2d/gamepad.rb +323 -0
  257. data/lib/ruby2d/gem_paths.rb +19 -0
  258. data/lib/ruby2d/image.rb +155 -52
  259. data/lib/ruby2d/interactive.rb +103 -0
  260. data/lib/ruby2d/json_parser.rb +268 -0
  261. data/lib/ruby2d/line.rb +194 -85
  262. data/lib/ruby2d/mruby_compat.rb +12 -0
  263. data/lib/ruby2d/polygon.rb +297 -0
  264. data/lib/ruby2d/polyline.rb +368 -0
  265. data/lib/ruby2d/quad.rb +358 -94
  266. data/lib/ruby2d/rectangle.rb +77 -19
  267. data/lib/ruby2d/renderable.rb +411 -11
  268. data/lib/ruby2d/sprite.rb +471 -180
  269. data/lib/ruby2d/sprite_sheet.rb +64 -0
  270. data/lib/ruby2d/square.rb +29 -17
  271. data/lib/ruby2d/text.rb +196 -65
  272. data/lib/ruby2d/tileset.rb +139 -81
  273. data/lib/ruby2d/triangle.rb +324 -89
  274. data/lib/ruby2d/version.rb +1 -3
  275. data/lib/ruby2d/vertices.rb +62 -85
  276. data/lib/ruby2d/warnings.rb +29 -0
  277. data/lib/ruby2d/window/class_methods.rb +218 -0
  278. data/lib/ruby2d/window/gamepad_events.rb +141 -0
  279. data/lib/ruby2d/window/key_events.rb +74 -0
  280. data/lib/ruby2d/window/mouse_events.rb +171 -0
  281. data/lib/ruby2d/window/object_events.rb +168 -0
  282. data/lib/ruby2d/window.rb +632 -585
  283. data/lib/ruby2d.rb +14 -19
  284. metadata +275 -428
  285. data/assets/app.icns +0 -0
  286. data/assets/include/GLES2/gl2.h +0 -656
  287. data/assets/include/GLES2/gl2ext.h +0 -3949
  288. data/assets/include/GLES2/gl2ext_angle.h +0 -701
  289. data/assets/include/GLES2/gl2platform.h +0 -27
  290. data/assets/include/GLES3/gl3.h +0 -1192
  291. data/assets/include/GLES3/gl31.h +0 -1507
  292. data/assets/include/GLES3/gl32.h +0 -1808
  293. data/assets/include/GLES3/gl3platform.h +0 -27
  294. data/assets/include/KHR/khrplatform.h +0 -290
  295. data/assets/include/SDL2/SDL.h +0 -233
  296. data/assets/include/SDL2/SDL_assert.h +0 -326
  297. data/assets/include/SDL2/SDL_atomic.h +0 -415
  298. data/assets/include/SDL2/SDL_audio.h +0 -1500
  299. data/assets/include/SDL2/SDL_clipboard.h +0 -141
  300. data/assets/include/SDL2/SDL_config.h +0 -61
  301. data/assets/include/SDL2/SDL_config_android.h +0 -194
  302. data/assets/include/SDL2/SDL_config_emscripten.h +0 -218
  303. data/assets/include/SDL2/SDL_config_iphoneos.h +0 -217
  304. data/assets/include/SDL2/SDL_config_macosx.h +0 -277
  305. data/assets/include/SDL2/SDL_config_minimal.h +0 -95
  306. data/assets/include/SDL2/SDL_config_ngage.h +0 -89
  307. data/assets/include/SDL2/SDL_config_os2.h +0 -207
  308. data/assets/include/SDL2/SDL_config_pandora.h +0 -141
  309. data/assets/include/SDL2/SDL_config_windows.h +0 -331
  310. data/assets/include/SDL2/SDL_config_wingdk.h +0 -253
  311. data/assets/include/SDL2/SDL_config_winrt.h +0 -220
  312. data/assets/include/SDL2/SDL_config_xbox.h +0 -235
  313. data/assets/include/SDL2/SDL_cpuinfo.h +0 -594
  314. data/assets/include/SDL2/SDL_endian.h +0 -348
  315. data/assets/include/SDL2/SDL_error.h +0 -163
  316. data/assets/include/SDL2/SDL_events.h +0 -1166
  317. data/assets/include/SDL2/SDL_filesystem.h +0 -149
  318. data/assets/include/SDL2/SDL_gamecontroller.h +0 -1074
  319. data/assets/include/SDL2/SDL_gesture.h +0 -117
  320. data/assets/include/SDL2/SDL_guid.h +0 -100
  321. data/assets/include/SDL2/SDL_haptic.h +0 -1341
  322. data/assets/include/SDL2/SDL_hidapi.h +0 -451
  323. data/assets/include/SDL2/SDL_hints.h +0 -2569
  324. data/assets/include/SDL2/SDL_image.h +0 -2173
  325. data/assets/include/SDL2/SDL_joystick.h +0 -1066
  326. data/assets/include/SDL2/SDL_keyboard.h +0 -353
  327. data/assets/include/SDL2/SDL_keycode.h +0 -358
  328. data/assets/include/SDL2/SDL_loadso.h +0 -115
  329. data/assets/include/SDL2/SDL_log.h +0 -404
  330. data/assets/include/SDL2/SDL_main.h +0 -275
  331. data/assets/include/SDL2/SDL_mixer.h +0 -2784
  332. data/assets/include/SDL2/SDL_mouse.h +0 -465
  333. data/assets/include/SDL2/SDL_mutex.h +0 -471
  334. data/assets/include/SDL2/SDL_name.h +0 -33
  335. data/assets/include/SDL2/SDL_pixels.h +0 -644
  336. data/assets/include/SDL2/SDL_platform.h +0 -261
  337. data/assets/include/SDL2/SDL_quit.h +0 -58
  338. data/assets/include/SDL2/SDL_rect.h +0 -376
  339. data/assets/include/SDL2/SDL_render.h +0 -1919
  340. data/assets/include/SDL2/SDL_revision.h +0 -6
  341. data/assets/include/SDL2/SDL_rwops.h +0 -841
  342. data/assets/include/SDL2/SDL_sensor.h +0 -322
  343. data/assets/include/SDL2/SDL_shape.h +0 -155
  344. data/assets/include/SDL2/SDL_stdinc.h +0 -830
  345. data/assets/include/SDL2/SDL_surface.h +0 -997
  346. data/assets/include/SDL2/SDL_system.h +0 -623
  347. data/assets/include/SDL2/SDL_syswm.h +0 -386
  348. data/assets/include/SDL2/SDL_test_images.h +0 -78
  349. data/assets/include/SDL2/SDL_test_random.h +0 -115
  350. data/assets/include/SDL2/SDL_thread.h +0 -464
  351. data/assets/include/SDL2/SDL_timer.h +0 -222
  352. data/assets/include/SDL2/SDL_touch.h +0 -150
  353. data/assets/include/SDL2/SDL_ttf.h +0 -2316
  354. data/assets/include/SDL2/SDL_types.h +0 -29
  355. data/assets/include/SDL2/SDL_version.h +0 -204
  356. data/assets/include/SDL2/SDL_video.h +0 -2150
  357. data/assets/include/SDL2/SDL_vulkan.h +0 -215
  358. data/assets/include/SDL2/begin_code.h +0 -187
  359. data/assets/include/mruby/boxing_no.h +0 -58
  360. data/assets/include/mruby/class.h +0 -108
  361. data/assets/include/mruby/error.h +0 -147
  362. data/assets/include/mruby/gc.h +0 -94
  363. data/assets/include/mruby/irep.h +0 -147
  364. data/assets/include/mruby/khash.h +0 -284
  365. data/assets/include/mruby/object.h +0 -43
  366. data/assets/include/mruby/presym/disable.h +0 -70
  367. data/assets/include/mruby/presym/enable.h +0 -37
  368. data/assets/include/mruby/presym.h +0 -40
  369. data/assets/include/mruby/proc.h +0 -211
  370. data/assets/include/mruby/throw.h +0 -66
  371. data/assets/macos/universal/bin/mrbc +0 -0
  372. data/assets/macos/universal/lib/libFLAC.a +0 -0
  373. data/assets/macos/universal/lib/libSDL2.a +0 -0
  374. data/assets/macos/universal/lib/libSDL2_image.a +0 -0
  375. data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
  376. data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
  377. data/assets/macos/universal/lib/libavif.a +0 -0
  378. data/assets/macos/universal/lib/libbrotlicommon-static.a +0 -0
  379. data/assets/macos/universal/lib/libbrotlidec-static.a +0 -0
  380. data/assets/macos/universal/lib/libfreetype.a +0 -0
  381. data/assets/macos/universal/lib/libgraphite2.a +0 -0
  382. data/assets/macos/universal/lib/libharfbuzz.a +0 -0
  383. data/assets/macos/universal/lib/libhwy.a +0 -0
  384. data/assets/macos/universal/lib/libjpeg.a +0 -0
  385. data/assets/macos/universal/lib/libjxl.a +0 -0
  386. data/assets/macos/universal/lib/libmodplug.a +0 -0
  387. data/assets/macos/universal/lib/libmpg123.a +0 -0
  388. data/assets/macos/universal/lib/libmruby.a +0 -0
  389. data/assets/macos/universal/lib/libogg.a +0 -0
  390. data/assets/macos/universal/lib/libpng.a +0 -0
  391. data/assets/macos/universal/lib/libtiff.a +0 -0
  392. data/assets/macos/universal/lib/libvorbis.a +0 -0
  393. data/assets/macos/universal/lib/libvorbisfile.a +0 -0
  394. data/assets/macos/universal/lib/libwebp.a +0 -0
  395. data/assets/macos/universal/lib/libzstd.a +0 -0
  396. data/assets/test_media/README.md +0 -3
  397. data/assets/test_media/bitstream_vera/COPYRIGHT.txt +0 -124
  398. data/assets/test_media/bitstream_vera/vera.ttf +0 -0
  399. data/assets/test_media/boom.png +0 -0
  400. data/assets/test_media/coin.png +0 -0
  401. data/assets/test_media/colors.png +0 -0
  402. data/assets/test_media/controller.png +0 -0
  403. data/assets/test_media/dial.wav +0 -0
  404. data/assets/test_media/hero.png +0 -0
  405. data/assets/test_media/image.bmp +0 -0
  406. data/assets/test_media/image.jpg +0 -0
  407. data/assets/test_media/image.png +0 -0
  408. data/assets/test_media/music.flac +0 -0
  409. data/assets/test_media/music.mp3 +0 -0
  410. data/assets/test_media/music.ogg +0 -0
  411. data/assets/test_media/music.wav +0 -0
  412. data/assets/test_media/originals/boom.pxm +0 -0
  413. data/assets/test_media/originals/coin.pxm +0 -0
  414. data/assets/test_media/originals/controller.sketch +0 -0
  415. data/assets/test_media/originals/hero.pxm +0 -0
  416. data/assets/test_media/originals/image.pxm +0 -0
  417. data/assets/test_media/originals/music.caf +0 -0
  418. data/assets/test_media/originals/texture_atlas.pxm +0 -0
  419. data/assets/test_media/rondo_alla_turka.ogg +0 -0
  420. data/assets/test_media/sound.flac +0 -0
  421. data/assets/test_media/sound.mp3 +0 -0
  422. data/assets/test_media/sound.ogg +0 -0
  423. data/assets/test_media/sound.wav +0 -0
  424. data/assets/test_media/sprite_sheet.png +0 -0
  425. data/assets/test_media/texture_atlas.png +0 -0
  426. data/assets/wasm/libmruby.a +0 -0
  427. data/assets/windows/mingw-w64-ucrt-x86_64/bin/mrbc.exe +0 -0
  428. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
  429. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libLerc.a +0 -0
  430. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
  431. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_image.a +0 -0
  432. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
  433. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_ttf.a +0 -0
  434. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlicommon.a +0 -0
  435. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlidec.a +0 -0
  436. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbz2.a +0 -0
  437. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libdeflate.a +0 -0
  438. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libfreetype.a +0 -0
  439. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
  440. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libgraphite2.a +0 -0
  441. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libharfbuzz.a +0 -0
  442. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libhwy.a +0 -0
  443. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjbig.a +0 -0
  444. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjpeg.a +0 -0
  445. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjxl.a +0 -0
  446. data/assets/windows/mingw-w64-ucrt-x86_64/lib/liblzma.a +0 -0
  447. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
  448. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
  449. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmruby.a +0 -0
  450. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
  451. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
  452. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
  453. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libpng.a +0 -0
  454. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
  455. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +0 -1
  456. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
  457. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libtiff.a +0 -0
  458. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
  459. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
  460. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libwebp.a +0 -0
  461. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
  462. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
  463. data/assets/windows/mingw-w64-x86_64/bin/mrbc.exe +0 -0
  464. data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
  465. data/assets/windows/mingw-w64-x86_64/lib/libLerc.a +0 -0
  466. data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
  467. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_image.a +0 -0
  468. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
  469. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_ttf.a +0 -0
  470. data/assets/windows/mingw-w64-x86_64/lib/libbrotlicommon.a +0 -0
  471. data/assets/windows/mingw-w64-x86_64/lib/libbrotlidec.a +0 -0
  472. data/assets/windows/mingw-w64-x86_64/lib/libbz2.a +0 -0
  473. data/assets/windows/mingw-w64-x86_64/lib/libdeflate.a +0 -0
  474. data/assets/windows/mingw-w64-x86_64/lib/libfreetype.a +0 -0
  475. data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
  476. data/assets/windows/mingw-w64-x86_64/lib/libgraphite2.a +0 -0
  477. data/assets/windows/mingw-w64-x86_64/lib/libharfbuzz.a +0 -0
  478. data/assets/windows/mingw-w64-x86_64/lib/libhwy.a +0 -0
  479. data/assets/windows/mingw-w64-x86_64/lib/libjbig.a +0 -0
  480. data/assets/windows/mingw-w64-x86_64/lib/libjpeg.a +0 -0
  481. data/assets/windows/mingw-w64-x86_64/lib/libjxl.a +0 -0
  482. data/assets/windows/mingw-w64-x86_64/lib/liblzma.a +0 -0
  483. data/assets/windows/mingw-w64-x86_64/lib/libmodplug.a +0 -0
  484. data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
  485. data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
  486. data/assets/windows/mingw-w64-x86_64/lib/libogg.a +0 -0
  487. data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
  488. data/assets/windows/mingw-w64-x86_64/lib/libopusfile.a +0 -0
  489. data/assets/windows/mingw-w64-x86_64/lib/libpng.a +0 -0
  490. data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
  491. data/assets/windows/mingw-w64-x86_64/lib/libssp.a +0 -1
  492. data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
  493. data/assets/windows/mingw-w64-x86_64/lib/libtiff.a +0 -0
  494. data/assets/windows/mingw-w64-x86_64/lib/libvorbis.a +0 -0
  495. data/assets/windows/mingw-w64-x86_64/lib/libvorbisfile.a +0 -0
  496. data/assets/windows/mingw-w64-x86_64/lib/libwebp.a +0 -0
  497. data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
  498. data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
  499. data/assets/xcode/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
  500. data/assets/xcode/ios/Assets.xcassets/Contents.json +0 -6
  501. data/assets/xcode/ios/Base.lproj/LaunchScreen.storyboard +0 -27
  502. data/assets/xcode/ios/Info.plist +0 -43
  503. data/assets/xcode/ios/MRuby.framework/Headers/mrbconf.h +0 -143
  504. data/assets/xcode/ios/MRuby.framework/Headers/mruby/array.h +0 -280
  505. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  506. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  507. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  508. data/assets/xcode/ios/MRuby.framework/Headers/mruby/class.h +0 -97
  509. data/assets/xcode/ios/MRuby.framework/Headers/mruby/common.h +0 -77
  510. data/assets/xcode/ios/MRuby.framework/Headers/mruby/compile.h +0 -195
  511. data/assets/xcode/ios/MRuby.framework/Headers/mruby/data.h +0 -75
  512. data/assets/xcode/ios/MRuby.framework/Headers/mruby/debug.h +0 -67
  513. data/assets/xcode/ios/MRuby.framework/Headers/mruby/dump.h +0 -196
  514. data/assets/xcode/ios/MRuby.framework/Headers/mruby/error.h +0 -75
  515. data/assets/xcode/ios/MRuby.framework/Headers/mruby/gc.h +0 -91
  516. data/assets/xcode/ios/MRuby.framework/Headers/mruby/hash.h +0 -215
  517. data/assets/xcode/ios/MRuby.framework/Headers/mruby/irep.h +0 -75
  518. data/assets/xcode/ios/MRuby.framework/Headers/mruby/istruct.h +0 -47
  519. data/assets/xcode/ios/MRuby.framework/Headers/mruby/khash.h +0 -274
  520. data/assets/xcode/ios/MRuby.framework/Headers/mruby/numeric.h +0 -161
  521. data/assets/xcode/ios/MRuby.framework/Headers/mruby/object.h +0 -44
  522. data/assets/xcode/ios/MRuby.framework/Headers/mruby/opcode.h +0 -69
  523. data/assets/xcode/ios/MRuby.framework/Headers/mruby/ops.h +0 -117
  524. data/assets/xcode/ios/MRuby.framework/Headers/mruby/proc.h +0 -131
  525. data/assets/xcode/ios/MRuby.framework/Headers/mruby/range.h +0 -49
  526. data/assets/xcode/ios/MRuby.framework/Headers/mruby/re.h +0 -16
  527. data/assets/xcode/ios/MRuby.framework/Headers/mruby/string.h +0 -444
  528. data/assets/xcode/ios/MRuby.framework/Headers/mruby/throw.h +0 -55
  529. data/assets/xcode/ios/MRuby.framework/Headers/mruby/value.h +0 -309
  530. data/assets/xcode/ios/MRuby.framework/Headers/mruby/variable.h +0 -136
  531. data/assets/xcode/ios/MRuby.framework/Headers/mruby/version.h +0 -110
  532. data/assets/xcode/ios/MRuby.framework/Headers/mruby.h +0 -1282
  533. data/assets/xcode/ios/MRuby.framework/Info.plist +0 -20
  534. data/assets/xcode/ios/MRuby.framework/MRuby +0 -0
  535. data/assets/xcode/ios/MyApp.xcodeproj/project.pbxproj +0 -368
  536. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  537. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  538. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  539. data/assets/xcode/ios/main.c +0 -1
  540. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  541. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +0 -6
  542. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +0 -17
  543. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  544. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +0 -6
  545. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  546. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  547. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  548. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +0 -6
  549. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +0 -17
  550. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  551. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +0 -6
  552. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  553. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  554. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +0 -32
  555. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +0 -16
  556. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +0 -16
  557. data/assets/xcode/tvos/Assets.xcassets/Contents.json +0 -6
  558. data/assets/xcode/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +0 -22
  559. data/assets/xcode/tvos/Info.plist +0 -30
  560. data/assets/xcode/tvos/MRuby.framework/Headers/mrbconf.h +0 -143
  561. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/array.h +0 -280
  562. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  563. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  564. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  565. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/class.h +0 -97
  566. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/common.h +0 -77
  567. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/compile.h +0 -195
  568. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/data.h +0 -75
  569. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/debug.h +0 -67
  570. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/dump.h +0 -196
  571. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/error.h +0 -75
  572. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/gc.h +0 -91
  573. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/hash.h +0 -215
  574. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/irep.h +0 -75
  575. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/istruct.h +0 -47
  576. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/khash.h +0 -274
  577. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/numeric.h +0 -161
  578. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/object.h +0 -44
  579. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/opcode.h +0 -69
  580. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/ops.h +0 -117
  581. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/proc.h +0 -131
  582. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/range.h +0 -49
  583. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/re.h +0 -16
  584. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/string.h +0 -444
  585. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/throw.h +0 -55
  586. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/value.h +0 -309
  587. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/variable.h +0 -136
  588. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/version.h +0 -110
  589. data/assets/xcode/tvos/MRuby.framework/Headers/mruby.h +0 -1282
  590. data/assets/xcode/tvos/MRuby.framework/Info.plist +0 -20
  591. data/assets/xcode/tvos/MRuby.framework/MRuby +0 -0
  592. data/assets/xcode/tvos/MyApp.xcodeproj/project.pbxproj +0 -350
  593. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  594. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  595. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  596. data/assets/xcode/tvos/main.c +0 -1
  597. data/ext/ruby2d/common.c +0 -185
  598. data/ext/ruby2d/controllers.c +0 -110
  599. data/ext/ruby2d/gl.c +0 -398
  600. data/ext/ruby2d/gl2.c +0 -86
  601. data/ext/ruby2d/gl3.c +0 -304
  602. data/ext/ruby2d/gles.c +0 -302
  603. data/ext/ruby2d/input.c +0 -48
  604. data/ext/ruby2d/music.c +0 -127
  605. data/ext/ruby2d/sound.c +0 -132
  606. data/lib/ruby2d/cli/console.rb +0 -65
  607. data/lib/ruby2d/cli/enable_console.rb +0 -7
  608. data/lib/ruby2d/cli/platform.rb +0 -17
  609. data/lib/ruby2d/music.rb +0 -77
  610. data/lib/ruby2d/pixel.rb +0 -18
  611. data/lib/ruby2d/pixmap.rb +0 -39
  612. data/lib/ruby2d/pixmap_atlas.rb +0 -56
  613. data/lib/ruby2d/sound.rb +0 -61
  614. data/lib/ruby2d/texture.rb +0 -38
  615. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2.h +0 -0
  616. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2ext.h +0 -0
  617. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2platform.h +0 -0
  618. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_khrplatform.h +0 -0
  619. /data/assets/{include → platform/include}/mruby/re.h +0 -0
data/assets/Rakefile ADDED
@@ -0,0 +1,637 @@
1
+ require 'yaml'
2
+ require_relative 'target'
3
+
4
+ # Load pinned dependency versions from deps.yaml — updated by `rake update`
5
+ DEPS = YAML.load_file(File.join(__dir__, 'deps.yaml'))
6
+
7
+ SDL_NAMES = %w[SDL SDL_image SDL_mixer SDL_ttf]
8
+
9
+ # Key directories (resolved from host OS/arch/toolchain, or env overrides)
10
+ HOST_OS = AssetsTarget.host_os # e.g. "macos", "windows"
11
+ SOURCES_DIR = AssetsTarget.sources_dir # assets/sources
12
+ PLATFORM_DIR = AssetsTarget.platform_dir # assets/platform/{os}-{arch}[-{toolchain}]
13
+ INCLUDE_DIR = AssetsTarget.include_dir # assets/platform/include (shared headers)
14
+ BUILD_DIR = AssetsTarget.build_dir # assets/build/{target_id}
15
+ WASM_BUILD_DIR = AssetsTarget.wasm_build_dir
16
+ WASM_LIB_DIR = File.join(AssetsTarget.wasm_platform_dir, 'lib') # assets/platform/wasm/lib
17
+
18
+
19
+ # Helpers ######################################################################
20
+
21
+ # Extend `String` to include some fancy colors
22
+ class String
23
+ def ruby2d_colorize(c); "\e[#{c}m#{self}\e[0m" end
24
+ def bold; ruby2d_colorize('1') end
25
+ def dim; ruby2d_colorize('2') end
26
+ def info; ruby2d_colorize('1;34') end
27
+ def warning; ruby2d_colorize('1;33') end
28
+ def success; ruby2d_colorize('1;32') end
29
+ def error; ruby2d_colorize('1;31') end
30
+ def ruby2d_red; ruby2d_colorize('38;2;246;60;56') end
31
+ end
32
+
33
+ # Platform-specific linker flags
34
+ PLATFORM_LIBS = case HOST_OS
35
+ when 'macos'
36
+ %w[
37
+ AVFoundation AudioToolbox Carbon Cocoa CoreAudio CoreHaptics
38
+ CoreMedia ForceFeedback GameController IOKit Metal QuartzCore
39
+ UniformTypeIdentifiers
40
+ ].map { |fw| "-framework #{fw}" }.join(' ')
41
+ when 'windows'
42
+ '-lhid -lsetupapi -lole32 -loleaut32 -luuid -lgdi32 -luser32 -lwinmm -lusp10 -limm32 -lversion -lrpcrt4'
43
+ when 'linux'
44
+ # SDL loads most features dynamically at runtime (dlopen), so we only need
45
+ # libc-adjacent libs here; -ldl/-lpthread are no-ops on glibc >= 2.34
46
+ '-lm -ldl -lpthread'
47
+ end
48
+
49
+ LIBS = "-lSDL3 -lSDL3_image -lSDL3_mixer -lSDL3_ttf #{PLATFORM_LIBS}"
50
+
51
+ # A task banner: ruby-red diamond + bold title. The leading "\n" owns the blank
52
+ # before it; whatever follows (a run_cmd echo, the next banner, or a message
53
+ # with its own leading "\n") supplies the gap after. In the rare case a banner
54
+ # is followed directly by self-printed prose, add a `puts` at that call site.
55
+ def print_task(task)
56
+ print "\n", " #{'◆'.ruby2d_red} #{task.bold}", "\n"
57
+ end
58
+
59
+ # Run system command
60
+ def run_cmd(cmd)
61
+ puts " #{"$ #{cmd}".dim}\n\n"
62
+ system(cmd) || exit(1)
63
+ rescue Interrupt
64
+ # Ctrl-C — the user stopped the running command (e.g. the `launch` web
65
+ # server). Exit quietly with the conventional SIGINT status (130) instead of
66
+ # dumping a backtrace.
67
+ exit(130)
68
+ end
69
+
70
+ # Print a produced-file line: dim "wrote" + the path, indented under a banner
71
+ def wrote(path)
72
+ puts " #{'wrote'.dim} #{path}"
73
+ end
74
+
75
+ # Compose a labeled line: the label carries the color, the message stays normal
76
+ # weight. `spaced` adds a blank line above. Mirrors cli/messages.rb in the
77
+ # ruby2d gem — this repo builds standalone and can't require that file, so the
78
+ # two are kept in step by hand.
79
+ def labeled(label, msg, spaced)
80
+ "#{"\n" if spaced}#{label} #{msg}"
81
+ end
82
+
83
+ def error(msg, spaced: false)
84
+ puts labeled('Error:'.error, msg, spaced)
85
+ end
86
+
87
+ def warning(msg, spaced: false)
88
+ puts labeled('Warning:'.warning, msg, spaced)
89
+ end
90
+
91
+ # Print an `Error:` line to stderr and exit non-zero
92
+ def abort_error(msg, spaced: false)
93
+ abort labeled('Error:'.error, msg, spaced)
94
+ end
95
+
96
+ # Check if a command is available on PATH (cached)
97
+ $cmd_cache = {}
98
+ def cmd_available?(cmd)
99
+ $cmd_cache.fetch(cmd) do
100
+ result =
101
+ if HOST_OS == 'windows'
102
+ system("where #{cmd} >NUL 2>&1")
103
+ else
104
+ system("command -v #{cmd} >/dev/null 2>&1")
105
+ end
106
+ $cmd_cache[cmd] = result
107
+ end
108
+ end
109
+
110
+ # Guard that aborts if a required command is missing
111
+ def require_cmd!(cmd, error_msg = nil)
112
+ return true if cmd_available?(cmd)
113
+
114
+ abort_error(error_msg || "#{cmd} is not installed or not found in PATH")
115
+ end
116
+
117
+ # Whether an Emscripten toolchain is available for WASM builds
118
+ def emscripten_available?
119
+ cmd_available?('emcc') && cmd_available?('emcmake')
120
+ end
121
+
122
+ # Windows build tools (git + cmake) come from MSYS2, which is bundled with the
123
+ # RubyInstaller Devkit but doesn't install these by default. The cmake package
124
+ # name differs by architecture; git is the same on both.
125
+ WINDOWS_PACMAN_PACKAGES = {
126
+ 'x86_64' => %w[git mingw-w64-ucrt-x86_64-cmake],
127
+ 'arm64' => %w[git mingw-w64-clang-aarch64-cmake],
128
+ }.freeze
129
+
130
+ # On Windows, check for git and cmake up front and offer to install them via
131
+ # pacman rather than failing partway through a build. No-op on other platforms
132
+ # (the per-task `require_cmd!` guards still apply there).
133
+ def check_windows_build_tools!
134
+ return unless HOST_OS == 'windows'
135
+
136
+ missing = %w[git cmake].reject { |c| cmd_available?(c) }
137
+ return if missing.empty?
138
+
139
+ packages = WINDOWS_PACMAN_PACKAGES[AssetsTarget.host_arch]
140
+ pkg_list = packages&.join(' ')
141
+
142
+ puts "\n#{'Missing build tools:'.warning} #{missing.join(', ')}"
143
+ puts 'These come from MSYS2, bundled with the RubyInstaller Devkit.'
144
+
145
+ # RubyInstaller exposes MSYS2's pacman via `ridk exec`; fall back to a bare
146
+ # `pacman` if it's already on PATH (e.g. running inside an MSYS2 shell).
147
+ runner =
148
+ if cmd_available?('ridk') then 'ridk exec pacman'
149
+ elsif cmd_available?('pacman') then 'pacman'
150
+ end
151
+
152
+ # Can't drive pacman (no ridk/pacman) or unknown arch — print instructions and stop.
153
+ if runner.nil? || pkg_list.nil?
154
+ puts "\nInstall them manually, then re-run:"
155
+ puts " #{"pacman -S #{pkg_list || 'git <cmake-package>'}".dim}"
156
+ abort_error 'git and cmake are required to build.'
157
+ end
158
+
159
+ puts "Install with: #{"pacman -S #{pkg_list}".dim}"
160
+ print "\nInstall them now? [y/N] "
161
+ answer = $stdin.gets&.strip
162
+ unless answer&.downcase == 'y'
163
+ abort_error 'git and cmake are required to build. Install the packages above and re-run.'
164
+ end
165
+
166
+ install_cmd = "#{runner} -S --needed --noconfirm #{pkg_list}"
167
+ print_task 'Installing build tools'
168
+ puts " #{"$ #{install_cmd}".dim}\n\n"
169
+ install_ok = system(install_cmd)
170
+
171
+ # Freshly installed tools land in an MSYS2 bin already on PATH, so clear the
172
+ # (negative) cache and re-check rather than trusting the earlier result.
173
+ $cmd_cache.clear
174
+ still_missing = %w[git cmake].reject { |c| cmd_available?(c) }
175
+
176
+ unless install_ok && still_missing.empty?
177
+ detail = still_missing.empty? ? '' : " (#{still_missing.join(', ')} still not on PATH)"
178
+ abort_error "Couldn't install build tools automatically#{detail}.\n" \
179
+ " Run #{"pacman -S #{pkg_list}".dim} in an MSYS2 shell, then re-run.\n" \
180
+ ' You may need to open a new terminal so the tools are picked up on PATH.'
181
+ end
182
+
183
+ puts "\n#{'Build tools ready!'.success}"
184
+ end
185
+
186
+ # Clone a repo at a specific tag (shallow), re-cloning if the tag has changed.
187
+ # When $skip_source_updates is set, existing sources are left as-is (only
188
+ # missing sources are cloned) — used by the default `rake` task.
189
+ def clone_at_tag(name, url, tag, dir, recurse_submodules: false)
190
+ if Dir.exist?(dir)
191
+ return if $skip_source_updates
192
+ current_tag = `git -C #{dir} describe --tags --exact-match 2>/dev/null`.strip
193
+ return if current_tag == tag
194
+ print_task "Re-cloning #{name} (#{current_tag.empty? ? '?' : current_tag} -> #{tag})"
195
+ FileUtils.rm_rf dir
196
+ else
197
+ print_task "Cloning #{name} at #{tag}"
198
+ end
199
+ FileUtils.mkdir_p(File.dirname(dir))
200
+ cmds = ["git clone --branch #{tag} --depth 1 #{url} #{dir}"]
201
+ if recurse_submodules
202
+ cmds << "git -C #{dir} submodule update --init --recursive --depth 1"
203
+ end
204
+ cmds.each { |cmd| run_cmd cmd }
205
+ end
206
+
207
+
208
+ # Tasks ########################################################################
209
+
210
+ task default: :all
211
+
212
+ # Preflight tool check (Windows: offer to install git/cmake via pacman). Listed
213
+ # as a prerequisite of the build tasks below so it runs before any download or
214
+ # build step. Rake invokes it at most once per run; no-op on non-Windows hosts.
215
+ task :preflight do
216
+ check_windows_build_tools!
217
+ end
218
+
219
+ desc 'List commands'
220
+ task :list do
221
+ puts `rake -T`
222
+ end
223
+
224
+ desc 'Clean and build everything from source (prompts before running)'
225
+ task :all do
226
+ puts
227
+ puts 'Clean and build everything from source'.bold
228
+ puts
229
+ puts 'This will:'.bold
230
+ puts " • Clean build artifacts for this target (#{AssetsTarget.target_id}) and WASM"
231
+ puts ' • Build SDL libraries (SDL, SDL_image, SDL_mixer, SDL_ttf)'
232
+ puts ' • Build mruby'
233
+ puts ' • Build WASM libraries (only if Emscripten is available)'
234
+ puts
235
+ puts 'This will NOT:'.warning
236
+ puts ' • Run `update` — pinned dependencies may be out of date'
237
+ puts ' (run `rake update` to check for and apply newer versions)'
238
+ puts ' • Update existing sources — missing sources will be cloned at'
239
+ puts ' their pinned versions, but existing sources are left untouched'
240
+ puts " • Clean other targets or start fresh — to wipe EVERY target's"
241
+ puts ' artifacts and all sources, run `rake clean:all` first'
242
+ puts
243
+ puts 'This can take several minutes.'
244
+
245
+ print "\nContinue? [y/N] "
246
+ answer = $stdin.gets&.strip
247
+ unless answer&.downcase == 'y'
248
+ puts 'Cancelled.'
249
+ next
250
+ end
251
+
252
+ # Ensure build tools are present before doing any work (Windows: offer to
253
+ # install git/cmake). Runs before `clean` so nothing happens if tools are
254
+ # missing and the user declines to install.
255
+ Rake::Task[:preflight].invoke
256
+
257
+ # Leave existing sources untouched; only clone what's missing
258
+ $skip_source_updates = true
259
+
260
+ Rake::Task[:clean].invoke
261
+ Rake::Task[:build].invoke
262
+ end
263
+
264
+ desc 'Build all libraries (SDL + mruby, plus WASM if Emscripten is available)'
265
+ task build: [:preflight, :sdl, :mruby] do
266
+ # Build WASM too, but only if Emscripten is available — otherwise skip with a notice
267
+ if emscripten_available?
268
+ Rake::Task[:wasm].invoke
269
+ else
270
+ warning 'Skipping WASM build — Emscripten not found (run `rake wasm` after sourcing emsdk_env.sh)', spaced: true
271
+ end
272
+
273
+ puts "\n#{'All done!'.success}"
274
+
275
+ # Native platform artifacts
276
+ libs = Dir.glob(File.join(PLATFORM_DIR, 'lib', '*.a')).map { |f| File.basename(f) }.sort
277
+ bins = Dir.glob(File.join(PLATFORM_DIR, 'bin', '*')).map { |f| File.basename(f) }.sort
278
+
279
+ unless libs.empty? && bins.empty?
280
+ puts "\n #{"Native (#{AssetsTarget.target_id})".bold}"
281
+ libs.each { |f| puts " lib/#{f}" }
282
+ bins.each { |f| puts " bin/#{f}" }
283
+ end
284
+
285
+ # WASM artifacts — list the main libs, summarize vendored
286
+ wasm_main = %w[libSDL3.a libSDL3_image.a libSDL3_mixer.a libSDL3_ttf.a libmruby.a]
287
+ .select { |f| File.exist?(File.join(WASM_LIB_DIR, f)) }
288
+ wasm_vendored = Dir.glob(File.join(WASM_LIB_DIR, '*.a')).count - wasm_main.count
289
+
290
+ unless wasm_main.empty?
291
+ puts "\n #{'WASM (platform/wasm/lib/)'.bold}"
292
+ wasm_main.each { |f| puts " #{f}" }
293
+ puts " + #{wasm_vendored} vendored" if wasm_vendored > 0
294
+ end
295
+
296
+ puts ''
297
+ end
298
+
299
+ desc 'Clean all build artifacts'
300
+ task clean: [:'sdl:clean', :'mruby:clean', :'wasm:clean']
301
+
302
+ namespace :clean do
303
+ desc "Deep clean — remove EVERY target's build artifacts, WASM libs, and downloaded sources"
304
+ task :all do
305
+ print_task 'Removing all build artifacts (every target + WASM)'
306
+ FileUtils.rm_rf 'build' # build/{target_id} for every target, plus build/wasm
307
+ FileUtils.rm_rf 'platform' # compiled libs/bins/headers for every target, plus platform/wasm
308
+
309
+ print_task 'Removing downloaded sources'
310
+ FileUtils.rm_rf SOURCES_DIR # re-downloaded on the next build (or `rake sdl:download` / `rake update`)
311
+ end
312
+ end
313
+
314
+
315
+ # Update #######################################################################
316
+
317
+ desc 'Check for newer tags and update sources + deps.yaml'
318
+ task :update do
319
+ print_task 'Checking for updates'
320
+ require_cmd! 'git'
321
+
322
+ updates = {}
323
+ errors = {}
324
+ threads = DEPS.map do |name, info|
325
+ Thread.new do
326
+ out = `git ls-remote --tags #{info['url']}`
327
+ # $? is per-thread; check it immediately so a fetch failure isn't
328
+ # mistaken for "no newer tags" (which would falsely read as up to date)
329
+ unless $?.success?
330
+ errors[name] = "could not reach #{info['url']}"
331
+ next
332
+ end
333
+
334
+ tags = out.lines
335
+ .map { |l| l.split("\t").last.strip.sub('refs/tags/', '') }
336
+ .reject { |t| t.end_with?('^{}') }
337
+
338
+ latest = if SDL_NAMES.include?(name)
339
+ # Only consider release-X.Y.Z tags (exclude prerelease-*)
340
+ tags.select { |t| t.match?(/\Arelease-\d+\.\d+\.\d+\z/) }
341
+ .max_by { |t| t.sub('release-', '').split('.').map(&:to_i) }
342
+ else
343
+ # Only consider clean version tags (e.g. 4.0.0), skip rc/alpha/beta
344
+ tags.select { |t| t.match?(/\A\d+\.\d+\.\d+\z/) }
345
+ .max_by { |t| t.split('.').map(&:to_i) }
346
+ end
347
+
348
+ updates[name] = latest if latest && latest != info['tag']
349
+ end
350
+ end
351
+ threads.each(&:join)
352
+
353
+ unless errors.empty?
354
+ puts "\nCould not check some dependencies:".warning
355
+ errors.each { |name, msg| puts " #{name}: #{msg}" }
356
+ end
357
+
358
+ if updates.empty?
359
+ puts "\nAll dependencies are up to date!".success if errors.empty?
360
+ next
361
+ end
362
+
363
+ puts "\nUpdates available:".bold
364
+ updates.each do |name, new_tag|
365
+ puts " #{name}: #{DEPS[name]['tag']} -> #{new_tag}"
366
+ end
367
+
368
+ print "\nApply updates? [y/N] "
369
+ answer = $stdin.gets&.strip
370
+ unless answer&.downcase == 'y'
371
+ puts 'Cancelled.'
372
+ next
373
+ end
374
+
375
+ # Update local clones
376
+ updates.each do |name, new_tag|
377
+ clone_at_tag(name, DEPS[name]['url'], new_tag,
378
+ File.join(SOURCES_DIR, name), recurse_submodules: name != 'mruby')
379
+ end
380
+
381
+ # Update pinned tags in deps.yaml
382
+ deps_path = File.join(__dir__, 'deps.yaml')
383
+ deps = YAML.load_file(deps_path)
384
+ updates.each { |name, new_tag| deps[name]['tag'] = new_tag }
385
+ File.write(deps_path, YAML.dump(deps))
386
+
387
+ puts "\nPinned tags updated in deps.yaml!".success
388
+ puts 'Run `rake build` to rebuild with the updated sources.'.bold
389
+ end
390
+
391
+
392
+ # SDL ##########################################################################
393
+
394
+ desc 'Download and build SDL libraries'
395
+ task sdl: [:preflight, :'sdl:download', :'sdl:build']
396
+
397
+ namespace :sdl do
398
+
399
+ desc 'Download SDL sources at pinned versions'
400
+ task :download do
401
+ require_cmd! 'git'
402
+
403
+ threads = SDL_NAMES.map do |name|
404
+ Thread.new do
405
+ clone_at_tag(name, DEPS[name]['url'], DEPS[name]['tag'],
406
+ File.join(SOURCES_DIR, name), recurse_submodules: true)
407
+ end
408
+ end
409
+ threads.each(&:join)
410
+ end
411
+
412
+ desc 'Build SDL libraries and copy headers/libs'
413
+ task build: [:download, :clean] do
414
+ require_cmd! 'cmake'
415
+
416
+ SDL_NAMES.each do |lib|
417
+ unless Dir.exist?(File.join(SOURCES_DIR, lib))
418
+ error "Missing #{lib}. Run `rake sdl:download` to download sources."
419
+ exit 1
420
+ end
421
+ end
422
+
423
+ print_task 'Building SDL libraries'
424
+ run_cmd "cmake -S build_support -B #{BUILD_DIR} -DRUBY2D_SOURCES_DIR=#{SOURCES_DIR}"
425
+ run_cmd "cmake --build #{BUILD_DIR} --parallel"
426
+
427
+ lib_dir = File.join(PLATFORM_DIR, 'lib')
428
+ FileUtils.mkdir_p INCLUDE_DIR
429
+ FileUtils.mkdir_p lib_dir
430
+
431
+ # Copy headers and static libraries
432
+ SDL_NAMES.each do |lib|
433
+ sdl3_name = lib.sub('SDL', 'SDL3')
434
+ FileUtils.cp_r File.join(SOURCES_DIR, lib, 'include', sdl3_name), INCLUDE_DIR
435
+ FileUtils.cp File.join(BUILD_DIR, lib, "lib#{sdl3_name}.a"), lib_dir
436
+ end
437
+ end
438
+
439
+ desc 'Test SDL libraries'
440
+ task :test do
441
+ print_task 'Testing SDL libraries'
442
+ sdl_test_bin = File.join(BUILD_DIR, 'sdl_test')
443
+ FileUtils.rm_f sdl_test_bin
444
+ run_cmd "cc -I#{INCLUDE_DIR} build_support/sdl_test.c -L#{File.join(PLATFORM_DIR, 'lib')} #{LIBS} -o #{sdl_test_bin}"
445
+ run_cmd sdl_test_bin
446
+ end
447
+
448
+ desc 'Clean SDL build artifacts'
449
+ task :clean do
450
+ print_task 'Cleaning SDL'
451
+ FileUtils.rm_rf BUILD_DIR
452
+ FileUtils.rm_rf Dir.glob(File.join(INCLUDE_DIR, 'SDL3*'))
453
+ SDL_NAMES.each do |lib|
454
+ FileUtils.rm_f File.join(PLATFORM_DIR, 'lib', "lib#{lib.sub('SDL', 'SDL3')}.a")
455
+ end
456
+ end
457
+ end
458
+
459
+
460
+ # mruby ########################################################################
461
+
462
+ desc 'Download and build mruby'
463
+ task mruby: [:preflight, :'mruby:download', :'mruby:build']
464
+
465
+ namespace :mruby do
466
+
467
+ desc 'Download mruby source at pinned version'
468
+ task :download do
469
+ require_cmd! 'git'
470
+ clone_at_tag('mruby', DEPS['mruby']['url'], DEPS['mruby']['tag'],
471
+ File.join(SOURCES_DIR, 'mruby'))
472
+ end
473
+
474
+ desc 'Build mruby and copy artifacts'
475
+ task build: [:download, :clean] do
476
+ print_task 'Building mruby'
477
+
478
+ mruby_src = File.join(SOURCES_DIR, 'mruby')
479
+ build_config = File.expand_path('build_support/mruby/build_config.rb', __dir__)
480
+
481
+ # Stage the build config into the (writable) build dir and point mruby at the
482
+ # copy, so mruby's `<config>.lock` and other scratch land there rather than
483
+ # beside the shipped config — which sits in a possibly read-only gem when
484
+ # invoked via `ruby2d setup`. The staged copy locates target.rb via
485
+ # RUBY2D_TARGET_RB (see build_support/mruby/build_config.rb).
486
+ staged_config = File.join(BUILD_DIR, 'mruby_build_config.rb')
487
+ FileUtils.mkdir_p BUILD_DIR
488
+ FileUtils.cp build_config, staged_config
489
+ ENV['RUBY2D_TARGET_RB'] = File.expand_path('target.rb', __dir__)
490
+
491
+ Dir.chdir(mruby_src) do
492
+ ENV['MRUBY_CONFIG'] = staged_config
493
+ run_cmd 'rake'
494
+ end
495
+
496
+ FileUtils.rm_f "#{staged_config}.lock"
497
+
498
+ # Copy headers
499
+ print_task 'Copying mruby headers'
500
+ mruby_build_dir = File.join(BUILD_DIR, 'mruby')
501
+ presym_dir = File.join(INCLUDE_DIR, 'mruby', 'presym')
502
+ FileUtils.mkdir_p INCLUDE_DIR
503
+ FileUtils.cp_r File.join(mruby_src, 'include', 'mruby'), INCLUDE_DIR
504
+ FileUtils.cp File.join(mruby_src, 'include', 'mruby.h'), INCLUDE_DIR
505
+ FileUtils.cp File.join(mruby_src, 'include', 'mrbconf.h'), INCLUDE_DIR
506
+ # Add pre-allocated symbol IDs from build
507
+ FileUtils.mkdir_p presym_dir
508
+ FileUtils.cp File.join(mruby_build_dir, 'include', 'mruby', 'presym', 'id.h'), presym_dir
509
+ FileUtils.cp File.join(mruby_build_dir, 'include', 'mruby', 'presym', 'table.h'), presym_dir
510
+
511
+ # Copy static library and compiler
512
+ print_task 'Copying mruby binaries'
513
+ lib_dir = File.join(PLATFORM_DIR, 'lib')
514
+ bin_dir = File.join(PLATFORM_DIR, 'bin')
515
+ FileUtils.mkdir_p lib_dir
516
+ FileUtils.mkdir_p bin_dir
517
+ FileUtils.cp File.join(mruby_build_dir, 'lib', 'libmruby.a'), lib_dir
518
+ mrbc_fname = HOST_OS == 'windows' ? 'mrbc.exe' : 'mrbc'
519
+ FileUtils.cp File.join(mruby_build_dir, 'bin', mrbc_fname), bin_dir
520
+ end
521
+
522
+ desc 'Clean mruby build artifacts'
523
+ task :clean do
524
+ print_task 'Cleaning mruby'
525
+ FileUtils.rm_rf File.join(BUILD_DIR, 'mruby')
526
+ FileUtils.rm_rf Dir.glob(File.join(INCLUDE_DIR, 'mruby*'))
527
+ FileUtils.rm_f File.join(INCLUDE_DIR, 'mrbconf.h')
528
+ FileUtils.rm_f File.join(PLATFORM_DIR, 'lib', 'libmruby.a')
529
+ FileUtils.rm_f File.join(PLATFORM_DIR, 'bin', 'mrbc')
530
+ FileUtils.rm_f File.join(PLATFORM_DIR, 'bin', 'mrbc.exe')
531
+ end
532
+ end
533
+
534
+
535
+ # WASM ##########################################################################
536
+
537
+ desc 'Download and build all WASM libraries (SDL + mruby)'
538
+ task wasm: [:preflight, :'wasm:clean', :'wasm:sdl', :'wasm:mruby']
539
+
540
+ namespace :wasm do
541
+
542
+ desc 'Download and build SDL libraries for WASM'
543
+ task sdl: [:'sdl:download', :'wasm:sdl:build']
544
+
545
+ namespace :sdl do
546
+
547
+ desc 'Build SDL libraries for WASM and copy to platform/wasm/lib/'
548
+ task :build do
549
+ require_cmd! 'cmake'
550
+ require_cmd! 'emcmake', 'Emscripten not found. Install the Emscripten SDK and source emsdk_env.sh'
551
+
552
+ SDL_NAMES.each do |lib|
553
+ unless Dir.exist?(File.join(SOURCES_DIR, lib))
554
+ error "Missing #{lib}. Run `rake sdl:download` to download sources."
555
+ exit 1
556
+ end
557
+ end
558
+
559
+ print_task 'Building SDL libraries for WASM'
560
+ run_cmd "emcmake cmake -S build_support -B #{WASM_BUILD_DIR} -DRUBY2D_SOURCES_DIR=#{SOURCES_DIR}"
561
+ run_cmd "cmake --build #{WASM_BUILD_DIR} --parallel"
562
+
563
+ FileUtils.mkdir_p WASM_LIB_DIR
564
+
565
+ print_task 'Copying WASM SDL libraries'
566
+ SDL_NAMES.each do |lib|
567
+ fname = "lib#{lib.sub('SDL', 'SDL3')}.a"
568
+ FileUtils.cp File.join(WASM_BUILD_DIR, lib, fname), WASM_LIB_DIR
569
+ wrote fname
570
+ end
571
+
572
+ # Copy vendored dependency libraries
573
+ print_task 'Copying WASM vendored libraries'
574
+ vendored_libs = Dir.glob(File.join(WASM_BUILD_DIR, '*/external/**/*.a'))
575
+ vendored_libs.each do |lib|
576
+ dest = File.join(WASM_LIB_DIR, File.basename(lib))
577
+ FileUtils.cp lib, dest
578
+ wrote File.basename(lib)
579
+ end
580
+ end
581
+ end
582
+
583
+ desc 'Download and build mruby for WASM'
584
+ # Note: no :'mruby:build' prereq here. Written inside `namespace :wasm`, that
585
+ # name resolves to wasm:mruby:build (Rake looks in the current scope first),
586
+ # so it never triggered the native build it appears to. The cross build needs
587
+ # a native mrbc; wasm:mruby:build guards for it and tells you to run `rake`.
588
+ task mruby: [:'wasm:mruby:build']
589
+
590
+ namespace :mruby do
591
+ desc 'Build mruby for WASM and copy to platform/wasm/lib/'
592
+ task :build do
593
+ require_cmd! 'emcc', 'Emscripten not found. Install the Emscripten SDK and source emsdk_env.sh'
594
+
595
+ mruby_src = File.join(SOURCES_DIR, 'mruby')
596
+ unless Dir.exist?(mruby_src)
597
+ error 'Missing mruby source. Run `rake mruby:download` to download.'
598
+ exit 1
599
+ end
600
+
601
+ # The cross build compiles Ruby with a *native* mrbc — build_config_wasm.rb
602
+ # points mrbcfile at this path. Bail early with guidance if the native
603
+ # build hasn't produced it yet (keep this in sync with that mrbcfile).
604
+ host_mrbc = File.join(BUILD_DIR, 'mruby', 'bin', 'mrbc')
605
+ unless File.exist?(host_mrbc)
606
+ error "Native mruby compiler not found (#{host_mrbc})."
607
+ puts ' Run `rake mruby:build` first (or just `rake` for a full build).'
608
+ exit 1
609
+ end
610
+
611
+ print_task 'Building mruby for WASM'
612
+
613
+ build_config = File.expand_path('build_support/mruby/build_config_wasm.rb', __dir__)
614
+
615
+ Dir.chdir(mruby_src) do
616
+ ENV['MRUBY_CONFIG'] = build_config
617
+ run_cmd 'rake'
618
+ end
619
+
620
+ FileUtils.rm_f "#{build_config}.lock"
621
+
622
+ FileUtils.mkdir_p WASM_LIB_DIR
623
+
624
+ print_task 'Copying WASM mruby library'
625
+ FileUtils.cp File.join(WASM_BUILD_DIR, 'mruby', 'lib', 'libmruby.a'), WASM_LIB_DIR
626
+ wrote 'libmruby.a'
627
+ end
628
+ end
629
+
630
+ desc 'Clean WASM build artifacts'
631
+ task :clean do
632
+ print_task 'Cleaning WASM'
633
+ FileUtils.rm_rf WASM_BUILD_DIR
634
+ FileUtils.rm_rf Dir.glob(File.join(WASM_LIB_DIR, '*.a'))
635
+ end
636
+
637
+ end