Skip to content

Commit 6f5030e

Browse files
authored
Generate .cargo/config (#192)
1 parent 35ef324 commit 6f5030e

File tree

20 files changed

+53
-28
lines changed

20 files changed

+53
-28
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
members = [
33
"rustler",
44
"rustler_codegen",
5-
"rustler_tests"
5+
"rustler_tests/native/rustler_test",
66
]

rustler_mix/lib/mix/tasks/compile.rustler.ex

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
defmodule Mix.Tasks.Compile.Rustler do
22
use Mix.Task
3+
require Logger
34

45
alias Rustler.Compiler.{Messages, Rustup}
56

@@ -51,7 +52,7 @@ defmodule Mix.Tasks.Compile.Rustler do
5152
|> make_no_default_features_flag(Keyword.get(config, :default_features, true))
5253
|> make_features_flag(Keyword.get(config, :features, []))
5354
|> make_build_mode_flag(build_mode)
54-
|> make_platform_hacks(output_type, :os.type())
55+
|> make_platform_hacks(crate_full_path, output_type, :os.type())
5556

5657
[cmd_bin | args] = compile_command
5758

@@ -93,11 +94,44 @@ defmodule Mix.Tasks.Compile.Rustler do
9394
["rustup", "run", version, "cargo", "rustc"]
9495
end
9596

96-
defp make_platform_hacks(args, :lib, {:unix, :darwin}) do
97-
# Fix for https://github.com/hansihe/Rustler/issues/12
98-
args ++ ["--", "--codegen", "link-args=-flat_namespace -undefined suppress"]
97+
defp make_platform_hacks(args, crate_path, :lib, {:unix, :darwin}) do
98+
path = Path.join([crate_path, ".cargo", "config"])
99+
100+
if File.exists?(path) do
101+
args
102+
else
103+
IO.write([
104+
"\n",
105+
IO.ANSI.yellow(),
106+
"""
107+
Compiling on macOS requires special link args in order to compile
108+
correctly.
109+
110+
Rustler is currently working around this issue in the compiler task.
111+
This will be removed in v1.0.0 in favor of a user supplied .cargo/config
112+
file.
113+
114+
To remove this warning, please create #{path}
115+
with the following content:
116+
117+
[target.x86_64-apple-darwin]
118+
rustflags = [
119+
"-C", "link-arg=-undefined",
120+
"-C", "link-arg=dynamic_lookup",
121+
]
122+
123+
See https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/MachOTopics/1-Articles/executing_files.html
124+
for more details.
125+
126+
""",
127+
IO.ANSI.default_color(),
128+
"\n"
129+
])
130+
131+
args ++ ["--", "-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup"]
132+
end
99133
end
100-
defp make_platform_hacks(args, _, _), do: args
134+
defp make_platform_hacks(args, _, _, _), do: args
101135

102136
defp make_no_default_features_flag(args, true), do: args ++ []
103137
defp make_no_default_features_flag(args, false), do: args ++ ["--no-default-features"]

rustler_mix/lib/mix/tasks/rustler.new.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ defmodule Mix.Tasks.Rustler.New do
1111
"""
1212

1313
@basic [
14+
{:eex, "basic/.cargo/config", ".cargo/config"},
1415
{:eex, "basic/README.md", "README.md"},
1516
{:eex, "basic/Cargo.toml.eex", "Cargo.toml"},
1617
{:eex, "basic/src/lib.rs", "src/lib.rs"},
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[target.x86_64-apple-darwin]
2+
rustflags = [
3+
"-C", "link-arg=-undefined",
4+
"-C", "link-arg=dynamic_lookup",
5+
]

rustler_mix/test/rustler_mix_test.exs

Lines changed: 0 additions & 8 deletions
This file was deleted.

rustler_tests/mix.exs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ defmodule RustlerTest.Mixfile do
55
[app: :rustler_test,
66
version: "0.0.1",
77
elixir: "~> 1.2",
8-
build_embedded: Mix.env == :prod,
9-
start_permanent: Mix.env == :prod,
10-
compilers: [:rustler] ++ Mix.compilers,
11-
rustler_crates: rustler_crates(),
8+
build_embedded: Mix.env() == :prod,
9+
start_permanent: Mix.env() == :prod,
10+
compilers: [:rustler] ++ Mix.compilers(),
11+
rustler_crates: [rustler_test: [mode: :debug]],
1212
deps: deps()]
1313
end
1414

@@ -19,11 +19,4 @@ defmodule RustlerTest.Mixfile do
1919
defp deps do
2020
[{:rustler, path: "../rustler_mix"}]
2121
end
22-
23-
defp rustler_crates do
24-
[rustler_test: [
25-
path: ".",
26-
mode: :debug,
27-
]]
28-
end
2922
end

rustler_tests/Cargo.toml renamed to rustler_tests/native/rustler_test/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ path = "src/lib.rs"
99
crate-type = ["cdylib"]
1010

1111
[dependencies]
12-
lazy_static = "1.0"
13-
rustler = { path = "../rustler" }
14-
rustler_codegen = { path = "../rustler_codegen" }
12+
lazy_static = "1.2"
13+
rustler = { path = "../../../rustler" }
14+
rustler_codegen = { path = "../../../rustler_codegen" }

0 commit comments

Comments
 (0)