Skip to content

Commit

Permalink
Moved to separate repository
Browse files Browse the repository at this point in the history
  • Loading branch information
xero-lib committed Jan 26, 2021
0 parents commit 2bf962d
Show file tree
Hide file tree
Showing 7 changed files with 130 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .formatter.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Used by "mix format"
[
inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"]
]
27 changes: 27 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# The directory Mix will write compiled artifacts to.
/_build/

# If you run "mix test --cover", coverage assets end up here.
/cover/

# The directory Mix downloads your dependencies sources to.
/deps/

# Where third-party dependencies like ExDoc output generated docs.
/doc/

# Ignore .fetch files in case you like to edit your project deps locally.
/.fetch

# If the VM crashes, it generates a dump, let's ignore it too.
erl_crash.dump

# Also ignore archive artifacts (built via "mix archive.build").
*.ez

# Ignore package tarball (built via "mix hex.build").
rust2ex-*.tar


# Temporary files for e.g. tests
/tmp
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Rust2ex
Compiles Rust packages in `native`, installs to `_build`.

## Uses
Particularly suited for Elixir-Rust ports.

## Installation
```elixir
def project do
[
compilers: [:rust2ex] ++ Mix.compilers,
]
end
```

Run `mix compile` then `mix compile.rust2ex`.
41 changes: 41 additions & 0 deletions lib/rust2ex.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
defmodule Mix.Tasks.Compile.Rust2ex do
use Mix.Task
@moduledoc "Compiles Rust packages in `native`, installs to `_build`"

defp compile_dep(where) do
IO.puts(where)
{_, code} = System.cmd("cargo", ["build", "--manifest-path", where])

case code do
0 ->
System.cmd("cargo", [
"install",
"--path",
Path.dirname(where),
"--root",
Path.join(["_build", to_string(Mix.env()), "native"]),
if(Mix.env() == :prod, do: "", else: "--debug")
])

:ok

fail ->
{:error, fail}
end
end

@spec run(any) :: :error | :ok
def run(_args) do
IO.puts("Running rust2ex")
oks = Path.wildcard(Path.join(["native", "*", "Cargo.toml"])) |> Enum.map(&compile_dep/1)

cond do
oks |> Enum.all?(fn x -> x == :ok end) ->
IO.puts(["Rust2ex completed with", length(oks), "Rust packages"] |> Enum.join(" "))
:ok

true ->
:error
end
end
end
33 changes: 33 additions & 0 deletions mix.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
defmodule Rust2ex.MixProject do
use Mix.Project

def project do
[
app: :rust2ex,
version: "0.1.0",
build_path: "../../_build",
config_path: "../../config/config.exs",
deps_path: "../../deps",
lockfile: "../../mix.lock",
elixir: "~> 1.11",
start_permanent: Mix.env() == :prod,
deps: deps()
]
end

# Run "mix help compile.app" to learn about applications.
def application do
[
extra_applications: [:logger]
]
end

# Run "mix help deps" to learn about dependencies.
defp deps do
[
# {:dep_from_hexpm, "~> 0.3.0"},
# {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"},
# {:sibling_app_in_umbrella, in_umbrella: true}
]
end
end
8 changes: 8 additions & 0 deletions test/rust2ex_test.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
defmodule Rust2exTest do
use ExUnit.Case
doctest Rust2ex

test "greets the world" do
assert Rust2ex.hello() == :world
end
end
1 change: 1 addition & 0 deletions test/test_helper.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ExUnit.start()

0 comments on commit 2bf962d

Please sign in to comment.