Current section

Files

Jump to
beaver mix.exs
Raw

mix.exs

defmodule Beaver.MixProject do
use Mix.Project
def project do
[
app: :beaver,
version: "0.2.18",
elixir: "~> 1.9",
start_permanent: Mix.env() == :prod,
elixirc_paths: elixirc_paths(Mix.env()),
deps: deps(),
description: description(),
docs: docs(),
package: package(),
compilers: [:cmake] ++ Mix.compilers(),
aliases: aliases(),
preferred_cli_env: [
"test.watch": :test
]
]
end
defp description() do
"Beaver, a MLIR Toolkit in Elixir"
end
defp docs() do
[
main: "Beaver",
extras: [
"guides/your-first-beaver-compiler.livemd"
],
filter_modules: fn m, _meta ->
name = Atom.to_string(m)
not (String.contains?(name, "Beaver.MLIR.Dialect.") ||
String.contains?(name, "Beaver.MLIR.CAPI."))
end,
api_reference: false,
groups_for_modules: [
DSL: [
Beaver,
Beaver.Env,
Beaver.Pattern
],
Walker: [
~r"Beaver.Walker.*"
],
MLIR: [
~r"Beaver.MLIR.*"
],
Native: [
~r"Beaver.Native.*"
]
]
]
end
defp package() do
[
licenses: ["Apache-2.0", "MIT"],
links: %{"GitHub" => "https://github.com/beaver-lodge/beaver"},
files: ~w{
lib .formatter.exs mix.exs README*
native/mlir-zig-src/*.zig
native/mlir-zig-proj/prod/build.zig
native/mlir-zig-proj/dev/build.zig
native/mlir-zig-proj/test/build.zig
native/**/CMakeLists.txt
native/**/*.cmake
native/**/*.h
native/**/*.td
native/**/*.cpp
checksum-*.exs
}
]
end
def application do
[
mod: {Beaver.Application, []},
start_phases: [mlir_register_all_passes: []],
extra_applications: [:logger]
]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp deps do
[
{:llvm_config, "~> 0.1.0"},
{:kinda, "~> 0.2.0"},
{:ex_doc, ">= 0.0.0", only: :dev, runtime: false},
{:mix_test_watch, "~> 1.0", only: [:dev, :test]},
{:credo, "~> 1.6", only: [:dev, :test], runtime: false},
{:gradient, github: "esl/gradient", only: [:dev], runtime: false},
{:doctor, "~> 0.21.0", only: :dev}
]
end
defp aliases do
[
"compile.cmake": &compile_cmake/1,
"beaver.cmake": &beaver_cmake/1
]
end
require Logger
defp do_cmake() do
cmake_project = "native/mlir-c"
build = Path.join(Mix.Project.app_path(), "mlir-c-build")
install = Path.join(Mix.Project.app_path(), "native-install")
Logger.debug("[CMake] running...")
{:ok, llvm_lib_dir} = LLVMConfig.lib_dir()
llvm_cmake_dir = Path.join(llvm_lib_dir, "cmake/llvm")
mlir_cmake_dir = Path.join(llvm_lib_dir, "cmake/mlir")
with {_, 0} <-
System.cmd(
"cmake",
[
"-S",
cmake_project,
"-B",
build,
"-G",
"Ninja",
"-DLLVM_DIR=#{llvm_cmake_dir}",
"-DMLIR_DIR=#{mlir_cmake_dir}",
"-DCMAKE_INSTALL_PREFIX=#{install}"
],
stderr_to_stdout: true
),
{_, 0} <-
System.cmd("cmake", ["--build", build, "--target", "install"], stderr_to_stdout: true) do
Logger.debug("[CMake] installed to #{install}")
:ok
else
{error, _} ->
Logger.info(error)
{:error, [error]}
end
end
@build_cmake Application.compile_env(:beaver, :build_cmake, false)
defp compile_cmake(args) do
if @build_cmake or "--force" in args do
do_cmake()
else
:noop
end
end
defp beaver_cmake(args) do
Mix.Tasks.Deps.Compile.run(args)
:ok = Application.ensure_started(:llvm_config)
Code.ensure_compiled!(LLVMConfig)
do_cmake()
end
end