feat: add Python (PyO3) and Ruby (Magnus) native bindings
Introduces three crates: - quicnprotochat-bindings: shared Rust API returning structured data instead of printing to stdout; explicit per-call auth (no global OnceLock); QPCE state files fully interoperable with the CLI. - quicnprotochat-python: PyO3 0.22 extension; GIL released during all blocking QUIC calls via py.allow_threads. - quicnprotochat-ruby: Magnus 0.7 extension; Rakefile build task. Core/proto crates referenced via git dep on the main repo.
This commit is contained in:
39
crates/quicnprotochat-ruby/Rakefile
Normal file
39
crates/quicnprotochat-ruby/Rakefile
Normal file
@@ -0,0 +1,39 @@
|
||||
require "fileutils"
|
||||
|
||||
WORKSPACE_ROOT = File.expand_path("../..", __dir__)
|
||||
TARGET_DIR = File.join(WORKSPACE_ROOT, "target")
|
||||
LIB_DIR = File.join(__dir__, "lib")
|
||||
|
||||
# Detect the shared library extension for the current platform.
|
||||
SO_EXT = case RUBY_PLATFORM
|
||||
when /darwin/ then "dylib"
|
||||
when /mingw|mswin/ then "dll"
|
||||
else "so"
|
||||
end
|
||||
|
||||
LIB_SRC = File.join(TARGET_DIR, "release", "libquicnprotochat_ruby.#{SO_EXT}")
|
||||
LIB_DEST = File.join(LIB_DIR, "quicnprotochat_ruby.#{SO_EXT}")
|
||||
|
||||
desc "Build the native extension (release)"
|
||||
task :build do
|
||||
sh "cargo build --release --manifest-path #{File.join(__dir__, "Cargo.toml")}"
|
||||
FileUtils.mkdir_p(LIB_DIR)
|
||||
FileUtils.cp(LIB_SRC, LIB_DEST)
|
||||
puts "Copied #{LIB_DEST}"
|
||||
end
|
||||
|
||||
desc "Build the native extension (debug)"
|
||||
task :build_dev do
|
||||
sh "cargo build --manifest-path #{File.join(__dir__, "Cargo.toml")}"
|
||||
lib_src = File.join(TARGET_DIR, "debug", "libquicnprotochat_ruby.#{SO_EXT}")
|
||||
FileUtils.mkdir_p(LIB_DIR)
|
||||
FileUtils.cp(lib_src, LIB_DEST)
|
||||
puts "Copied #{LIB_DEST} (debug)"
|
||||
end
|
||||
|
||||
desc "Remove build artefacts"
|
||||
task :clean do
|
||||
FileUtils.rm_f(LIB_DEST)
|
||||
end
|
||||
|
||||
task default: :build
|
||||
Reference in New Issue
Block a user