Add documentation and defaults to the NIF compiler

This commit is contained in:
Carlos Martín Nieto
2013-07-26 02:05:07 +02:00
parent bef56fd74c
commit 0d1c0e8f8e

43
mix.exs
View File

@@ -1,5 +1,38 @@
defmodule Mix.Tasks.Compile.Nif do defmodule Mix.Tasks.Compile.Nif do
@shortdoc "Compile a NIF" @moduledoc """
A task to compile C code into a NIF.
To use, define a function in your project called `nif`.
## Configuration
* `:paths` - directories to find source files. Defaults to
`["c_src"]`. Can be configured as:
````
[ptahs: ["c_src", "vendor/src"]]
````
* `:exts` - extensions of the source files. Defaults to `[:c]`, can
be configured as:
```
[exts: [:c, :cpp]]
```
* `:file` - path of the shared object to compile to. Can be configured as:
````
[file: "priv/fancy.so"]
````
* `:flags` - flags to pass to the compiler. Can be configured as:
````
[flags: ["-lfancy", "-DDEBUG"]]
````
"""
def run(_) do def run(_) do
project = Mix.Project.get! project = Mix.Project.get!
@@ -13,9 +46,9 @@ defmodule Mix.Tasks.Compile.Nif do
def do_run(config) do def do_run(config) do
file = Keyword.fetch!(config, :file) file = Keyword.fetch!(config, :file)
paths = Keyword.fetch!(config, :paths) paths = Keyword.get(config, :paths, ["c_src"])
flags = Keyword.get(config, :flags, []) flags = Keyword.get(config, :flags, [])
exts = Keyword.get(config, :exts, [:c, :cpp]) exts = Keyword.get(config, :exts, [:c])
compiler = Keyword.get(config, :compilers, ["cc", "gcc", "clang"]) |> find_compiler compiler = Keyword.get(config, :compilers, ["cc", "gcc", "clang"]) |> find_compiler
# Create the directory (e.g. "priv/") # Create the directory (e.g. "priv/")
@@ -75,9 +108,7 @@ defmodule Geef.Mixfile do
end end
def nif do def nif do
[ paths: ["c_src"], [ file: "priv/geef.so",
exts: [:c],
file: "priv/geef.so",
flags: "-lgit2" ] flags: "-lgit2" ]
end end