Project

General

Profile

Actions

Bug #20961

open

MMTk build on macOS missing librubygc.mmtk.bundle

Added by shan (Shannon Skipper) about 21 hours ago. Updated about 17 hours ago.

Status:
Open
Assignee:
-
Target version:
-
ruby -v:
ruby 3.4.0dev (2024-12-18 master 9715131c32) +YJIT +MN +PRISM [arm64-darwin24.2.0]
[ruby-core:120283]

Description

Hi! I'm excited about the new modular GC feature. I just wanted to report that when I build Ruby 3.4.0-rc1 with MMTk on latest macOS 15.2 I seem to be encountering a linking issue. Whether I cargo build --release or ruby extconf.rb && make a target/release/libmmtk_ruby.dylib is created. A make modular-gc MODULAR_GC=mmtk then seems to expect a target/release/librubygc.mmtk.bundle, which doesn't exist. I briefly had it working but now can't reproduce the working order.

Reproduction steps:

brew install gmp jemalloc libffi libyaml openssl@3 readline rust zlib
curl https://cache.ruby-lang.org/pub/ruby/3.4/ruby-3.4.0-rc1.tar.xz | tar -x
cd ruby-3.4.0-rc1
./configure \
    --prefix="$HOME/.rubies/ruby-3.4.0-rc1" \
    --with-libyaml-dir="$(brew --prefix libyaml)" \
    --with-openssl-dir="$(brew --prefix openssl@3)" \
    --with-readline-dir="$(brew --prefix readline)" \
    --with-zlib-dir="$(brew --prefix zlib)" \
    --with-opt-dir="$(brew --prefix gmp):$(brew --prefix jemalloc)" \
    --with-jemalloc \
    --with-modular-gc="gc/mmtk/target/release"
cargo build --release --manifest-path=gc/mmtk/Cargo.toml
make -j miniruby modular-gc MODULAR_GC=mmtk

I keep getting errors similar to:

ruby_modular_gc_init: Shared library /Users/havenwood/src/ruby-3.4.0-rc1/gc/mmtk/target/release/librubygc.mmtk.bundle cannot be opened: dlopen(/Users/havenwood/src/ruby-3.4.0-rc1/gc/mmtk/target/release/librubygc.mmtk.bundle, 0x0009): tried: '/Users/havenwood/src/ruby-3.4.0-rc1/gc/mmtk/target/release/librubygc.mmtk.bundle' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/havenwood/src/ruby-3.4.0-rc1/gc/mmtk/target/release/librubygc.mmtk.bundle' (no such file), '/Users/havenwood/src/ruby-3.4.0-rc1/gc/mmtk/target/release/librubygc.mmtk.bundle' (no such file)

The latest nightly Ruby I tried produced the same missing .bundle error. I'm very much looking forward to 3.4.0 and the introduction of the new pluggable GC feature! Thank you!

Updated by nobu (Nobuyoshi Nakada) about 19 hours ago

shan (Shannon Skipper) wrote:

    --with-modular-gc="gc/mmtk/target/release"

IIRC, this option requires an absolute path.

Updated by nobu (Nobuyoshi Nakada) about 19 hours ago

I’m curious why this option is allowed to refer outside $(prefix). (and probably $(DESTDIR) too?)

Updated by peterzhu2118 (Peter Zhu) about 17 hours ago

IIRC, this option requires an absolute path.

No, if you pass a relative path it will convert it to an absolute path based on your current directory.

I’m curious why this option is allowed to refer outside $(prefix). (and probably $(DESTDIR) too?)

It's allowed because eventually we want to install GC implementations like gems, so it will be installed in a different directory like a C extension.

Updated by peterzhu2118 (Peter Zhu) about 17 hours ago

Thank you for trying this feature out. I think you're confused about how the configuration works, and that's our bad, we never documented anything.

The --with-modular-gc flag is used to specify a directory that the built GC library will be placed into, and it uses a different directory for the intermediate build artifacts (you don't need to specify this directory). It seems like you're trying to specify the Rust build directory for it?

I started working on a gc/README.md document. It's far from complete, but I wrote a "building guide" section which may help you in building this feature. Please let me know if you still run into issues.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like1