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.
- checksums.yaml +4 -4
- data/LICENSE.md +7 -0
- data/README.md +141 -0
- data/USAGE.md +2435 -0
- data/assets/Rakefile +637 -0
- data/assets/build_support/CMakeLists.txt +94 -0
- data/assets/build_support/mruby/build_config.rb +34 -0
- data/assets/build_support/mruby/build_config_wasm.rb +30 -0
- data/assets/build_support/sdl_test.c +174 -0
- data/assets/deps.yaml +16 -0
- data/assets/platform/include/SDL3/SDL.h +91 -0
- data/assets/platform/include/SDL3/SDL_assert.h +705 -0
- data/assets/platform/include/SDL3/SDL_asyncio.h +550 -0
- data/assets/platform/include/SDL3/SDL_atomic.h +692 -0
- data/assets/platform/include/SDL3/SDL_audio.h +2370 -0
- data/assets/platform/include/SDL3/SDL_begin_code.h +553 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_bits.h +47 -27
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_blendmode.h +59 -55
- data/assets/platform/include/SDL3/SDL_camera.h +535 -0
- data/assets/platform/include/SDL3/SDL_clipboard.h +331 -0
- data/assets/{include/SDL2/close_code.h → platform/include/SDL3/SDL_close_code.h} +9 -8
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_copying.h +3 -1
- data/assets/platform/include/SDL3/SDL_cpuinfo.h +374 -0
- data/assets/platform/include/SDL3/SDL_dialog.h +343 -0
- data/assets/platform/include/SDL3/SDL_dlopennote.h +234 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_egl.h +11 -8
- data/assets/platform/include/SDL3/SDL_endian.h +645 -0
- data/assets/platform/include/SDL3/SDL_error.h +226 -0
- data/assets/platform/include/SDL3/SDL_events.h +1645 -0
- data/assets/platform/include/SDL3/SDL_filesystem.h +537 -0
- data/assets/platform/include/SDL3/SDL_gamepad.h +1656 -0
- data/assets/platform/include/SDL3/SDL_gpu.h +4608 -0
- data/assets/platform/include/SDL3/SDL_guid.h +106 -0
- data/assets/platform/include/SDL3/SDL_haptic.h +1461 -0
- data/assets/platform/include/SDL3/SDL_hidapi.h +571 -0
- data/assets/platform/include/SDL3/SDL_hints.h +5001 -0
- data/assets/platform/include/SDL3/SDL_init.h +507 -0
- data/assets/platform/include/SDL3/SDL_intrin.h +410 -0
- data/assets/platform/include/SDL3/SDL_iostream.h +1379 -0
- data/assets/platform/include/SDL3/SDL_joystick.h +1385 -0
- data/assets/platform/include/SDL3/SDL_keyboard.h +608 -0
- data/assets/platform/include/SDL3/SDL_keycode.h +347 -0
- data/assets/platform/include/SDL3/SDL_loadso.h +145 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_locale.h +40 -24
- data/assets/platform/include/SDL3/SDL_log.h +541 -0
- data/assets/platform/include/SDL3/SDL_main.h +704 -0
- data/assets/platform/include/SDL3/SDL_main_impl.h +151 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_messagebox.h +85 -48
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_metal.h +29 -29
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_misc.h +13 -12
- data/assets/platform/include/SDL3/SDL_mouse.h +813 -0
- data/assets/platform/include/SDL3/SDL_mutex.h +1117 -0
- data/assets/platform/include/SDL3/SDL_oldnames.h +1339 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl.h +1247 -278
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl_glext.h +5 -1
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles.h +6 -7
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2.h +10 -11
- data/assets/platform/include/SDL3/SDL_pen.h +198 -0
- data/assets/platform/include/SDL3/SDL_pixels.h +1441 -0
- data/assets/{include/SDL2/SDL_test_log.h → platform/include/SDL3/SDL_platform.h} +25 -26
- data/assets/platform/include/SDL3/SDL_platform_defines.h +497 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_power.h +40 -20
- data/assets/platform/include/SDL3/SDL_process.h +441 -0
- data/assets/platform/include/SDL3/SDL_properties.h +572 -0
- data/assets/platform/include/SDL3/SDL_rect.h +528 -0
- data/assets/platform/include/SDL3/SDL_render.h +3028 -0
- data/assets/platform/include/SDL3/SDL_revision.h +59 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_scancode.h +59 -68
- data/assets/platform/include/SDL3/SDL_sensor.h +321 -0
- data/assets/platform/include/SDL3/SDL_stdinc.h +6186 -0
- data/assets/platform/include/SDL3/SDL_storage.h +686 -0
- data/assets/platform/include/SDL3/SDL_surface.h +1769 -0
- data/assets/platform/include/SDL3/SDL_system.h +840 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test.h +16 -22
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_assert.h +27 -34
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_common.h +109 -52
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_compare.h +22 -14
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_crc32.h +27 -30
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_font.h +50 -49
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_fuzzer.h +64 -79
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_harness.h +47 -30
- data/assets/platform/include/SDL3/SDL_test_log.h +83 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_md5.h +21 -28
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_memory.h +19 -16
- data/assets/platform/include/SDL3/SDL_thread.h +602 -0
- data/assets/platform/include/SDL3/SDL_time.h +249 -0
- data/assets/platform/include/SDL3/SDL_timer.h +454 -0
- data/assets/platform/include/SDL3/SDL_touch.h +184 -0
- data/assets/platform/include/SDL3/SDL_tray.h +544 -0
- data/assets/platform/include/SDL3/SDL_version.h +198 -0
- data/assets/platform/include/SDL3/SDL_video.h +3497 -0
- data/assets/platform/include/SDL3/SDL_vulkan.h +287 -0
- data/assets/platform/include/SDL3_image/SDL_image.h +3328 -0
- data/assets/platform/include/SDL3_mixer/SDL_mixer.h +3369 -0
- data/assets/platform/include/SDL3_ttf/SDL_textengine.h +181 -0
- data/assets/platform/include/SDL3_ttf/SDL_ttf.h +2833 -0
- data/assets/{include → platform/include}/mrbconf.h +42 -31
- data/assets/{include → platform/include}/mruby/array.h +3 -4
- data/assets/{include → platform/include}/mruby/boxing_nan.h +10 -0
- data/assets/platform/include/mruby/boxing_no.h +59 -0
- data/assets/{include → platform/include}/mruby/boxing_word.h +72 -26
- data/assets/platform/include/mruby/class.h +157 -0
- data/assets/{include → platform/include}/mruby/common.h +30 -1
- data/assets/{include → platform/include}/mruby/compile.h +52 -74
- data/assets/{include → platform/include}/mruby/data.h +2 -2
- data/assets/{include → platform/include}/mruby/debug.h +12 -5
- data/assets/{include → platform/include}/mruby/dump.h +7 -9
- data/assets/{include → platform/include}/mruby/endian.h +1 -1
- data/assets/platform/include/mruby/error.h +173 -0
- data/assets/platform/include/mruby/gc.h +79 -0
- data/assets/{include → platform/include}/mruby/hash.h +1 -7
- data/assets/platform/include/mruby/internal.h +282 -0
- data/assets/platform/include/mruby/irep.h +143 -0
- data/assets/{include → platform/include}/mruby/istruct.h +1 -1
- data/assets/platform/include/mruby/khash.h +455 -0
- data/assets/platform/include/mruby/mempool.h +19 -0
- data/assets/{include → platform/include}/mruby/numeric.h +7 -10
- data/assets/platform/include/mruby/object.h +51 -0
- data/assets/{include → platform/include}/mruby/opcode.h +5 -5
- data/assets/{include → platform/include}/mruby/ops.h +19 -6
- data/assets/platform/include/mruby/presym/id.h +1447 -0
- data/assets/{include → platform/include}/mruby/presym/scanning.h +10 -7
- data/assets/platform/include/mruby/presym/table.h +2893 -0
- data/assets/platform/include/mruby/presym.h +65 -0
- data/assets/platform/include/mruby/proc.h +184 -0
- data/assets/{include → platform/include}/mruby/range.h +0 -2
- data/assets/{include → platform/include}/mruby/string.h +33 -53
- data/assets/platform/include/mruby/throw.h +81 -0
- data/assets/{include → platform/include}/mruby/value.h +64 -29
- data/assets/{include → platform/include}/mruby/variable.h +6 -23
- data/assets/{include → platform/include}/mruby/version.h +7 -7
- data/assets/{include → platform/include}/mruby.h +238 -116
- data/assets/platform/macos-arm64/bin/mrbc +0 -0
- data/assets/platform/macos-arm64/lib/libSDL3.a +0 -0
- data/assets/platform/macos-arm64/lib/libSDL3_image.a +0 -0
- data/assets/platform/macos-arm64/lib/libSDL3_mixer.a +0 -0
- data/assets/platform/macos-arm64/lib/libSDL3_ttf.a +0 -0
- data/assets/platform/macos-arm64/lib/libmruby.a +0 -0
- data/assets/platform/wasm/lib/libFLAC.a +0 -0
- data/assets/platform/wasm/lib/libSDL3.a +0 -0
- data/assets/platform/wasm/lib/libSDL3_image.a +0 -0
- data/assets/platform/wasm/lib/libSDL3_mixer.a +0 -0
- data/assets/platform/wasm/lib/libSDL3_ttf.a +0 -0
- data/assets/platform/wasm/lib/libfreetype.a +0 -0
- data/assets/platform/wasm/lib/libharfbuzz.a +0 -0
- data/assets/platform/wasm/lib/libmruby.a +0 -0
- data/assets/platform/wasm/lib/libogg.a +0 -0
- data/assets/platform/wasm/lib/libplutosvg.a +0 -0
- data/assets/platform/wasm/lib/libplutovg.a +0 -0
- data/assets/platform/wasm/lib/libpng.a +0 -0
- data/assets/platform/wasm/lib/libpng16.a +0 -0
- data/assets/platform/wasm/lib/libvorbis.a +0 -0
- data/assets/platform/wasm/lib/libvorbisfile.a +0 -0
- data/assets/platform/wasm/lib/libzlibstatic.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/bin/mrbc.exe +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_image.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libmruby.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/bin/mrbc.exe +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_image.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libmruby.a +0 -0
- data/assets/resources/fonts/outfit/OFL.txt +93 -0
- data/assets/resources/fonts/outfit/outfit.ttf +0 -0
- data/assets/resources/fonts/roboto_mono/OFL.txt +91 -0
- data/assets/resources/fonts/roboto_mono/roboto_mono.ttf +0 -0
- data/assets/resources/icons/icon.icns +0 -0
- data/assets/resources/icons/icon.png +0 -0
- data/assets/resources/spritesheets/License.txt +28 -0
- data/assets/resources/spritesheets/spritesheet-backgrounds.png +0 -0
- data/assets/resources/spritesheets/spritesheet-backgrounds.xml +16 -0
- data/assets/resources/spritesheets/spritesheet-characters.png +0 -0
- data/assets/resources/spritesheets/spritesheet-characters.xml +47 -0
- data/assets/resources/spritesheets/spritesheet-enemies.png +0 -0
- data/assets/resources/spritesheets/spritesheet-enemies.xml +62 -0
- data/assets/resources/spritesheets/spritesheet-tiles.png +0 -0
- data/assets/resources/spritesheets/spritesheet-tiles.xml +316 -0
- data/assets/{wasm → resources/web}/template.html +1 -1
- data/assets/target.rb +131 -0
- data/bin/ruby2d +281 -82
- data/examples/astar.rb +269 -0
- data/examples/asteroids.rb +403 -0
- data/examples/bezier_editor.rb +96 -0
- data/examples/boids.rb +191 -0
- data/examples/bouncing_balls.rb +119 -0
- data/examples/breakout.rb +186 -0
- data/examples/constellations.rb +100 -0
- data/examples/dashboard.rb +133 -0
- data/examples/double_pendulum.rb +254 -0
- data/examples/falling_sand.rb +291 -0
- data/examples/fireworks.rb +110 -0
- data/examples/fluid_dynamics.rb +340 -0
- data/examples/fourier_epicycles.rb +142 -0
- data/examples/fractal_tree.rb +326 -0
- data/examples/game_of_life.rb +148 -0
- data/examples/gamepads.rb +333 -0
- data/examples/hill_driver.rb +613 -0
- data/examples/logo_animation.rb +251 -0
- data/examples/lorenz_attractor.rb +115 -0
- data/examples/mandelbrot.rb +207 -0
- data/examples/marching_squares.rb +200 -0
- data/examples/maze.rb +323 -0
- data/examples/nbody.rb +338 -0
- data/examples/outrun.rb +391 -0
- data/examples/pixel_paint.rb +313 -0
- data/examples/platformer.rb +335 -0
- data/examples/ray_casting_maze.rb +175 -0
- data/examples/shadow_casting.rb +151 -0
- data/examples/shape_recognizer.rb +908 -0
- data/examples/snake.rb +144 -0
- data/examples/sprite_sheets.rb +246 -0
- data/examples/swarm.rb +206 -0
- data/examples/tsp_annealing.rb +104 -0
- data/examples/ui_controls.rb +163 -0
- data/examples/wireframe_3d.rb +139 -0
- data/ext/ruby2d/audio.c +324 -0
- data/ext/ruby2d/canvas.c +1715 -494
- data/ext/ruby2d/ext.c +541 -0
- data/ext/ruby2d/extconf.rb +122 -145
- data/ext/ruby2d/font.c +566 -20
- data/ext/ruby2d/fps.c +92 -0
- data/ext/ruby2d/image.c +466 -41
- data/ext/ruby2d/ruby2d.c +374 -1890
- data/ext/ruby2d/ruby2d.h +840 -460
- data/ext/ruby2d/shapes.c +931 -101
- data/ext/ruby2d/text.c +586 -21
- data/ext/ruby2d/window.c +1693 -283
- data/lib/ruby2d/atlas_parser.rb +194 -0
- data/lib/ruby2d/audio.rb +73 -0
- data/lib/ruby2d/benchmark.rb +259 -0
- data/lib/ruby2d/bitmap_text.rb +155 -0
- data/lib/ruby2d/button.rb +402 -0
- data/lib/ruby2d/canvas.rb +703 -279
- data/lib/ruby2d/circle.rb +206 -29
- data/lib/ruby2d/cli/browser.rb +314 -0
- data/lib/ruby2d/cli/build.rb +471 -257
- data/lib/ruby2d/cli/colorize.rb +7 -5
- data/lib/ruby2d/cli/examples.rb +127 -0
- data/lib/ruby2d/cli/launch.rb +24 -39
- data/lib/ruby2d/cli/lib_files.rb +48 -0
- data/lib/ruby2d/cli/messages.rb +40 -0
- data/lib/ruby2d/cli/setup.rb +273 -0
- data/lib/ruby2d/cli/static_server.rb +160 -0
- data/lib/ruby2d/cli/usage.rb +255 -0
- data/lib/ruby2d/color.rb +191 -69
- data/lib/ruby2d/core.rb +37 -19
- data/lib/ruby2d/deps_help.rb +89 -0
- data/lib/ruby2d/dsl.rb +51 -12
- data/lib/ruby2d/ellipse.rb +228 -0
- data/lib/ruby2d/exceptions.rb +0 -2
- data/lib/ruby2d/font.rb +34 -74
- data/lib/ruby2d/gamepad.rb +323 -0
- data/lib/ruby2d/gem_paths.rb +19 -0
- data/lib/ruby2d/image.rb +155 -52
- data/lib/ruby2d/interactive.rb +103 -0
- data/lib/ruby2d/json_parser.rb +268 -0
- data/lib/ruby2d/line.rb +194 -85
- data/lib/ruby2d/mruby_compat.rb +12 -0
- data/lib/ruby2d/polygon.rb +297 -0
- data/lib/ruby2d/polyline.rb +368 -0
- data/lib/ruby2d/quad.rb +358 -94
- data/lib/ruby2d/rectangle.rb +77 -19
- data/lib/ruby2d/renderable.rb +411 -11
- data/lib/ruby2d/sprite.rb +471 -180
- data/lib/ruby2d/sprite_sheet.rb +64 -0
- data/lib/ruby2d/square.rb +29 -17
- data/lib/ruby2d/text.rb +196 -65
- data/lib/ruby2d/tileset.rb +139 -81
- data/lib/ruby2d/triangle.rb +324 -89
- data/lib/ruby2d/version.rb +1 -3
- data/lib/ruby2d/vertices.rb +62 -85
- data/lib/ruby2d/warnings.rb +29 -0
- data/lib/ruby2d/window/class_methods.rb +218 -0
- data/lib/ruby2d/window/gamepad_events.rb +141 -0
- data/lib/ruby2d/window/key_events.rb +74 -0
- data/lib/ruby2d/window/mouse_events.rb +171 -0
- data/lib/ruby2d/window/object_events.rb +168 -0
- data/lib/ruby2d/window.rb +632 -585
- data/lib/ruby2d.rb +14 -19
- metadata +275 -428
- data/assets/app.icns +0 -0
- data/assets/include/GLES2/gl2.h +0 -656
- data/assets/include/GLES2/gl2ext.h +0 -3949
- data/assets/include/GLES2/gl2ext_angle.h +0 -701
- data/assets/include/GLES2/gl2platform.h +0 -27
- data/assets/include/GLES3/gl3.h +0 -1192
- data/assets/include/GLES3/gl31.h +0 -1507
- data/assets/include/GLES3/gl32.h +0 -1808
- data/assets/include/GLES3/gl3platform.h +0 -27
- data/assets/include/KHR/khrplatform.h +0 -290
- data/assets/include/SDL2/SDL.h +0 -233
- data/assets/include/SDL2/SDL_assert.h +0 -326
- data/assets/include/SDL2/SDL_atomic.h +0 -415
- data/assets/include/SDL2/SDL_audio.h +0 -1500
- data/assets/include/SDL2/SDL_clipboard.h +0 -141
- data/assets/include/SDL2/SDL_config.h +0 -61
- data/assets/include/SDL2/SDL_config_android.h +0 -194
- data/assets/include/SDL2/SDL_config_emscripten.h +0 -218
- data/assets/include/SDL2/SDL_config_iphoneos.h +0 -217
- data/assets/include/SDL2/SDL_config_macosx.h +0 -277
- data/assets/include/SDL2/SDL_config_minimal.h +0 -95
- data/assets/include/SDL2/SDL_config_ngage.h +0 -89
- data/assets/include/SDL2/SDL_config_os2.h +0 -207
- data/assets/include/SDL2/SDL_config_pandora.h +0 -141
- data/assets/include/SDL2/SDL_config_windows.h +0 -331
- data/assets/include/SDL2/SDL_config_wingdk.h +0 -253
- data/assets/include/SDL2/SDL_config_winrt.h +0 -220
- data/assets/include/SDL2/SDL_config_xbox.h +0 -235
- data/assets/include/SDL2/SDL_cpuinfo.h +0 -594
- data/assets/include/SDL2/SDL_endian.h +0 -348
- data/assets/include/SDL2/SDL_error.h +0 -163
- data/assets/include/SDL2/SDL_events.h +0 -1166
- data/assets/include/SDL2/SDL_filesystem.h +0 -149
- data/assets/include/SDL2/SDL_gamecontroller.h +0 -1074
- data/assets/include/SDL2/SDL_gesture.h +0 -117
- data/assets/include/SDL2/SDL_guid.h +0 -100
- data/assets/include/SDL2/SDL_haptic.h +0 -1341
- data/assets/include/SDL2/SDL_hidapi.h +0 -451
- data/assets/include/SDL2/SDL_hints.h +0 -2569
- data/assets/include/SDL2/SDL_image.h +0 -2173
- data/assets/include/SDL2/SDL_joystick.h +0 -1066
- data/assets/include/SDL2/SDL_keyboard.h +0 -353
- data/assets/include/SDL2/SDL_keycode.h +0 -358
- data/assets/include/SDL2/SDL_loadso.h +0 -115
- data/assets/include/SDL2/SDL_log.h +0 -404
- data/assets/include/SDL2/SDL_main.h +0 -275
- data/assets/include/SDL2/SDL_mixer.h +0 -2784
- data/assets/include/SDL2/SDL_mouse.h +0 -465
- data/assets/include/SDL2/SDL_mutex.h +0 -471
- data/assets/include/SDL2/SDL_name.h +0 -33
- data/assets/include/SDL2/SDL_pixels.h +0 -644
- data/assets/include/SDL2/SDL_platform.h +0 -261
- data/assets/include/SDL2/SDL_quit.h +0 -58
- data/assets/include/SDL2/SDL_rect.h +0 -376
- data/assets/include/SDL2/SDL_render.h +0 -1919
- data/assets/include/SDL2/SDL_revision.h +0 -6
- data/assets/include/SDL2/SDL_rwops.h +0 -841
- data/assets/include/SDL2/SDL_sensor.h +0 -322
- data/assets/include/SDL2/SDL_shape.h +0 -155
- data/assets/include/SDL2/SDL_stdinc.h +0 -830
- data/assets/include/SDL2/SDL_surface.h +0 -997
- data/assets/include/SDL2/SDL_system.h +0 -623
- data/assets/include/SDL2/SDL_syswm.h +0 -386
- data/assets/include/SDL2/SDL_test_images.h +0 -78
- data/assets/include/SDL2/SDL_test_random.h +0 -115
- data/assets/include/SDL2/SDL_thread.h +0 -464
- data/assets/include/SDL2/SDL_timer.h +0 -222
- data/assets/include/SDL2/SDL_touch.h +0 -150
- data/assets/include/SDL2/SDL_ttf.h +0 -2316
- data/assets/include/SDL2/SDL_types.h +0 -29
- data/assets/include/SDL2/SDL_version.h +0 -204
- data/assets/include/SDL2/SDL_video.h +0 -2150
- data/assets/include/SDL2/SDL_vulkan.h +0 -215
- data/assets/include/SDL2/begin_code.h +0 -187
- data/assets/include/mruby/boxing_no.h +0 -58
- data/assets/include/mruby/class.h +0 -108
- data/assets/include/mruby/error.h +0 -147
- data/assets/include/mruby/gc.h +0 -94
- data/assets/include/mruby/irep.h +0 -147
- data/assets/include/mruby/khash.h +0 -284
- data/assets/include/mruby/object.h +0 -43
- data/assets/include/mruby/presym/disable.h +0 -70
- data/assets/include/mruby/presym/enable.h +0 -37
- data/assets/include/mruby/presym.h +0 -40
- data/assets/include/mruby/proc.h +0 -211
- data/assets/include/mruby/throw.h +0 -66
- data/assets/macos/universal/bin/mrbc +0 -0
- data/assets/macos/universal/lib/libFLAC.a +0 -0
- data/assets/macos/universal/lib/libSDL2.a +0 -0
- data/assets/macos/universal/lib/libSDL2_image.a +0 -0
- data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
- data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
- data/assets/macos/universal/lib/libavif.a +0 -0
- data/assets/macos/universal/lib/libbrotlicommon-static.a +0 -0
- data/assets/macos/universal/lib/libbrotlidec-static.a +0 -0
- data/assets/macos/universal/lib/libfreetype.a +0 -0
- data/assets/macos/universal/lib/libgraphite2.a +0 -0
- data/assets/macos/universal/lib/libharfbuzz.a +0 -0
- data/assets/macos/universal/lib/libhwy.a +0 -0
- data/assets/macos/universal/lib/libjpeg.a +0 -0
- data/assets/macos/universal/lib/libjxl.a +0 -0
- data/assets/macos/universal/lib/libmodplug.a +0 -0
- data/assets/macos/universal/lib/libmpg123.a +0 -0
- data/assets/macos/universal/lib/libmruby.a +0 -0
- data/assets/macos/universal/lib/libogg.a +0 -0
- data/assets/macos/universal/lib/libpng.a +0 -0
- data/assets/macos/universal/lib/libtiff.a +0 -0
- data/assets/macos/universal/lib/libvorbis.a +0 -0
- data/assets/macos/universal/lib/libvorbisfile.a +0 -0
- data/assets/macos/universal/lib/libwebp.a +0 -0
- data/assets/macos/universal/lib/libzstd.a +0 -0
- data/assets/test_media/README.md +0 -3
- data/assets/test_media/bitstream_vera/COPYRIGHT.txt +0 -124
- data/assets/test_media/bitstream_vera/vera.ttf +0 -0
- data/assets/test_media/boom.png +0 -0
- data/assets/test_media/coin.png +0 -0
- data/assets/test_media/colors.png +0 -0
- data/assets/test_media/controller.png +0 -0
- data/assets/test_media/dial.wav +0 -0
- data/assets/test_media/hero.png +0 -0
- data/assets/test_media/image.bmp +0 -0
- data/assets/test_media/image.jpg +0 -0
- data/assets/test_media/image.png +0 -0
- data/assets/test_media/music.flac +0 -0
- data/assets/test_media/music.mp3 +0 -0
- data/assets/test_media/music.ogg +0 -0
- data/assets/test_media/music.wav +0 -0
- data/assets/test_media/originals/boom.pxm +0 -0
- data/assets/test_media/originals/coin.pxm +0 -0
- data/assets/test_media/originals/controller.sketch +0 -0
- data/assets/test_media/originals/hero.pxm +0 -0
- data/assets/test_media/originals/image.pxm +0 -0
- data/assets/test_media/originals/music.caf +0 -0
- data/assets/test_media/originals/texture_atlas.pxm +0 -0
- data/assets/test_media/rondo_alla_turka.ogg +0 -0
- data/assets/test_media/sound.flac +0 -0
- data/assets/test_media/sound.mp3 +0 -0
- data/assets/test_media/sound.ogg +0 -0
- data/assets/test_media/sound.wav +0 -0
- data/assets/test_media/sprite_sheet.png +0 -0
- data/assets/test_media/texture_atlas.png +0 -0
- data/assets/wasm/libmruby.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/bin/mrbc.exe +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libLerc.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_image.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_ttf.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlicommon.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlidec.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbz2.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libdeflate.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libfreetype.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libgraphite2.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libharfbuzz.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libhwy.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjbig.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjpeg.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjxl.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/liblzma.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmruby.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libpng.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +0 -1
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libtiff.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libwebp.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
- data/assets/windows/mingw-w64-x86_64/bin/mrbc.exe +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libLerc.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libSDL2_image.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libSDL2_ttf.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libbrotlicommon.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libbrotlidec.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libbz2.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libdeflate.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libfreetype.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libgraphite2.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libharfbuzz.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libhwy.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libjbig.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libjpeg.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libjxl.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/liblzma.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libmodplug.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libogg.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libopusfile.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libpng.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libssp.a +0 -1
- data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libtiff.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libvorbis.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libvorbisfile.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libwebp.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
- data/assets/xcode/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
- data/assets/xcode/ios/Assets.xcassets/Contents.json +0 -6
- data/assets/xcode/ios/Base.lproj/LaunchScreen.storyboard +0 -27
- data/assets/xcode/ios/Info.plist +0 -43
- data/assets/xcode/ios/MRuby.framework/Headers/mrbconf.h +0 -143
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/array.h +0 -280
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/class.h +0 -97
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/common.h +0 -77
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/compile.h +0 -195
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/data.h +0 -75
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/debug.h +0 -67
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/dump.h +0 -196
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/error.h +0 -75
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/gc.h +0 -91
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/hash.h +0 -215
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/irep.h +0 -75
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/istruct.h +0 -47
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/khash.h +0 -274
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/numeric.h +0 -161
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/object.h +0 -44
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/opcode.h +0 -69
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/ops.h +0 -117
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/proc.h +0 -131
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/range.h +0 -49
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/re.h +0 -16
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/string.h +0 -444
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/throw.h +0 -55
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/value.h +0 -309
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/variable.h +0 -136
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/version.h +0 -110
- data/assets/xcode/ios/MRuby.framework/Headers/mruby.h +0 -1282
- data/assets/xcode/ios/MRuby.framework/Info.plist +0 -20
- data/assets/xcode/ios/MRuby.framework/MRuby +0 -0
- data/assets/xcode/ios/MyApp.xcodeproj/project.pbxproj +0 -368
- data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
- data/assets/xcode/ios/main.c +0 -1
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +0 -17
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +0 -17
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +0 -32
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +0 -22
- data/assets/xcode/tvos/Info.plist +0 -30
- data/assets/xcode/tvos/MRuby.framework/Headers/mrbconf.h +0 -143
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/array.h +0 -280
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/class.h +0 -97
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/common.h +0 -77
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/compile.h +0 -195
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/data.h +0 -75
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/debug.h +0 -67
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/dump.h +0 -196
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/error.h +0 -75
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/gc.h +0 -91
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/hash.h +0 -215
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/irep.h +0 -75
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/istruct.h +0 -47
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/khash.h +0 -274
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/numeric.h +0 -161
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/object.h +0 -44
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/opcode.h +0 -69
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/ops.h +0 -117
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/proc.h +0 -131
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/range.h +0 -49
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/re.h +0 -16
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/string.h +0 -444
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/throw.h +0 -55
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/value.h +0 -309
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/variable.h +0 -136
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/version.h +0 -110
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby.h +0 -1282
- data/assets/xcode/tvos/MRuby.framework/Info.plist +0 -20
- data/assets/xcode/tvos/MRuby.framework/MRuby +0 -0
- data/assets/xcode/tvos/MyApp.xcodeproj/project.pbxproj +0 -350
- data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
- data/assets/xcode/tvos/main.c +0 -1
- data/ext/ruby2d/common.c +0 -185
- data/ext/ruby2d/controllers.c +0 -110
- data/ext/ruby2d/gl.c +0 -398
- data/ext/ruby2d/gl2.c +0 -86
- data/ext/ruby2d/gl3.c +0 -304
- data/ext/ruby2d/gles.c +0 -302
- data/ext/ruby2d/input.c +0 -48
- data/ext/ruby2d/music.c +0 -127
- data/ext/ruby2d/sound.c +0 -132
- data/lib/ruby2d/cli/console.rb +0 -65
- data/lib/ruby2d/cli/enable_console.rb +0 -7
- data/lib/ruby2d/cli/platform.rb +0 -17
- data/lib/ruby2d/music.rb +0 -77
- data/lib/ruby2d/pixel.rb +0 -18
- data/lib/ruby2d/pixmap.rb +0 -39
- data/lib/ruby2d/pixmap_atlas.rb +0 -56
- data/lib/ruby2d/sound.rb +0 -61
- data/lib/ruby2d/texture.rb +0 -38
- /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2.h +0 -0
- /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2ext.h +0 -0
- /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2platform.h +0 -0
- /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_khrplatform.h +0 -0
- /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
|