From 1e046899a35e57fa76d1ef0a8875538e36eca199 Mon Sep 17 00:00:00 2001 From: John Ewart Date: Wed, 5 May 2021 10:54:01 -0700 Subject: [PATCH 1/2] Add some bits to support installing Ruby properly on Apple M1 architecture --- internal/buildpack/ruby.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/internal/buildpack/ruby.go b/internal/buildpack/ruby.go index 7a40b9b2..3917884c 100644 --- a/internal/buildpack/ruby.go +++ b/internal/buildpack/ruby.go @@ -77,7 +77,7 @@ func installRuby(ctx context.Context, sys Sys, spec yb.BuildpackSpec) (biome.Env if _, err := biome.EvalSymlinks(ctx, sys.Biome, rbenvDir); err != nil { log.Debugf(ctx, "rbenv not found: %v", err) log.Infof(ctx, "Installing rbenv in %s", rbenvDir) - err := extract(ctx, sys, rbenvDir, "https://github.com/rbenv/rbenv/archive/60c933968584ac9ae7caac6dbed614740f899ec3.zip", stripTopDirectory) + err := extract(ctx, sys, rbenvDir, "https://github.com/rbenv/rbenv/archive/633436706fa9227b014b89390892db9e74f5d435.zip", stripTopDirectory) if err != nil { return biome.Environment{}, fmt.Errorf("download rbenv: %w", err) } @@ -86,15 +86,22 @@ func installRuby(ctx context.Context, sys Sys, spec yb.BuildpackSpec) (biome.Env if _, err := biome.EvalSymlinks(ctx, sys.Biome, rubyBuildDir); err != nil { log.Debugf(ctx, "ruby-build not found: %v", err) log.Infof(ctx, "Installing ruby-build plugin in %s", rubyBuildDir) - err := extract(ctx, sys, rubyBuildDir, "https://github.com/rbenv/ruby-build/archive/v20201118.zip", stripTopDirectory) + err := extract(ctx, sys, rubyBuildDir, "https://github.com/rbenv/ruby-build/archive/v20210423.zip", stripTopDirectory) if err != nil { return biome.Environment{}, fmt.Errorf("download ruby-build plugin: %w", err) } } + + buildEnv := map[string]string{"RBENV_ROOT": rbenvDir} + // Special bits for older Ruby on M1 + if desc.OS == "darwin" && desc.Arch == "arm64" { + log.Debugf(ctx, "Setting RUBY_CFLAGS=-DUSE_FFI_CLOSURE_ALLOC to support Apple M1 with older Ruby versions") + buildEnv["RUBY_CFLAGS"] = "-DUSE_FFI_CLOSURE_ALLOC" + } err := sys.Biome.Run(ctx, &biome.Invocation{ Argv: []string{"rbenv", "install", spec.Version()}, Env: biome.Environment{ - Vars: map[string]string{"RBENV_ROOT": rbenvDir}, + Vars: buildEnv, PrependPath: []string{ sys.Biome.JoinPath(rbenvDir, "bin"), }, From 4a4e5c64523e2e79f7836b82016dd0d9d4dffeaa Mon Sep 17 00:00:00 2001 From: Ross Light Date: Fri, 28 May 2021 10:02:58 -0700 Subject: [PATCH 2/2] Use biome constants in logic check --- internal/biome/biome.go | 1 + internal/buildpack/ruby.go | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/internal/biome/biome.go b/internal/biome/biome.go index 2326006d..3c95ac5a 100644 --- a/internal/biome/biome.go +++ b/internal/biome/biome.go @@ -89,6 +89,7 @@ const ( const ( Intel64 = "amd64" Intel32 = "386" + ARM64 = "arm64" ) // Dirs holds paths to special directories in a Context. diff --git a/internal/buildpack/ruby.go b/internal/buildpack/ruby.go index 3917884c..907efc17 100644 --- a/internal/buildpack/ruby.go +++ b/internal/buildpack/ruby.go @@ -92,12 +92,12 @@ func installRuby(ctx context.Context, sys Sys, spec yb.BuildpackSpec) (biome.Env } } - buildEnv := map[string]string{"RBENV_ROOT": rbenvDir} - // Special bits for older Ruby on M1 - if desc.OS == "darwin" && desc.Arch == "arm64" { - log.Debugf(ctx, "Setting RUBY_CFLAGS=-DUSE_FFI_CLOSURE_ALLOC to support Apple M1 with older Ruby versions") - buildEnv["RUBY_CFLAGS"] = "-DUSE_FFI_CLOSURE_ALLOC" - } + buildEnv := map[string]string{"RBENV_ROOT": rbenvDir} + // Special bits for older Ruby on M1 + if desc.OS == biome.MacOS && desc.Arch == biome.ARM64 { + log.Debugf(ctx, "Setting RUBY_CFLAGS=-DUSE_FFI_CLOSURE_ALLOC to support Apple M1 with older Ruby versions") + buildEnv["RUBY_CFLAGS"] = "-DUSE_FFI_CLOSURE_ALLOC" + } err := sys.Biome.Run(ctx, &biome.Invocation{ Argv: []string{"rbenv", "install", spec.Version()}, Env: biome.Environment{