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/lib/ruby2d/cli/build.rb
CHANGED
|
@@ -1,57 +1,176 @@
|
|
|
1
1
|
# Build a compiled Ruby 2D app with mruby
|
|
2
2
|
|
|
3
3
|
require 'ruby2d'
|
|
4
|
+
require 'ruby2d/version'
|
|
4
5
|
require 'fileutils'
|
|
6
|
+
require 'shellwords'
|
|
5
7
|
require 'ruby2d/cli/colorize'
|
|
6
|
-
require 'ruby2d/cli/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
'renderable',
|
|
14
|
-
'color',
|
|
15
|
-
'window',
|
|
16
|
-
'dsl',
|
|
17
|
-
'quad',
|
|
18
|
-
'line',
|
|
19
|
-
'circle',
|
|
20
|
-
'rectangle',
|
|
21
|
-
'square',
|
|
22
|
-
'triangle',
|
|
23
|
-
'pixel',
|
|
24
|
-
'pixmap',
|
|
25
|
-
'pixmap_atlas',
|
|
26
|
-
'image',
|
|
27
|
-
'sprite',
|
|
28
|
-
'tileset',
|
|
29
|
-
'font',
|
|
30
|
-
'text',
|
|
31
|
-
'canvas',
|
|
32
|
-
'sound',
|
|
33
|
-
'music',
|
|
34
|
-
'texture',
|
|
35
|
-
'vertices',
|
|
36
|
-
'../ruby2d'
|
|
37
|
-
]
|
|
8
|
+
require 'ruby2d/cli/messages'
|
|
9
|
+
require 'ruby2d/cli/lib_files'
|
|
10
|
+
require_relative '../../../assets/target'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# The Ruby 2D library files (shared with the WASM/Try build — see cli/lib_files)
|
|
14
|
+
@ruby2d_lib_files = Ruby2D::CLI::LIB_FILES
|
|
38
15
|
|
|
39
16
|
|
|
40
17
|
# Helpers ######################################################################
|
|
41
18
|
|
|
19
|
+
# Shell-escape a path for safe interpolation into a command string, so a gem or
|
|
20
|
+
# asset install location containing spaces (or other shell metacharacters)
|
|
21
|
+
# doesn't break the cc/emcc/mrbc invocations. A no-op for ordinary paths.
|
|
22
|
+
def shell_escape(path)
|
|
23
|
+
Shellwords.escape(path.to_s)
|
|
24
|
+
end
|
|
25
|
+
|
|
42
26
|
def run_cmd(cmd)
|
|
43
|
-
|
|
27
|
+
cmd_echo(cmd) if @debug
|
|
44
28
|
system cmd
|
|
45
29
|
end
|
|
46
30
|
|
|
31
|
+
# Echo a command under `--debug`, abbreviating the gem dir to keep it readable.
|
|
32
|
+
# Substitutes both the escaped and plain gem dir so it works whether or not the
|
|
33
|
+
# path needed shell-escaping.
|
|
34
|
+
def cmd_echo(cmd)
|
|
35
|
+
display_cmd = cmd.gsub(shell_escape(Ruby2D.gem_dir), '$RUBY2D').gsub(Ruby2D.gem_dir, '$RUBY2D')
|
|
36
|
+
puts " #{"$ #{display_cmd}".dim}\n\n"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# Print a build-step banner — a ruby-red diamond and a bold title — to match
|
|
41
|
+
# the `ruby2d` CLI and `rake` output. Artifact paths are listed beneath it.
|
|
42
|
+
def step(title)
|
|
43
|
+
puts "\n #{'◆'.ruby2d_red} #{title.bold}"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# List a file or bundle the build produced, beneath its step banner. The dim
|
|
48
|
+
# `wrote` label marks it as an output without competing with the path itself.
|
|
49
|
+
def wrote(path)
|
|
50
|
+
puts " #{'wrote'.dim} #{path}"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# A friendly label for the host platform the native build targets (e.g.
|
|
55
|
+
# "macOS (arm64)"). `ruby2d build` doesn't cross-compile — the executable is for
|
|
56
|
+
# this machine only — so naming it avoids the "is this a universal binary?" doubt.
|
|
57
|
+
def native_target
|
|
58
|
+
os = { 'macos' => 'macOS', 'windows' => 'Windows',
|
|
59
|
+
'linux' => 'Linux', 'bsd' => 'BSD' }.fetch(AssetsTarget.host_os, AssetsTarget.host_os)
|
|
60
|
+
"#{os} (#{AssetsTarget.host_arch})"
|
|
61
|
+
end
|
|
62
|
+
|
|
47
63
|
|
|
48
|
-
#
|
|
64
|
+
# Neutralize `require 'ruby2d'` / `require 'ruby2d/core'` lines — the bundled
|
|
65
|
+
# build already provides Ruby2D. Blank each one out rather than deleting it, so
|
|
66
|
+
# every following line keeps its original number and an `mrbc` compile error
|
|
67
|
+
# still points at the right line in the user's source.
|
|
49
68
|
def strip_require(file)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
69
|
+
File.foreach(file).map do |line|
|
|
70
|
+
line.match?(/require ('|")ruby2d(\/core)?('|")/) ? "\n" : line
|
|
71
|
+
end.join
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
# Collect the asset directories declared inline with `# ruby2d:assets <dir>`
|
|
76
|
+
# directives in the app source — the flag-free equivalent of `--assets`, so an
|
|
77
|
+
# app can carry its own bundling instructions instead of relying on the caller
|
|
78
|
+
# to remember the flag. One directory per directive; repeat the line for
|
|
79
|
+
# several. Paths are relative to the build's working directory, matching
|
|
80
|
+
# `--assets`. Returns the directories in source order.
|
|
81
|
+
def asset_directives(file)
|
|
82
|
+
File.foreach(file).filter_map do |line|
|
|
83
|
+
m = line.match(/\A\s*#\s*ruby2d:assets\s+(\S.*?)\s*\z/)
|
|
84
|
+
m && m[1]
|
|
53
85
|
end
|
|
54
|
-
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
# Locate an executable on PATH. Portable replacement for `which`, which is
|
|
90
|
+
# Unix-only (Windows cmd.exe has no `which`); tries Windows executable
|
|
91
|
+
# extensions when running there.
|
|
92
|
+
def find_executable(name)
|
|
93
|
+
exts = AssetsTarget.host_os == 'windows' ? ['.exe', '.bat', '.cmd', ''] : ['']
|
|
94
|
+
|
|
95
|
+
# An explicit path (e.g. `CC=/usr/bin/clang`) is used as-is, not searched on
|
|
96
|
+
# PATH — `File.join(dir, '/usr/bin/clang')` would collapse to a bogus path.
|
|
97
|
+
if name.include?(File::SEPARATOR) || (File::ALT_SEPARATOR && name.include?(File::ALT_SEPARATOR))
|
|
98
|
+
exts.each do |ext|
|
|
99
|
+
candidate = "#{name}#{ext}"
|
|
100
|
+
return candidate if File.file?(candidate) && File.executable?(candidate)
|
|
101
|
+
end
|
|
102
|
+
return nil
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
ENV.fetch('PATH', '').split(File::PATH_SEPARATOR).each do |dir|
|
|
106
|
+
next if dir.empty?
|
|
107
|
+
exts.each do |ext|
|
|
108
|
+
candidate = File.join(dir, "#{name}#{ext}")
|
|
109
|
+
return candidate if File.file?(candidate) && File.executable?(candidate)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
nil
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# Ruby 2D's static libraries (SDL3 + mruby) live in one of two places for the
|
|
117
|
+
# current target: bundled inside the gem (the RELEASE_PLATFORMS), or built by
|
|
118
|
+
# `ruby2d setup` into the per-user cache (every other platform). These helpers
|
|
119
|
+
# resolve which — the compile steps and find_mrbc share them.
|
|
120
|
+
|
|
121
|
+
# The bundled platform dir inside the gem — populated for RELEASE_PLATFORMS.
|
|
122
|
+
def bundled_platform_dir
|
|
123
|
+
AssetsTarget.platform_dir(root: Ruby2D.assets)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# The platform dir a `ruby2d setup` build writes into, outside the gem.
|
|
127
|
+
def cache_platform_dir
|
|
128
|
+
AssetsTarget.platform_dir(root: AssetsTarget.cache_root)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# A cache build is only usable by the ruby2d version that produced it — a gem
|
|
132
|
+
# upgrade may pin newer SDL/mruby, and stale cache libs must not be linked
|
|
133
|
+
# against fresh headers. `ruby2d setup` stamps the build; require a match.
|
|
134
|
+
def cache_stamp_ok?(dir)
|
|
135
|
+
stamp = File.join(dir, '.ruby2d-version')
|
|
136
|
+
File.exist?(stamp) && File.read(stamp).strip == Ruby2D::VERSION
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# The platform dir holding this target's static libs — bundled first, then a
|
|
140
|
+
# stamped cache build. nil if neither has them, in which case the native build
|
|
141
|
+
# links system-installed SDL3 + mruby (Linux/BSD, or before `ruby2d setup`).
|
|
142
|
+
def deps_platform_dir
|
|
143
|
+
bundled = bundled_platform_dir
|
|
144
|
+
return bundled if File.exist?(File.join(bundled, 'lib', 'libSDL3.a'))
|
|
145
|
+
|
|
146
|
+
cache = cache_platform_dir
|
|
147
|
+
return cache if File.exist?(File.join(cache, 'lib', 'libSDL3.a')) && cache_stamp_ok?(cache)
|
|
148
|
+
|
|
149
|
+
nil
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# The SDL3 + mruby headers matching the resolved libraries (platform/include is
|
|
153
|
+
# a sibling of the per-target lib dir). Falls back to the bundled headers for
|
|
154
|
+
# the system-lib build, where they still describe the pinned API.
|
|
155
|
+
def deps_include_dir
|
|
156
|
+
dir = deps_platform_dir
|
|
157
|
+
dir ? File.join(File.dirname(dir), 'include') : "#{Ruby2D.assets}/platform/include"
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Find the `mrbc` executable: prefer bundled assets, then a `ruby2d setup` cache
|
|
161
|
+
# build, then $PATH.
|
|
162
|
+
def find_mrbc
|
|
163
|
+
name = AssetsTarget.host_os == 'windows' ? 'mrbc.exe' : 'mrbc'
|
|
164
|
+
|
|
165
|
+
bundled = File.join(bundled_platform_dir, 'bin', name)
|
|
166
|
+
return bundled if File.exist?(bundled)
|
|
167
|
+
|
|
168
|
+
cache = cache_platform_dir
|
|
169
|
+
cached_mrbc = File.join(cache, 'bin', name)
|
|
170
|
+
return cached_mrbc if File.exist?(cached_mrbc) && cache_stamp_ok?(cache)
|
|
171
|
+
|
|
172
|
+
# Fall back to system-installed mrbc
|
|
173
|
+
find_executable('mrbc')
|
|
55
174
|
end
|
|
56
175
|
|
|
57
176
|
|
|
@@ -59,32 +178,62 @@ end
|
|
|
59
178
|
def add_ld_flags(ld_flags, name, type, dir = nil)
|
|
60
179
|
case type
|
|
61
180
|
when :archive
|
|
62
|
-
ld_flags << "#{dir}/lib#{name}.a "
|
|
181
|
+
ld_flags << "#{shell_escape("#{dir}/lib#{name}.a")} "
|
|
63
182
|
when :framework
|
|
64
183
|
ld_flags << "-Wl,-framework,#{name} "
|
|
65
184
|
end
|
|
66
185
|
end
|
|
67
186
|
|
|
68
187
|
|
|
188
|
+
# Our build output lives in `build/` under the current directory, and a build
|
|
189
|
+
# wipes it first. A hidden marker lets a later build (or `--clean`) tell its own
|
|
190
|
+
# output from an unrelated, pre-existing `build/` — CMake, Meson, and many other
|
|
191
|
+
# tools default to that name — before deleting anything.
|
|
192
|
+
BUILD_DIR = 'build'
|
|
193
|
+
BUILD_MARKER = File.join(BUILD_DIR, '.ruby2d')
|
|
194
|
+
|
|
195
|
+
# Refuse to wipe `build/` when it exists, holds files, and isn't ours — so
|
|
196
|
+
# running `ruby2d build` in a project that already uses `build/` for something
|
|
197
|
+
# else can't silently delete it. `Dir.glob` skips the dotfile marker, so the
|
|
198
|
+
# emptiness check and the delete target stay consistent.
|
|
199
|
+
def refuse_if_foreign_build_dir
|
|
200
|
+
return unless Dir.exist?(BUILD_DIR)
|
|
201
|
+
return if File.exist?(BUILD_MARKER)
|
|
202
|
+
return if Dir.glob("#{BUILD_DIR}/*").empty?
|
|
203
|
+
|
|
204
|
+
error "A `#{BUILD_DIR}/` directory already exists here and wasn't created by Ruby 2D."
|
|
205
|
+
puts 'Refusing to delete its contents. Remove it yourself, or run `ruby2d build` from a different directory.'
|
|
206
|
+
exit 1
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
|
|
69
210
|
# Build Tasks ##################################################################
|
|
70
211
|
|
|
71
|
-
#
|
|
72
|
-
def
|
|
212
|
+
# Compile Ruby source to mruby bytecode and assemble into a single C file
|
|
213
|
+
def compile(ruby2d_app)
|
|
73
214
|
|
|
74
215
|
# Check if source file provided is good
|
|
75
216
|
if !ruby2d_app
|
|
76
|
-
|
|
77
|
-
exit
|
|
217
|
+
error 'Please provide a Ruby file to build.'
|
|
218
|
+
exit 1
|
|
78
219
|
elsif !File.exist? ruby2d_app
|
|
79
|
-
|
|
80
|
-
exit
|
|
220
|
+
error "Can't find file: #{ruby2d_app}"
|
|
221
|
+
exit 1
|
|
81
222
|
end
|
|
82
223
|
|
|
83
224
|
# Add debugging information to produce backtrace
|
|
84
|
-
|
|
225
|
+
debug_flag = @debug ? '-g' : ''
|
|
85
226
|
|
|
86
|
-
#
|
|
87
|
-
|
|
227
|
+
# Clear and create build directory, refusing to wipe a foreign `build/` and
|
|
228
|
+
# marking ours so later builds recognize it.
|
|
229
|
+
refuse_if_foreign_build_dir
|
|
230
|
+
FileUtils.rm_rf Dir.glob("#{BUILD_DIR}/*")
|
|
231
|
+
FileUtils.mkdir_p BUILD_DIR
|
|
232
|
+
FileUtils.touch BUILD_MARKER
|
|
233
|
+
|
|
234
|
+
# Compiling Ruby to bytecode is a sub-second internal step with no artifact a
|
|
235
|
+
# user runs — show its banner (and the `mrbc` echoes below) only with `--debug`.
|
|
236
|
+
step "Compiling #{ruby2d_app}" if @debug
|
|
88
237
|
|
|
89
238
|
# Assemble Ruby 2D library files into one '.rb' file
|
|
90
239
|
|
|
@@ -95,54 +244,103 @@ def build(target, ruby2d_app)
|
|
|
95
244
|
ruby2d_lib << File.read("#{ruby2d_lib_dir + f}.rb") + "\n\n"
|
|
96
245
|
end
|
|
97
246
|
|
|
247
|
+
# Make Ruby2D classes and DSL methods available at the top level
|
|
248
|
+
ruby2d_lib << "include Ruby2D\nextend Ruby2D::DSL\n"
|
|
249
|
+
|
|
98
250
|
File.write('build/ruby2d_lib.rb', ruby2d_lib)
|
|
99
251
|
|
|
100
252
|
# Assemble the Ruby 2D C extension files into one '.c' file
|
|
101
253
|
|
|
102
254
|
ruby2d_ext_dir = "#{Ruby2D.gem_dir}/ext/ruby2d/"
|
|
103
255
|
|
|
104
|
-
ruby2d_ext = "#define MRUBY 1
|
|
105
|
-
Dir["#{ruby2d_ext_dir}*.c"].
|
|
106
|
-
|
|
107
|
-
|
|
256
|
+
ruby2d_ext = "#define MRUBY 1\n\n"
|
|
257
|
+
c_files = Dir["#{ruby2d_ext_dir}*.c"].sort
|
|
258
|
+
main_file = c_files.delete("#{ruby2d_ext_dir}ruby2d.c")
|
|
259
|
+
c_files.unshift(main_file) if main_file
|
|
260
|
+
c_files.each { |c_file| ruby2d_ext << File.read(c_file) }
|
|
108
261
|
|
|
109
262
|
File.write('build/ruby2d_ext.c', ruby2d_ext)
|
|
110
263
|
|
|
111
|
-
#
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
mrbc
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
else
|
|
118
|
-
mrbc = 'mrbc'
|
|
264
|
+
# Find the `mrbc` executable
|
|
265
|
+
mrbc = find_mrbc
|
|
266
|
+
unless mrbc
|
|
267
|
+
error "Can't find `mrbc`, the mruby compiler."
|
|
268
|
+
puts 'Run `ruby2d setup` to build it, or install mruby so `mrbc` is on your PATH.'
|
|
269
|
+
exit 1
|
|
119
270
|
end
|
|
120
271
|
|
|
121
|
-
# Compile the Ruby 2D lib (`.rb` files) to mruby bytecode
|
|
122
|
-
|
|
272
|
+
# Compile the Ruby 2D lib (`.rb` files) to mruby bytecode. `run_cmd` doesn't
|
|
273
|
+
# check the result, so do it here — a failure means the assembled bytecode
|
|
274
|
+
# files won't exist, and the combine step below would crash on a missing file.
|
|
275
|
+
run_cmd "#{shell_escape(mrbc)} #{debug_flag} -Bruby2d_lib -obuild/ruby2d_lib.c build/ruby2d_lib.rb"
|
|
276
|
+
unless $?.success?
|
|
277
|
+
error 'Failed to compile the Ruby 2D library.'
|
|
278
|
+
exit 1
|
|
279
|
+
end
|
|
123
280
|
|
|
124
|
-
#
|
|
125
|
-
|
|
126
|
-
|
|
281
|
+
# Stage the user's source (requires blanked — see strip_require) and compile it.
|
|
282
|
+
# `mrbc` reports diagnostics against the path it's given, so capture its output
|
|
283
|
+
# and rewrite the staging path back to the original filename: a syntax error
|
|
284
|
+
# then points at `asteroids.rb:LINE`, the file the user wrote, not the internal
|
|
285
|
+
# copy. Line numbers already line up because strip_require preserves them.
|
|
286
|
+
staged = 'build/ruby2d_app.rb'
|
|
287
|
+
File.write(staged, strip_require(ruby2d_app))
|
|
288
|
+
app_cmd = "#{shell_escape(mrbc)} #{debug_flag} -Bruby2d_app -obuild/ruby2d_app.c #{staged}"
|
|
289
|
+
cmd_echo(app_cmd) if @debug
|
|
290
|
+
app_output = `#{app_cmd} 2>&1`
|
|
291
|
+
app_result = $?
|
|
292
|
+
print app_output.gsub(staged) { ruby2d_app } unless app_output.empty?
|
|
293
|
+
unless app_result.success?
|
|
294
|
+
error "Failed to compile #{ruby2d_app}."
|
|
295
|
+
puts 'Check the error above for syntax issues or Ruby features mruby does not support.'
|
|
296
|
+
exit 1
|
|
297
|
+
end
|
|
127
298
|
|
|
128
299
|
# Combine contents of C source files and bytecode into one file
|
|
129
|
-
open('build/app.c', 'w') do |f|
|
|
300
|
+
File.open('build/app.c', 'w') do |f|
|
|
130
301
|
['ruby2d_app', 'ruby2d_lib', 'ruby2d_ext'].each do |c_file|
|
|
131
302
|
f << File.read("build/#{c_file}.c") << "\n\n"
|
|
132
303
|
end
|
|
133
304
|
end
|
|
134
305
|
|
|
135
|
-
#
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
306
|
+
# `build/app.c` is an intermediate the native/web steps consume, not something
|
|
307
|
+
# the user runs — surface it only with `--debug`, where it's also kept.
|
|
308
|
+
wrote 'build/app.c' if @debug
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
# Build the user's application for one or more targets
|
|
313
|
+
def build(targets, ruby2d_app)
|
|
314
|
+
targets = [targets] unless targets.is_a?(Array)
|
|
315
|
+
|
|
316
|
+
compile(ruby2d_app)
|
|
317
|
+
|
|
318
|
+
# Asset directories to bundle: the `--assets` flag plus any `# ruby2d:assets
|
|
319
|
+
# <dir>` directives in the app source. Each is bundled at its own relative
|
|
320
|
+
# path — mounted into the WebAssembly virtual filesystem for the web build,
|
|
321
|
+
# copied next to the executable for the native build. Validate once here so a
|
|
322
|
+
# missing directory fails before either target starts compiling.
|
|
323
|
+
@asset_dirs = ([@assets_dir] + asset_directives(ruby2d_app)).compact.uniq
|
|
324
|
+
@asset_dirs.each { |dir| check_asset_dir(dir) }
|
|
325
|
+
|
|
326
|
+
targets.each do |target|
|
|
327
|
+
case target
|
|
328
|
+
when :native
|
|
329
|
+
compile_native
|
|
330
|
+
when :web
|
|
331
|
+
compile_web
|
|
332
|
+
end
|
|
141
333
|
end
|
|
142
334
|
|
|
143
|
-
# Remove files
|
|
144
|
-
|
|
335
|
+
# Remove intermediate build files. `--debug` keeps them all — including the
|
|
336
|
+
# assembled `build/app.c`, for anyone who wants to compile it themselves.
|
|
337
|
+
unless @debug
|
|
338
|
+
FileUtils.rm(Dir.glob('build/*.rb'))
|
|
339
|
+
FileUtils.rm(Dir.glob('build/*.c'))
|
|
340
|
+
end
|
|
145
341
|
|
|
342
|
+
# Trailing blank line so the output isn't flush against the next shell prompt.
|
|
343
|
+
puts
|
|
146
344
|
end
|
|
147
345
|
|
|
148
346
|
|
|
@@ -151,155 +349,206 @@ def compile_native
|
|
|
151
349
|
|
|
152
350
|
# Get include directories
|
|
153
351
|
incl_dir_ruby2d = "#{Ruby2D.gem_dir}/ext/ruby2d/"
|
|
154
|
-
incl_dir_deps =
|
|
352
|
+
incl_dir_deps = deps_include_dir
|
|
353
|
+
|
|
354
|
+
# Set C flags, if any
|
|
355
|
+
c_flags = ''
|
|
356
|
+
|
|
357
|
+
# Add library search directory
|
|
358
|
+
ld_flags = ''
|
|
359
|
+
# Dependent SDL archives before the base `libSDL3.a` so single-pass GNU ld
|
|
360
|
+
# (MinGW on Windows, and Linux/BSD ld) resolves their symbols; mruby is
|
|
361
|
+
# independent of SDL. Mirrors the order in ext/ruby2d/extconf.rb.
|
|
362
|
+
libs = %w[mruby SDL3_image SDL3_mixer SDL3_ttf SDL3]
|
|
363
|
+
if (platform_dir = deps_platform_dir)
|
|
364
|
+
# Bundled or `ruby2d setup`-built static archives. macOS's ld64 is order-independent.
|
|
365
|
+
ld_dir = File.join(platform_dir, 'lib')
|
|
366
|
+
libs.each { |name| add_ld_flags(ld_flags, name, :archive, ld_dir) }
|
|
367
|
+
else
|
|
368
|
+
# No static libs for this target (Linux/BSD aren't in RELEASE_PLATFORMS and
|
|
369
|
+
# `ruby2d setup` hasn't built them): link system-installed SDL3 + mruby, the
|
|
370
|
+
# same fallback find_mrbc uses for `mrbc`.
|
|
371
|
+
libs.each { |name| ld_flags << "-l#{name} " }
|
|
372
|
+
end
|
|
155
373
|
|
|
156
374
|
# Add compiler flags for each platform
|
|
157
|
-
case
|
|
158
|
-
|
|
159
|
-
when :macos
|
|
160
|
-
ld_dir = "#{Ruby2D.assets}/macos/universal/lib"
|
|
375
|
+
case AssetsTarget.host_os
|
|
161
376
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
'jpeg', 'jxl', 'avif', 'png', 'tiff', 'webp',
|
|
167
|
-
'mpg123', 'ogg', 'FLAC', 'vorbis', 'vorbisfile', 'modplug',
|
|
168
|
-
'freetype', 'harfbuzz', 'graphite2'].each do |name|
|
|
169
|
-
add_ld_flags(ld_flags, name, :archive, ld_dir)
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
ld_flags << "-lz -lbz2 -liconv -lstdc++ "
|
|
173
|
-
['Cocoa', 'Carbon', 'CoreVideo', 'OpenGL', 'Metal', 'CoreAudio', 'AudioToolbox',
|
|
174
|
-
'IOKit', 'GameController', 'ForceFeedback', 'CoreHaptics'].each do |name|
|
|
377
|
+
when 'macos'
|
|
378
|
+
%w[AVFoundation AudioToolbox Carbon Cocoa CoreAudio CoreHaptics
|
|
379
|
+
CoreMedia ForceFeedback GameController IOKit Metal QuartzCore
|
|
380
|
+
UniformTypeIdentifiers].each do |name|
|
|
175
381
|
add_ld_flags(ld_flags, name, :framework)
|
|
176
382
|
end
|
|
177
383
|
|
|
178
|
-
when
|
|
179
|
-
|
|
180
|
-
# ld_flags = '-lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf -lm -lGL'
|
|
181
|
-
|
|
182
|
-
when :windows
|
|
384
|
+
when 'windows'
|
|
385
|
+
ld_flags << '-lgdi32 -lhid -limm32 -lole32 -loleaut32 -lrpcrt4 -lsetupapi -lusp10 -luuid -lversion -lwinmm -lws2_32'
|
|
183
386
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
ld_dir = "#{Ruby2D.assets}/windows/mingw-w64-x86_64/lib"
|
|
188
|
-
end
|
|
387
|
+
when 'linux', 'bsd'
|
|
388
|
+
ld_flags << '-lm'
|
|
389
|
+
end
|
|
189
390
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
add_ld_flags(ld_flags, name, :archive, ld_dir)
|
|
199
|
-
end
|
|
200
|
-
ld_flags << '-lmingw32 -lopengl32 -lole32 -loleaut32 -limm32 -lversion -lwinmm -lrpcrt4 -mwindows -lsetupapi -ldwrite '\
|
|
201
|
-
'-lws2_32 -lshlwapi '
|
|
202
|
-
ld_flags << '-Wl,--end-group'
|
|
391
|
+
# Check for a C compiler up front so a missing toolchain gives a clear message
|
|
392
|
+
# instead of a bare `failed` on exit 127 (like the `mrbc` check). A missing C
|
|
393
|
+
# compiler is a hard error — native can't build without it — whereas a missing
|
|
394
|
+
# `emcc` only skips the optional web build. Honor $CC if set, else default `cc`.
|
|
395
|
+
cc = ENV['CC'] || 'cc'
|
|
396
|
+
if find_executable(cc).nil?
|
|
397
|
+
error "Can't find `#{cc}`, a C compiler. Install a C toolchain (e.g. Xcode Command Line Tools or build-essential) or set $CC."
|
|
398
|
+
exit 1
|
|
203
399
|
end
|
|
204
400
|
|
|
205
401
|
# Compile the app
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
402
|
+
step 'Building native'
|
|
403
|
+
puts " #{"for #{native_target}".dim}"
|
|
404
|
+
FileUtils.mkdir_p 'build/native'
|
|
405
|
+
run_cmd "#{shell_escape(cc)} #{c_flags} -I#{shell_escape(incl_dir_ruby2d)} -I#{shell_escape(incl_dir_deps)} build/app.c #{ld_flags} -o build/native/app"
|
|
406
|
+
|
|
407
|
+
unless $?.success?
|
|
408
|
+
error 'Native build failed.'
|
|
409
|
+
unless deps_platform_dir
|
|
410
|
+
puts "No bundled libraries for #{AssetsTarget.target_id}. Run `ruby2d setup` to build"
|
|
411
|
+
puts 'them, or install SDL3 + mruby with your system package manager.'
|
|
412
|
+
end
|
|
413
|
+
exit 1
|
|
218
414
|
end
|
|
219
415
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
#
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
run_cmd "emcc -s WASM=1 -I#{incl_dir_ruby2d} -I#{incl_dir_deps} "\
|
|
231
|
-
"-s USE_SDL=2 -s USE_SDL_IMAGE=2 -s USE_SDL_MIXER=2 -s USE_SDL_TTF=2 "\
|
|
232
|
-
"build/app.c #{ld_flags} -o build/app.html"
|
|
416
|
+
# Bundle the default font next to the executable so apps using the built-in
|
|
417
|
+
# font (`Text.new('…')` with no `font:`) resolve it at runtime. The native app
|
|
418
|
+
# reads `ruby2d/fonts/…` relative to its working directory — which
|
|
419
|
+
# `ruby2d launch --native` sets to `build/native` — mirroring the WASM preload.
|
|
420
|
+
fonts_src = "#{Ruby2D.assets}/resources/fonts"
|
|
421
|
+
if Dir.exist?(fonts_src)
|
|
422
|
+
fonts_dest = 'build/native/ruby2d/fonts'
|
|
423
|
+
FileUtils.mkdir_p fonts_dest
|
|
424
|
+
FileUtils.cp_r "#{fonts_src}/.", fonts_dest
|
|
425
|
+
end
|
|
233
426
|
|
|
234
|
-
#
|
|
235
|
-
#
|
|
427
|
+
# Bundle each declared asset directory next to the executable — the native
|
|
428
|
+
# counterpart to the web build's virtual-filesystem preload. The app resolves
|
|
429
|
+
# them at runtime from its working directory (`build/native`, set by
|
|
430
|
+
# `ruby2d launch --native`), so a dir mounts at the same relative path it was
|
|
431
|
+
# given, matching how the app references it (`Image.new('media/x.png')`).
|
|
432
|
+
@asset_dirs.each do |dir|
|
|
433
|
+
dest = File.join('build/native', dir)
|
|
434
|
+
FileUtils.mkdir_p File.dirname(dest)
|
|
435
|
+
FileUtils.cp_r dir, dest
|
|
436
|
+
end
|
|
236
437
|
|
|
237
|
-
|
|
438
|
+
create_macos_bundle if AssetsTarget.host_os == 'macos'
|
|
439
|
+
wrote 'build/native/app'
|
|
440
|
+
wrote 'build/native/App.app' if AssetsTarget.host_os == 'macos'
|
|
441
|
+
puts " #{'Run `ruby2d launch --native` to view'.dim}"
|
|
238
442
|
end
|
|
239
443
|
|
|
240
444
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
445
|
+
# Validate an asset directory (from `--assets` or a `# ruby2d:assets` directive)
|
|
446
|
+
# before it's bundled. A missing dir aborts the build rather than ship an app
|
|
447
|
+
# that can't find its assets. Both builds bundle the dir at the path given —
|
|
448
|
+
# the web VFS mounts it there, the native build copies it there next to the
|
|
449
|
+
# executable — so an absolute dir lands at that same absolute path, which the
|
|
450
|
+
# relative references apps use won't find; warn rather than silently mislead.
|
|
451
|
+
def check_asset_dir(dir)
|
|
452
|
+
unless Dir.exist?(dir)
|
|
453
|
+
error "asset directory not found: #{dir}"
|
|
454
|
+
exit 1
|
|
246
455
|
end
|
|
247
|
-
|
|
248
|
-
|
|
456
|
+
return unless File.absolute_path?(dir)
|
|
249
457
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
errors = false
|
|
254
|
-
mruby_errors = false
|
|
255
|
-
emscripten_errors = false
|
|
458
|
+
warning "assets dir `#{dir}` is absolute, so it's bundled at that same " \
|
|
459
|
+
'path. Reference it by that absolute path, or use a relative dir (e.g. `media`) instead.'
|
|
460
|
+
end
|
|
256
461
|
|
|
257
|
-
puts "\nChecking for mruby"
|
|
258
462
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
463
|
+
# Create a WebAssembly executable using Emscripten
|
|
464
|
+
def compile_web
|
|
465
|
+
# When Emscripten is missing: skip the web build for a default `ruby2d build`
|
|
466
|
+
# (so the native app still gets produced), but fail loudly when `--web` was
|
|
467
|
+
# passed explicitly — the user asked for web specifically, so it shouldn't pass
|
|
468
|
+
# silently (e.g. in `ruby2d build --web && deploy`).
|
|
469
|
+
if find_executable('emcc').nil?
|
|
470
|
+
if @web_explicit
|
|
471
|
+
error "Can't find `emcc`. Install the Emscripten SDK and source emsdk_env.sh", spaced: true
|
|
472
|
+
exit 1
|
|
473
|
+
end
|
|
474
|
+
puts "\n #{'Skipping web build — Emscripten (emcc) not found'.dim}"
|
|
475
|
+
return
|
|
266
476
|
end
|
|
267
477
|
|
|
268
|
-
|
|
478
|
+
step 'Building web'
|
|
479
|
+
FileUtils.mkdir_p 'build/web'
|
|
269
480
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
481
|
+
incl_dir_ruby2d = "#{Ruby2D.gem_dir}/ext/ruby2d/"
|
|
482
|
+
incl_dir_deps = "#{Ruby2D.assets}/platform/include/"
|
|
483
|
+
|
|
484
|
+
wasm_lib_dir = "#{Ruby2D.assets}/platform/wasm/lib"
|
|
485
|
+
ld_flags = Dir["#{wasm_lib_dir}/*.a"].map { |f| shell_escape(f) }.join(' ')
|
|
486
|
+
|
|
487
|
+
# Always bundle the default font for WASM builds
|
|
488
|
+
fonts_dir = "#{Ruby2D.assets}/resources/fonts"
|
|
489
|
+
preload_flag = "--preload-file #{shell_escape("#{fonts_dir}@ruby2d/fonts")}"
|
|
490
|
+
|
|
491
|
+
# Bundle each requested asset directory — from `--assets` and any
|
|
492
|
+
# `# ruby2d:assets` directive — into the virtual filesystem at its own path
|
|
493
|
+
# (the `src@dst` map uses the same string for both). Validated in `build`.
|
|
494
|
+
@asset_dirs.each { |dir| preload_flag += " --preload-file #{shell_escape("#{dir}@#{dir}")}" }
|
|
495
|
+
|
|
496
|
+
# Faster page loads: restrict the JS glue to the browser environment (drops the
|
|
497
|
+
# Node/worker probing) and, for release builds, minify it with Closure. Closure
|
|
498
|
+
# is slow, so skip it for --debug (keep iteration fast and the glue readable);
|
|
499
|
+
# the environment trim is cheap and always applied.
|
|
500
|
+
web_opt_flags = '-sENVIRONMENT=web'
|
|
501
|
+
web_opt_flags += ' --closure 1' unless @debug
|
|
502
|
+
|
|
503
|
+
# The vendored wasm libmruby.a is built with MRB_NO_BOXING (floats inline in
|
|
504
|
+
# mrb_value — the default 32-bit word boxing heap-allocates every Float).
|
|
505
|
+
# The boxing mode is ABI: app.c includes the mruby headers, so it must define
|
|
506
|
+
# the same mode or values are read with mismatched layouts at runtime.
|
|
507
|
+
mruby_abi_flag = '-DMRB_NO_BOXING'
|
|
508
|
+
|
|
509
|
+
# Start the wasm heap at 64MB instead of Emscripten's 16MB default. Growing
|
|
510
|
+
# is kept as a safety valve, but each mid-game `memory.grow` detaches and
|
|
511
|
+
# recopies the heap — a visible frame hitch — and reaching 64MB from 16MB
|
|
512
|
+
# takes ~8 geometric growth steps scattered through early gameplay. Memory
|
|
513
|
+
# isn't stored in the binary, so this doesn't change the download size;
|
|
514
|
+
# browsers commit the pages lazily.
|
|
515
|
+
memory_flags = '-sINITIAL_MEMORY=64MB -sALLOW_MEMORY_GROWTH'
|
|
516
|
+
|
|
517
|
+
if @single_file
|
|
518
|
+
# A custom template becomes Emscripten's shell file (it must contain the
|
|
519
|
+
# `{{{ SCRIPT }}}` placeholder); otherwise emcc emits its default shell.
|
|
520
|
+
shell_flag = @template ? "--shell-file #{shell_escape(@template)} " : ''
|
|
521
|
+
run_cmd "emcc -O3 #{mruby_abi_flag} -I#{shell_escape(incl_dir_ruby2d)} -I#{shell_escape(incl_dir_deps)} "\
|
|
522
|
+
"-sUSE_SDL=0 -sSINGLE_FILE #{memory_flags} #{web_opt_flags} #{shell_flag}"\
|
|
523
|
+
"build/app.c #{ld_flags} #{preload_flag} "\
|
|
524
|
+
"-o build/web/app.html"
|
|
525
|
+
|
|
526
|
+
unless $?.success?
|
|
527
|
+
error 'Web build failed.'
|
|
528
|
+
exit 1
|
|
529
|
+
end
|
|
278
530
|
|
|
279
|
-
|
|
280
|
-
print ' emar...'
|
|
281
|
-
if `which emar`.empty?
|
|
282
|
-
puts 'not found'.error
|
|
283
|
-
emscripten_errors = true
|
|
531
|
+
wrote 'build/web/app.html'
|
|
284
532
|
else
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
puts "* Did you install mruby?"
|
|
294
|
-
end
|
|
295
|
-
if emscripten_errors
|
|
296
|
-
puts "* Did you run \`./emsdk_env.sh\` ?", " For help, check out the \"Getting Started\" guide on webassembly.org"
|
|
533
|
+
run_cmd "emcc -O3 #{mruby_abi_flag} -I#{shell_escape(incl_dir_ruby2d)} -I#{shell_escape(incl_dir_deps)} "\
|
|
534
|
+
"-sUSE_SDL=0 #{memory_flags} #{web_opt_flags} "\
|
|
535
|
+
"build/app.c #{ld_flags} #{preload_flag} "\
|
|
536
|
+
"-o build/web/app.js"
|
|
537
|
+
|
|
538
|
+
unless $?.success?
|
|
539
|
+
error 'Web build failed.'
|
|
540
|
+
exit 1
|
|
297
541
|
end
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
542
|
+
|
|
543
|
+
# Use the caller's template if given, else the bundled default. Either way
|
|
544
|
+
# it must load `app.js` (see the bundled `template.html` for the contract).
|
|
545
|
+
FileUtils.cp(@template || "#{Ruby2D.assets}/resources/web/template.html", 'build/web/app.html')
|
|
546
|
+
wrote 'build/web/app.html'
|
|
547
|
+
wrote 'build/web/app.js'
|
|
548
|
+
wrote 'build/web/app.wasm'
|
|
549
|
+
wrote 'build/web/app.data'
|
|
302
550
|
end
|
|
551
|
+
puts " #{'Run `ruby2d launch --web` to view'.dim}"
|
|
303
552
|
end
|
|
304
553
|
|
|
305
554
|
|
|
@@ -329,80 +578,45 @@ def create_macos_bundle
|
|
|
329
578
|
)
|
|
330
579
|
|
|
331
580
|
# Create directories
|
|
332
|
-
FileUtils.mkpath 'build/App.app/Contents/MacOS'
|
|
333
|
-
FileUtils.mkpath 'build/App.app/Contents/Resources'
|
|
581
|
+
FileUtils.mkpath 'build/native/App.app/Contents/MacOS'
|
|
582
|
+
FileUtils.mkpath 'build/native/App.app/Contents/Resources'
|
|
334
583
|
|
|
335
584
|
# Create Info.plist and copy over assets
|
|
336
|
-
File.open('build/App.app/Contents/Info.plist', 'w') { |f| f.write(info_plist) }
|
|
337
|
-
FileUtils.cp 'build/app', 'build/App.app/Contents/MacOS/'
|
|
338
|
-
|
|
339
|
-
#
|
|
340
|
-
|
|
341
|
-
#
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
# Success!
|
|
345
|
-
# puts 'macOS app bundle created: `build/App.app`'
|
|
346
|
-
end
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
# Build an iOS or tvOS app
|
|
350
|
-
def build_ios_tvos(rb_file, device)
|
|
351
|
-
check_build_src_file(rb_file)
|
|
352
|
-
|
|
353
|
-
# Check if MRuby exists; if not, quit
|
|
354
|
-
if `which mruby`.empty?
|
|
355
|
-
puts "#{'Error:'.error} Can't find MRuby, which is needed to build native Ruby 2D applications.\n"
|
|
356
|
-
exit
|
|
585
|
+
File.open('build/native/App.app/Contents/Info.plist', 'w') { |f| f.write(info_plist) }
|
|
586
|
+
FileUtils.cp 'build/native/app', 'build/native/App.app/Contents/MacOS/'
|
|
587
|
+
|
|
588
|
+
# Bundle the runtime resources (default font) next to the executable. The app
|
|
589
|
+
# chdirs to its own directory at startup, so it resolves `ruby2d/fonts/…`
|
|
590
|
+
# here when launched from Finder (where the working directory is otherwise `/`).
|
|
591
|
+
if Dir.exist?('build/native/ruby2d')
|
|
592
|
+
FileUtils.cp_r 'build/native/ruby2d', 'build/native/App.app/Contents/MacOS/'
|
|
357
593
|
end
|
|
358
594
|
|
|
359
|
-
#
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
# Read the provided Ruby source file, copy to build dir and compile to bytecode
|
|
367
|
-
File.open('build/src.rb', 'w') { |file| file << strip_require(rb_file) }
|
|
368
|
-
`mrbc #{debug_flag} -Bruby2d_app -obuild/src.c build/src.rb`
|
|
369
|
-
|
|
370
|
-
# Copy over iOS project
|
|
371
|
-
FileUtils.cp_r "#{@gem_dir}/assets/#{device}", "build"
|
|
595
|
+
# Bundle any declared asset directories (copied next to build/native/app
|
|
596
|
+
# earlier) alongside the executable inside the bundle too, preserving their
|
|
597
|
+
# relative paths, so a Finder-launched app resolves them the same way.
|
|
598
|
+
@asset_dirs.each do |dir|
|
|
599
|
+
src = File.join('build/native', dir)
|
|
600
|
+
next unless Dir.exist?(src)
|
|
372
601
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
f << "#define MRUBY 1" << "\n\n"
|
|
377
|
-
f << File.read("build/lib.c") << "\n\n"
|
|
378
|
-
f << File.read("build/src.c") << "\n\n"
|
|
379
|
-
f << File.read("#{@gem_dir}/ext/ruby2d/ruby2d.c")
|
|
602
|
+
dest = File.join('build/native/App.app/Contents/MacOS', dir)
|
|
603
|
+
FileUtils.mkdir_p File.dirname(dest)
|
|
604
|
+
FileUtils.cp_r src, dest
|
|
380
605
|
end
|
|
381
606
|
|
|
382
|
-
#
|
|
383
|
-
#
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
# Clean up
|
|
387
|
-
clean_up unless @debug
|
|
388
|
-
|
|
389
|
-
# Success!
|
|
390
|
-
puts "App created: `build/#{device}`"
|
|
607
|
+
# Bundle the icon referenced by CFBundleIconFile (the Ruby 2D default), so the
|
|
608
|
+
# plist's `app.icns` reference resolves instead of dangling.
|
|
609
|
+
icon = "#{Ruby2D.assets}/resources/icons/icon.icns"
|
|
610
|
+
FileUtils.cp icon, 'build/native/App.app/Contents/Resources/app.icns' if File.exist?(icon)
|
|
391
611
|
end
|
|
392
612
|
|
|
393
613
|
|
|
394
|
-
# Clean up
|
|
614
|
+
# Clean up the build directory
|
|
395
615
|
def clean_up(cmd = nil)
|
|
396
|
-
FileUtils.rm(
|
|
397
|
-
Dir.glob('build/*.{rb,c,js}')
|
|
398
|
-
)
|
|
399
616
|
if cmd == :all
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
FileUtils.
|
|
403
|
-
|
|
404
|
-
FileUtils.rm_rf 'build/App.app'
|
|
405
|
-
FileUtils.rm_rf 'build/ios'
|
|
406
|
-
FileUtils.rm_rf 'build/tvos'
|
|
617
|
+
refuse_if_foreign_build_dir
|
|
618
|
+
step 'Cleaning build directory'
|
|
619
|
+
FileUtils.rm_rf Dir.glob("#{BUILD_DIR}/*")
|
|
620
|
+
puts
|
|
407
621
|
end
|
|
408
622
|
end
|