Bug #18758
closedRuby fails to build on M1 Mac when x86 Homebrew is installed
Description
If you install x86 homebrew on an M1 mac, then install libyaml in the x86 version of homebrew, Ruby will fail to build on ARM.
Steps to reproduce:
- Install x86 homebrew:
$ arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
- Install x86 libyaml:
$ arch -x86_64 /usr/local/bin/brew install libyaml
- Configure and compile Ruby with ARM architecture
I expected Ruby to compile, but Psych fails with the following output:
/Users/aaron/git/ruby/tool/extlibs.rb:6:in `require': cannot load such file -- digest (LoadError)
from /Users/aaron/git/ruby/tool/extlibs.rb:6:in `<top (required)>'
from /Users/aaron/git/ruby/ext/psych/extconf.rb:24:in `require_relative'
from /Users/aaron/git/ruby/ext/psych/extconf.rb:24:in `<top (required)>'
from ./ext/extmk.rb:217:in `load'
from ./ext/extmk.rb:217:in `block in extmake'
from /Users/aaron/git/ruby/lib/mkmf.rb:324:in `open'
from ./ext/extmk.rb:213:in `extmake'
from ./ext/extmk.rb:577:in `block in <main>'
from ./ext/extmk.rb:573:in `each'
from ./ext/extmk.rb:573:in `<main>'
mkmf.log
from Psych says:
ld: warning: ignoring file /usr/local/lib/libyaml.dylib, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
I believe the problem is the default LDFLAGS set by configure. The output of configure is:
* LDFLAGS: -L. -fstack-protector-strong -L/usr/local/lib
I don't think /usr/local/lib
should be in LDFLAGS
by default.
I've attached a patch that fixes the problem for me, and I sent the same patch as a PR on GitHub: https://github.com/ruby/ruby/pull/5855
Thanks!
Updated by tenderlovemaking (Aaron Patterson) over 2 years ago
I tried to attach the patch but it just says "internal server error" 😅
Updated by mame (Yusuke Endoh) over 2 years ago
I don't think /usr/local/lib should be in LDFLAGS by default.
When removing what appears to be unnecessary, it is a good idea to check the reason why it was introduced. According to https://github.com/ruby/ruby/commit/67da4aebc56b1a1058ab17e256f7d64b6b8bbd90, -L/usr/local/lib
was needed to support the weird behavior of apple gcc port in 2009. Maybe the issue has been fixed in the macOS side, so I agree with the change.
Updated by hsbt (Hiroshi SHIBATA) over 2 years ago
@tenderlovemaking (Aaron Patterson) I fixed the upload feature now. see https://bugs.ruby-lang.org/issues/18687#note-10
Updated by tenderlovemaking (Aaron Patterson) over 2 years ago
mame (Yusuke Endoh) wrote in #note-2:
I don't think /usr/local/lib should be in LDFLAGS by default.
When removing what appears to be unnecessary, it is a good idea to check the reason why it was introduced. According to https://github.com/ruby/ruby/commit/67da4aebc56b1a1058ab17e256f7d64b6b8bbd90,
-L/usr/local/lib
was needed to support the weird behavior of apple gcc port in 2009. Maybe the issue has been fixed in the macOS side, so I agree with the change.
Yes, I checked that. I think the weird behavior is fixed, but the commit message didn't describe the weird behavior so I don't know how to test if it's fixed.
Updated by jeremyevans0 (Jeremy Evans) over 2 years ago
- Is duplicate of Bug #18790: cannot load such file -- digest (LoadError) added
Updated by hsbt (Hiroshi SHIBATA) about 2 years ago
- Status changed from Open to Closed
The download feature for libyaml and libffi with extlibs has been removed from Ruby 3.2.0-preview2.
This issue no longer happened.