defmodule ExZstd.MixProject do use Mix.Project @source_url "https://gitlab.com/chrooti/ex_zstd" def project do [ app: :ex_zstd, deps: deps(Mix.env()), elixir: "~> 1.7", version: "0.4.0", package: package(), compilers: compilers(), source_url: @source_url, description: description(), build_embedded: Mix.env() == :prod, start_permanent: Mix.env() == :prod, aliases: aliases(), dialyzer: dialyzer() ] end defp deps(_), do: [ {:ex_doc, ">= 0.0.0", only: [:dev], runtime: false}, {:credo, "~> 1.6", only: [:dev, :test], runtime: false}, {:dialyxir, "~> 1.0", only: [:dev, :test], runtime: false} ] defp package, do: [ name: "ex_zstd_reloaded", files: [ "lib", ".formatter.exs", "mix.exs", "README.md", "LICENSE", "c_src", "Makefile", "vendor/zstd.tar.gz" ], links: %{"Gitlab" => @source_url}, licenses: ["MIT"] ] defp compilers, do: [ :nif_ex_zstd, :elixir, :app ] defp description, do: "Elixir bindings to the Zstandard library" defp aliases, do: [ check: [ "format --check-formatted", "credo", "dialyzer" ] ] defp dialyzer(), do: [ plt_add_deps: :app_tree, flags: [ :missing_return, :unknown, :unmatched_returns, :overspecs ] ] end defmodule Mix.Tasks.Compile.NifExZstd do def run(_args) do {nproc, 0} = System.cmd("nproc", []) nproc = String.trim_trailing(nproc, "\n") erlang_dir = :code.root_dir() {_, 0} = System.cmd("make", ["ERLANGDIR=#{erlang_dir}", "--jobs=#{nproc}"]) [Mix.Project.build_path(), "lib/ex_zstd/priv"] |> Path.join() |> tap(&File.mkdir_p!/1) |> then(&File.cp!("priv/c_out/ex_zstd_nif.so", "#{&1}/ex_zstd_nif.so")) :ok end def clean() do {_, 0} = System.cmd("make", ["clean-all"]) end end