lib/zig_precompiler.ex

defmodule Kinda.Precompiler do
  @behaviour ElixirMake.Precompiler

  @impl true
  def current_target, do: RustlerPrecompiled.target()

  @impl true
  def all_supported_targets(_), do: ~w(
    aarch64-apple-darwin
    x86_64-unknown-linux-gnu
  )

  @impl true
  def build_native(args) do
    config = Mix.Project.config()
    app = config |> Keyword.fetch!(:app)
    version = Mix.Project.config() |> Keyword.fetch!(:version)
    {:ok, t} = current_target()
    System.put_env("KINDA_LIB_NAME", "#{app}-v#{version}-#{t}")
    ElixirMake.Compiler.compile(args)
  end

  @impl true
  def precompile(args, _target) do
    ElixirMake.Compiler.compile(args)
    :ok
  end
end