From: eregontp@...
Date: 2020-11-19T18:51:18+00:00
Subject: [ruby-core:100947] [Ruby master Bug#17021] "arm64" and "arm" are mixed in RbConfig on Apple silicon

Issue #17021 has been updated by Eregon (Benoit Daloze).


nobu (Nobuyoshi Nakada) wrote in #note-5:
> First of all, `$host_cpu` and others are used only for cross-compilers and nonsense in the other cases.
> Why do they matter?

I think RbConfig `host_*` values should be correct no matter whether cross-compiling or not.

Notably, `RbConfig::CONFIG["host_os"]` is well known as the portable way to get the OS.
So it follows that `RbConfig::CONFIG["host_cpu"]` would be the portable way to get the processor architecture.
Both are used here: https://github.com/ffi/ffi/blob/fbe2cf851f426cc55b3b76eca7b10e37aa220b47/lib/ffi/platform.rb

Should another RbConfig::CONFIG key be used? Which one?

----------------------------------------
Bug #17021: "arm64" and "arm" are mixed in RbConfig on Apple silicon
https://bugs.ruby-lang.org/issues/17021#change-88602

* Author: watson1978 (Shizuo Fujita)
* Status: Open
* Priority: Normal
* ruby -v: ruby 2.8.0dev (2020-07-09T09:14:53Z master addbb7d16e) [arm64-darwin20]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
When I checked the value of `RbConfig::CONFIG` on the Apple silicon macOS,e I found "arm64" and "arm" are mixed as following.


```
$ ruby -v
ruby 2.8.0dev (2020-07-09T09:14:53Z master addbb7d16e) [arm64-darwin20]

$ ruby -e 'require "rbconfig"; pp RbConfig::CONFIG' | grep "arm"
  "/Users/watson/.rbenv/versions/2.8.0/include/ruby-2.8.0/vendor_ruby/arm64-darwin20",
  "/Users/watson/.rbenv/versions/2.8.0/include/ruby-2.8.0/site_ruby/arm64-darwin20",
  "/Users/watson/.rbenv/versions/2.8.0/include/ruby-2.8.0/arm64-darwin20",
  "/Users/watson/.rbenv/versions/2.8.0/lib/ruby/vendor_ruby/2.8.0/arm64-darwin20",
  "/Users/watson/.rbenv/versions/2.8.0/lib/ruby/site_ruby/2.8.0/arm64-darwin20",
  "/Users/watson/.rbenv/versions/2.8.0/lib/ruby/2.8.0/arm64-darwin20",
 "sitearch"=>"arm64-darwin20",
 "arch"=>"arm64-darwin20",
  "/Users/watson/.rbenv/versions/2.8.0/include/arm64-darwin20",
  "/Users/watson/.rbenv/versions/2.8.0/include/arm64-darwin20",
 "sitearchlibdir"=>"/Users/watson/.rbenv/versions/2.8.0/lib/arm64-darwin20",
 "archlibdir"=>"/Users/watson/.rbenv/versions/2.8.0/lib/arm64-darwin20",
  "/Users/watson/.rbenv/versions/2.8.0/lib/ruby/arm64-darwin20",
  "/Users/watson/.rbenv/versions/2.8.0/lib/ruby/arm64-darwin20",
  "Target: arm64-apple-darwin20.0.0\n" +
 "target_cpu"=>"arm64",
 "target"=>"arm64-apple-darwin20",
 "host_cpu"=>"arm",
 "host"=>"arm-apple-darwin20.0.0",
 "build_cpu"=>"arm",
 "build"=>"arm-apple-darwin20.0.0",
  "/Users/watson/.rbenv/versions/2.8.0/lib/ruby/2.8.0/arm64-darwin20",
 "topdir"=>"/Users/watson/.rbenv/versions/2.8.0/lib/ruby/2.8.0/arm64-darwin20"}
 ```
 
"target_cpu" indicates "arm64", however, "host_cpu" has "arm"...
 
I'd like to know whether this behavior is the right thing.




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>