Packages
nerves
1.0.1
1.15.0
1.14.3
1.14.2
1.14.1
1.14.0
1.13.2
1.13.1
1.13.0
1.12.0
1.11.3
1.11.2
1.11.1
1.11.0
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.3
1.9.2
retired
1.9.1
1.9.0
1.8.0
1.7.17
1.7.16
1.7.15
1.7.14
retired
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
retired
1.7.1
retired
1.7.0
retired
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.11.0
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.4.0-rc.0
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
Craft and deploy bulletproof embedded software
Current section
Files
Jump to
Current section
Files
lib/nerves/package/platform.ex
defmodule Nerves.Package.Platform do
@moduledoc """
Defines the Nerves package platform behaviour
This behaviour is implemented on a module that would be used to construct
an artifact for a nerves package. Nerves packages are prioritized to be
compiled before any other dependencies, therefore, a package platform
is useful for constructing host tools to be used during the elixir compile
phase.
You can implement both `Nerves.Package.Platform` and `Nerves.Artifact.BuildRunner`
in the same module with the using macro.
Here is a simple example that touches a file in the `Artifact.build_path`
```elixir
defmodule SystemPlatform do
use Nerves.Package.Platform
def bootstrap(_pkg) do
System.put_env("NERVES_BOOTSTRAP_SYSTEM", "1")
:ok
end
def build(pkg, _toolchain, _opts) do
build_path = Artifact.build_path(pkg)
File.rm_rf!(build_path)
File.mkdir_p!(build_path)
build_path
|> Path.join("file")
|> File.touch()
{:ok, build_path}
end
def build_path_link(pkg) do
Artifact.build_path(pkg)
end
def archive(pkg, _toolchain, _opts) do
build_path = Artifact.build_path(pkg)
name = Artifact.download_name(pkg) <> Artifact.ext(pkg)
Nerves.Utils.File.tar(build_path, name)
{:ok, Path.join(File.cwd!, name)}
end
def clean(pkg) do
Artifact.build_path(pkg)
|> File.rm_rf()
end
end
```
"""
@doc """
Bootstrap is called as the final phase of loading the Nerves environment.
It is used typically for setting / unsetting any system environment
variables. For example, if we were building a C cross compiler, we would
use the bootstrap phase to override CC to point to our compiler.
"""
@callback bootstrap(Nerves.Package.t()) :: :ok | {:error, error :: term}
@doc """
Build path link should return the location inside the `Artifact.build_path`
that represents the final artifact. This is used to symlink the global
artifact to the local build_path location.
"""
@callback build_path_link(package :: Nerves.Package.t()) :: build_path_link :: String.t()
defmacro __using__(_) do
quote do
@behaviour Nerves.Artifact.BuildRunner
@behaviour Nerves.Package.Platform
end
end
end