View Source Nerves.Package.Platform behaviour (nerves v1.11.2)
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
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
Summary
Callbacks
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.
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.
Callbacks
@callback bootstrap(Nerves.Package.t()) :: :ok | {:error, error :: term()}
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 build_path_link(package :: Nerves.Package.t()) :: build_path_link :: String.t()
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.