defmodule Nx.Vulkan.MixProject do
use Mix.Project
@version "0.1.0"
@source_url "https://github.com/borodark/nx_vulkan"
def project do
[
app: :nx_vulkan,
version: @version,
elixir: "~> 1.17",
start_permanent: Mix.env() == :prod,
deps: deps(),
dialyzer: [plt_add_apps: [:nx], ignore_warnings: ".dialyzer_ignore.exs"],
description: description(),
package: package(),
source_url: @source_url,
docs: docs()
]
end
defp description do
"GPU tensor backend for Nx via Vulkan compute. Pure-Rust path (vulkano) plus C++ spirit path. Validated on Axon training, Scholar linear regression, and the eXMC NUTS sampler. Works on Linux + FreeBSD NVIDIA where CUDA does not exist."
end
defp docs do
[
main: "readme",
extras: [
"README.md",
"CHANGELOG.md",
"docs/VULKANO_BACKEND_ROADMAP.md"
]
]
end
def application do
[extra_applications: [:logger]]
end
defp deps do
[
{:nx, "~> 0.10"},
# The NIF — bound to spirit's Vulkan compute backend via a small
# extern "C" shim. Rustler manages NIF resource lifetimes so
# tensor handles get freed when their Elixir reference is GC'd.
# Pin to 0.36; 0.37.3 has a rustler-sys signature mismatch with
# rustc 1.90 (`&self.as_c_arg()` where `self.as_c_arg()` is wanted).
{:rustler, "~> 0.36.0"},
{:ex_doc, "~> 0.31", only: :dev, runtime: false},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}
]
end
defp package do
[
licenses: ["Apache-2.0"],
maintainers: ["Igor Ostaptchenko"],
links: %{
"GitHub" => @source_url,
"Blog: The Backend That Didn't Need to Know" =>
"http://www.dataalienist.com/blog-backend-didnt-need-to-know.html"
},
files:
~w(
lib
native/nx_vulkan_native/Cargo.toml
native/nx_vulkan_native/Cargo.lock
native/nx_vulkan_native/src
native/nx_vulkan_native/build.rs
native/nx_vulkan_vulkano/Cargo.toml
native/nx_vulkan_vulkano/src
c_src
priv/shaders
docs
examples
livebooks
CHANGELOG.md
README.md
LICENSE
mix.exs
.formatter.exs
)
]
end
end