Packages
nerves
1.3.4
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/system/br.ex
defmodule Nerves.System.BR do
use Nerves.Package.Platform
alias Nerves.Artifact
import Mix.Nerves.Utils
@doc """
Called as the last step of bootstrapping the Nerves env.
"""
def bootstrap(%{path: path}) do
path
|> Path.join("nerves_env.exs")
|> Code.require_file()
end
@doc """
Build the artifact
"""
def build(pkg, toolchain, opts) do
{_, type} = :os.type()
make(type, pkg, toolchain, opts)
end
@doc """
Return the location in the build path to where the global artifact is linked.
"""
def build_path_link(pkg) do
Artifact.build_path(pkg)
end
@doc """
Clean up all the build files
"""
def clean(pkg) do
Artifact.Cache.delete(pkg)
Artifact.build_path(pkg)
|> File.rm_rf()
Nerves.Env.package(:nerves_system_br)
|> Map.get(:path)
|> Path.join("buildroot*")
|> Path.wildcard()
|> Enum.each(&File.rm_rf(&1))
end
@doc """
Create an archive of the artifact
"""
def archive(pkg, toolchain, opts) do
{_, type} = :os.type()
make_archive(type, pkg, toolchain, opts)
end
defp make(:linux, pkg, _toolchain, opts) do
System.delete_env("BINDIR")
dest = Artifact.build_path(pkg)
script = Path.join(Nerves.Env.package(:nerves_system_br).path, "create-build.sh")
platform_config = pkg.config[:platform_config][:defconfig]
defconfig = Path.join("#{pkg.path}", platform_config)
shell(script, [defconfig, dest])
{:ok, pid} = Nerves.Utils.Stream.start_link(file: "build.log")
stream = IO.stream(pid, :line)
make_args = Keyword.get(opts, :make_args, [])
case shell("make", make_args, cd: dest, stream: stream) do
{_, 0} -> {:ok, dest}
{_error, _} -> {:error, Nerves.Utils.Stream.history(pid)}
end
end
defp make(type, _pkg, _toolchain, _opts) do
error_host_os(type)
end
defp make_archive(:linux, pkg, _toolchain, _opts) do
name = Artifact.download_name(pkg)
dest = Artifact.build_path(pkg)
{:ok, pid} = Nerves.Utils.Stream.start_link(file: "archive.log")
stream = IO.stream(pid, :line)
case shell("make", ["system", "NERVES_ARTIFACT_NAME=#{name}"], cd: dest, stream: stream) do
{_, 0} -> {:ok, Path.join(dest, name <> Artifact.ext(pkg))}
{_error, _} -> {:error, Nerves.Utils.Stream.history(pid)}
end
end
defp make_archive(type, _pkg, _toolchain, _opts) do
error_host_os(type)
end
defp error_host_os(type) do
{:error,
"""
Local build_runner is not available for host system: #{type}
Please use the Docker build_runner to build this package artifact
"""}
end
end