Current section
Files
Jump to
Current section
Files
ex_zstd_reloaded
mix.exs
mix.exs
defmodule ExZstd.MixProject do
use Mix.Project
@source_url "https://gitlab.com/chrooti/ex_zstd"
def project do
[
app: :ex_zstd,
deps: deps(),
elixir: "~> 1.7",
version: "0.5.3",
package: package(),
compilers: compilers(),
description: description(),
build_embedded: Mix.env() == :prod,
start_permanent: Mix.env() == :prod,
aliases: aliases(),
dialyzer: dialyzer(),
# Docs
source_url: @source_url,
docs: [
source_ref: "master"
]
]
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: [
"c_src",
"lib",
"vendor/zstd.tar.gz",
".formatter.exs",
"mix.exs",
"LICENSE",
"Makefile",
"README.md"
],
links: %{"Gitlab" => @source_url},
licenses: ["MIT"]
]
defp compilers,
do: [
:ex_zstd,
:elixir,
:app
]
defp description,
do: "Elixir bindings to the Zstandard library"
defp aliases,
do: [
check: [
"compile --warnings-as-errors",
"format --check-formatted",
"credo --strict",
"dialyzer"
],
"deps.update.all": ["deps.unlock --all", "deps.update --all"],
"deps.clean.unused": "deps.clean --unlock --unused"
]
defp dialyzer(),
do: [
ignore_warnings: ".dialyzer_ignore.exs",
list_unused_filters: true,
plt_add_deps: :app_tree,
flags: [
# https://www.erlang.org/doc/man/dialyzer.html#warning_options
:error_handling,
:underspecs,
:unknown,
:extra_return,
:missing_return
]
]
end
defmodule Mix.Tasks.Compile.ExZstd do
@moduledoc """
Compiles the Nif in the ExZstd library.
"""
use Mix.Task.Compiler
@impl true
def run(_args) do
cpus = :erlang.system_info(:logical_processors_available)
{_, 0} =
System.cmd("make", [
"--jobs=#{cpus}"
])
[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
@impl true
def clean do
{_, 0} = System.cmd("make", ["really-clean"])
end
end