Files
Yukihiro "Matz" Matsumoto d1bffb902e Merge pull request #6834 from Asmod4n/glib_hal
mruby-task GLib HAL
2026-05-17 23:31:33 +09:00

50 lines
1.8 KiB
Ruby

MRuby::Gem::Specification.new('mruby-task') do |spec|
spec.license = 'MIT'
spec.authors = 'mruby developers'
spec.summary = 'Cooperative multitasking with preemptive scheduling'
# Enable task scheduler globally (required for vm.c integration)
spec.build.defines << 'MRB_USE_TASK_SCHEDULER'
if spec.for_windows?
spec.linker.libraries << "winmm"
end
ports = spec.build.effective_ports
# ports/glib/ needs glib-2.0 (GSource, GMainContext, GRecMutex) and
# gthread-2.0 (GThread). On modern distros gthread-2.0 is a transparent
# alias for glib-2.0; on older ones it's a separate .pc that pulls in
# -lpthread, so query it separately.
if ports.include?('glib')
unless spec.search_package('glib-2.0') && spec.search_package('gthread-2.0')
abort <<~MSG
[mruby-task] conf.ports :glib selected but pkg-config could not find
glib-2.0 / gthread-2.0. Install the GLib development headers
(Debian/Ubuntu: libglib2.0-dev; Fedora: glib2-devel; Arch: glib2;
macOS Homebrew: glib). For non-default install locations, set
PKG_CONFIG_PATH before invoking rake.
MSG
end
end
# Optional demo tool that exercises the GLib HAL end-to-end (basic
# scheduling, priority ordering, timeslice preemption, auto-execution
# under a foreign GLib main loop). Default off; opt in from your
# build_config with:
#
# conf.cc.defines << 'MRB_TASK_BUILD_DEMO'
# conf.ports :glib
# conf.gem core: 'mruby-task'
#
# When enabled, `rake` produces bin/mruby-task-demo from
# tools/mruby-task-demo/. The define is only inspected here -- the
# demo's C source does not condition on it.
if spec.build.cc.defines.include?('MRB_TASK_BUILD_DEMO')
unless ports.include?('glib')
abort '[mruby-task] MRB_TASK_BUILD_DEMO requires conf.ports :glib'
end
spec.bins = %w(mruby_task_demo)
end
end