Ruby fails to build on M1 Mac when x86 Homebrew is installed
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