rb_sys 0.9.19 → 0.9.22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/rb_sys/cargo_builder.rb +2 -1
- data/lib/rb_sys/mkmf/config.rb +33 -0
- data/lib/rb_sys/mkmf.rb +54 -6
- data/lib/rb_sys/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +3 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63ba0fbfb3a21414b8e379d92abf8cf37ca5b310e57360d57d42d10a1aa42b22
|
4
|
+
data.tar.gz: 54ab9824e5902fbe11416cd8be8529fb90f9129412bbe916b5195270ca54fb9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 523f540fdbfabed2e6988871ec2bd4f2d97a20c5ab0c39a8b10181dacff50a6c32cfcfaafe1335d6f4d5454458201feb20df7fb2fc14f6a28a8b9df7c077b1c8
|
7
|
+
data.tar.gz: a49dc910f814519fc42d37c08ba3ce52729b90ca47bc08a1f48f9edba26e54c7bcfe234ce952b80c0a2a8a88f82565bfc7784f9ee067e92b3bbade2cc7bda4dc
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/rb_sys/cargo_builder.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module RbSys
|
2
2
|
class CargoBuilder < Gem::Ext::Builder
|
3
|
-
attr_accessor :spec, :runner, :profile, :env, :features, :target, :extra_rustc_args, :dry_run, :ext_dir
|
3
|
+
attr_accessor :spec, :runner, :profile, :env, :features, :target, :extra_rustc_args, :dry_run, :ext_dir, :extra_rustflags
|
4
4
|
|
5
5
|
def initialize(spec)
|
6
6
|
require "rubygems/command"
|
@@ -15,6 +15,7 @@ module RbSys
|
|
15
15
|
@extra_rustc_args = []
|
16
16
|
@dry_run = true
|
17
17
|
@ext_dir = nil
|
18
|
+
@extra_rustflags = []
|
18
19
|
end
|
19
20
|
|
20
21
|
def build(_extension, dest_path, results, args = [], lib_dir = nil, cargo_dir = Dir.pwd)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# Root module
|
2
|
+
module RbSys
|
3
|
+
# Helper class for creating Rust Makefiles
|
4
|
+
module Mkmf
|
5
|
+
# Config that delegates to CargoBuilder if needded
|
6
|
+
class Config
|
7
|
+
attr_accessor :force_install_rust_toolchain, :clean_after_install
|
8
|
+
|
9
|
+
def initialize(builder)
|
10
|
+
@builder = builder
|
11
|
+
@force_install_rust_toolchain = false
|
12
|
+
@clean_after_install = rubygems_invoked?
|
13
|
+
end
|
14
|
+
|
15
|
+
def method_missing(name, *args, &blk)
|
16
|
+
@builder.send(name, *args, &blk)
|
17
|
+
end
|
18
|
+
|
19
|
+
def respond_to_missing?(name, include_private = false)
|
20
|
+
@builder.respond_to?(name) || super
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
# Seems to be the only way to reliably know if we were invoked by Rubygems.
|
26
|
+
# We want to know this so we can cleanup the target directory after an
|
27
|
+
# install, to remove bloat.
|
28
|
+
def rubygems_invoked?
|
29
|
+
ENV.key?("SOURCE_DATE_EPOCH")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/rb_sys/mkmf.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
require "rubygems/ext"
|
4
4
|
require "shellwords"
|
5
5
|
require_relative "cargo_builder"
|
6
|
+
require_relative "mkmf/config"
|
6
7
|
|
7
8
|
# Root module
|
8
9
|
module RbSys
|
@@ -37,7 +38,8 @@ module RbSys
|
|
37
38
|
end
|
38
39
|
|
39
40
|
spec = Struct.new(:name, :metadata).new(target, {})
|
40
|
-
|
41
|
+
cargo_builder = CargoBuilder.new(spec)
|
42
|
+
builder = Config.new(cargo_builder)
|
41
43
|
|
42
44
|
yield builder if blk
|
43
45
|
|
@@ -48,6 +50,7 @@ module RbSys
|
|
48
50
|
|
49
51
|
# rubocop:disable Style/GlobalVars
|
50
52
|
make_install = +<<~MAKE
|
53
|
+
RB_SYS_BUILD_DIR ?= #{File.join(Dir.pwd, ".rb-sys")}
|
51
54
|
CARGO ?= cargo
|
52
55
|
CARGO_BUILD_TARGET ?= #{builder.target}
|
53
56
|
SOEXT ?= #{builder.so_ext}
|
@@ -59,6 +62,7 @@ module RbSys
|
|
59
62
|
|
60
63
|
RB_SYS_CARGO_PROFILE ?= #{builder.profile}
|
61
64
|
RB_SYS_CARGO_FEATURES ?= #{builder.features.join(",")}
|
65
|
+
RB_SYS_EXTRA_RUSTFLAGS ?= #{builder.extra_rustflags.join(" ")}
|
62
66
|
|
63
67
|
# Set dirname for the profile, since the profiles do not directly map to target dir (i.e. dev -> debug)
|
64
68
|
ifeq ($(RB_SYS_CARGO_PROFILE),dev)
|
@@ -84,14 +88,14 @@ module RbSys
|
|
84
88
|
target_prefix = #{target_prefix}
|
85
89
|
TARGET_NAME = #{target[/\A\w+/]}
|
86
90
|
TARGET_ENTRY = #{RbConfig::CONFIG["EXPORT_PREFIX"]}Init_$(TARGET_NAME)
|
87
|
-
CLEANLIBS = $(RUSTLIB)
|
91
|
+
CLEANLIBS = $(RUSTLIB)
|
88
92
|
RUBYARCHDIR = $(sitearchdir)$(target_prefix)
|
89
93
|
TARGET = #{target}
|
90
94
|
DLLIB = $(TARGET).#{RbConfig::CONFIG["DLEXT"]}
|
91
95
|
TARGET_DIR = #{Dir.pwd}/$(RB_SYS_CARGO_BUILD_TARGET_DIR)/$(RB_SYS_CARGO_PROFILE_DIR)
|
92
96
|
RUSTLIB = $(TARGET_DIR)/$(SOEXT_PREFIX)$(TARGET_NAME).$(SOEXT)
|
93
97
|
|
94
|
-
|
98
|
+
CLEANOBJS = $(TARGET_DIR)/.fingerprint $(TARGET_DIR)/incremental $(TARGET_DIR)/examples $(TARGET_DIR)/deps $(TARGET_DIR)/build $(TARGET_DIR)/.cargo-lock $(TARGET_DIR)/*.d $(RB_SYS_BUILD_DIR)
|
95
99
|
DEFFILE = $(TARGET_DIR)/$(TARGET)-$(arch).def
|
96
100
|
#{base_makefile(srcdir)}
|
97
101
|
|
@@ -100,6 +104,7 @@ module RbSys
|
|
100
104
|
endif
|
101
105
|
|
102
106
|
#{env_vars(builder)}
|
107
|
+
$(DLLIB): export RUSTFLAGS := $(RUSTFLAGS) $(RB_SYS_EXTRA_RUSTFLAGS)
|
103
108
|
|
104
109
|
FORCE: ;
|
105
110
|
|
@@ -111,16 +116,20 @@ module RbSys
|
|
111
116
|
\t$(ECHO) generating $(@)
|
112
117
|
\t$(Q) ($(COPY) $(srcdir)/$(TARGET).def $@ 2> /dev/null) || (echo EXPORTS && echo $(TARGET_ENTRY)) > $@
|
113
118
|
|
119
|
+
#{optional_rust_toolchain(builder)}
|
120
|
+
|
114
121
|
$(DLLIB): $(DEFFILE) FORCE
|
115
122
|
\t$(ECHO) generating $(@) \\("$(RB_SYS_CARGO_PROFILE)"\\)
|
116
123
|
\t$(Q) #{full_cargo_command}
|
117
124
|
\t$(Q) $(COPY) "$(RUSTLIB)" $@
|
118
125
|
|
119
|
-
install: $(DLLIB) Makefile
|
126
|
+
install-so: $(DLLIB) Makefile
|
120
127
|
\t$(ECHO) installing $(DLLIB)
|
121
128
|
\t$(Q) $(MAKEDIRS) $(RUBYARCHDIR)
|
122
129
|
\t$(Q) $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
|
123
130
|
|
131
|
+
install: #{builder.clean_after_install ? "install-so realclean" : "install-so"}
|
132
|
+
|
124
133
|
all: #{$extout ? "install" : "$(DLLIB)"}
|
125
134
|
MAKE
|
126
135
|
|
@@ -134,8 +143,7 @@ module RbSys
|
|
134
143
|
|
135
144
|
def base_makefile(cargo_dir)
|
136
145
|
base_makefile = dummy_makefile(__dir__).join("\n")
|
137
|
-
base_makefile.gsub!("all install static install-so install-rb", "all static install-
|
138
|
-
base_makefile.gsub!("clean-so::", "clean-so:\n\t-$(Q)$(RM) $(DLLIB)\n")
|
146
|
+
base_makefile.gsub!("all install static install-so install-rb", "all static install-rb")
|
139
147
|
base_makefile.gsub!(/^srcdir = .*$/, "srcdir = #{cargo_dir}")
|
140
148
|
base_makefile
|
141
149
|
end
|
@@ -152,6 +160,7 @@ module RbSys
|
|
152
160
|
def env_vars(builder)
|
153
161
|
lines = builder.build_env.map { |k, v| env_line(k, v) }
|
154
162
|
lines << env_line("CC", env_or_makefile_config("CC"))
|
163
|
+
lines << env_line("CXX", env_or_makefile_config("CXX"))
|
155
164
|
lines << env_line("AR", env_or_makefile_config("AR")) unless env_or_makefile_config("AR") == "libtool -static"
|
156
165
|
lines.compact.join("\n")
|
157
166
|
end
|
@@ -173,6 +182,45 @@ module RbSys
|
|
173
182
|
cargo_command.gsub!(%r{/#{target_dir}/[^/]+}, "/$(RB_SYS_CARGO_BUILD_TARGET_DIR)/$(RB_SYS_CARGO_PROFILE_DIR)")
|
174
183
|
cargo_command
|
175
184
|
end
|
185
|
+
|
186
|
+
def optional_rust_toolchain(builder)
|
187
|
+
<<~MAKE
|
188
|
+
RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN ?= #{builder.force_install_rust_toolchain}
|
189
|
+
|
190
|
+
# Only run if the we are told to explicitly install the Rust toolchain
|
191
|
+
ifneq ($(RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN),false)
|
192
|
+
RB_SYS_RUSTUP_PROFILE ?= minimal
|
193
|
+
|
194
|
+
# If the user passed true, we assume stable Rust. Otherwise, use what
|
195
|
+
# was specified (i.e. RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN=beta)
|
196
|
+
ifeq ($(RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN),true)
|
197
|
+
RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN = stable
|
198
|
+
endif
|
199
|
+
|
200
|
+
# If a $RUST_TARGET is specified (i.e. for rake-compiler-dock), append
|
201
|
+
# that to the profile.
|
202
|
+
ifeq ($(RUST_TARGET),)
|
203
|
+
RB_SYS_DEFAULT_TOOLCHAIN = $(RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN)
|
204
|
+
else
|
205
|
+
RB_SYS_DEFAULT_TOOLCHAIN = $(RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN)-$(RUST_TARGET)
|
206
|
+
endif
|
207
|
+
|
208
|
+
export CARGO_HOME ?= $(RB_SYS_BUILD_DIR)/$(RB_SYS_DEFAULT_TOOLCHAIN)/cargo
|
209
|
+
export RUSTUP_HOME ?= $(RB_SYS_BUILD_DIR)/$(RB_SYS_DEFAULT_TOOLCHAIN)/rustup
|
210
|
+
export PATH := $(CARGO_HOME)/bin:$(RUSTUP_HOME)/bin:$(PATH)
|
211
|
+
export RUSTUP_TOOLCHAIN := $(RB_SYS_DEFAULT_TOOLCHAIN)
|
212
|
+
export CARGO := $(CARGO_HOME)/bin/cargo
|
213
|
+
|
214
|
+
$(CARGO):
|
215
|
+
\t$(Q) $(MAKEDIRS) $(CARGO_HOME) $(RUSTUP_HOME)
|
216
|
+
\tcurl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused -fsSL "https://sh.rustup.rs" | sh -s -- --default-toolchain none -y
|
217
|
+
\trustup toolchain install $(RB_SYS_DEFAULT_TOOLCHAIN) --profile $(RB_SYS_RUSTUP_PROFILE)
|
218
|
+
\trustup default $(RB_SYS_DEFAULT_TOOLCHAIN)
|
219
|
+
|
220
|
+
$(DLLIB): $(CARGO)
|
221
|
+
endif
|
222
|
+
MAKE
|
223
|
+
end
|
176
224
|
end
|
177
225
|
end
|
178
226
|
|
data/lib/rb_sys/version.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rb_sys
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian Ker-Seymer
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
Rl+ASkq2/1i07TkBpCf+2hq66+h/hx+/Y/KrUzXfe0jtvil0WESkJT2kqRqHWNhD
|
31
31
|
9GKBxaQlXokNDtWCm1/gl6cD8WRZ0N5S4ZGJT1FLLsA=
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2022-07-
|
33
|
+
date: 2022-07-19 00:00:00.000000000 Z
|
34
34
|
dependencies: []
|
35
35
|
description:
|
36
36
|
email:
|
@@ -46,6 +46,7 @@ files:
|
|
46
46
|
- lib/rb_sys/cargo_builder.rb
|
47
47
|
- lib/rb_sys/cargo_builder/link_flag_converter.rb
|
48
48
|
- lib/rb_sys/mkmf.rb
|
49
|
+
- lib/rb_sys/mkmf/config.rb
|
49
50
|
- lib/rb_sys/version.rb
|
50
51
|
- sig/rb_sys.rbs
|
51
52
|
homepage: https://github.com/oxidize-rb/rb-sys
|
metadata.gz.sig
CHANGED
Binary file
|