Packages
nerves
1.5.3
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/artifact/build_runners/local.ex
defmodule Nerves.Artifact.BuildRunners.Local do
@moduledoc """
Builds an artifact locally.
This build_runner will only function on certain Linux host configurations
"""
alias Nerves.Artifact
alias Nerves.Artifact.BuildRunner
@behaviour BuildRunner
@doc """
Builds an artifact locally.
Opts:
`make_args:` - Extra arguments to be passed to make.
For example:
You can configure the number of parallel jobs that buildroot
can use for execution. This is useful for situations where you may
have a machine with a lot of CPUs but not enough ram.
# mix.exs
defp nerves_package do
[
# ...
build_runner_opts: [make_args: ["PARALLEL_JOBS=8"]],
]
end
"""
@spec build(Nerves.Package.t(), Nerves.Package.t(), term) :: BuildRunner.build_result()
def build(pkg, toolchain, opts) do
pkg.platform.build(pkg, toolchain, opts)
end
@doc """
Builds an artifact locally.
"""
@spec archive(Nerves.Package.t(), Nerves.Package.t(), term) :: BuildRunner.archive_result()
def archive(pkg, toolchain, opts) do
pkg.platform.archive(pkg, toolchain, opts)
end
@doc """
Builds an artifact locally.
"""
@callback clean(package :: Nerves.Package.t()) :: BuildRunner.clean_result()
def clean(pkg) do
pkg.platform.clean(pkg)
end
@doc """
Connect to a system configuration sub-shell
"""
@spec system_shell(Nerves.Package.t()) :: :ok
def system_shell(pkg) do
dest = Artifact.build_path(pkg)
error = """
Could not find bash or sh executable.
Make sure one of them are in your $PATH environment variable
"""
shell = System.find_executable("bash") || System.find_executable("sh") || Mix.raise(error)
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)
initial_input = [
"echo Updating build directory.",
"echo This will take a while if it is the first time...",
"#{script} #{defconfig} #{dest} >/dev/null",
"cd #{dest}"
]
Mix.Nerves.Shell.open(shell, initial_input)
end
end