Packages
nerves
0.3.2
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/mix/tasks/firmware.ex
defmodule Mix.Tasks.Firmware do
use Mix.Task
import Mix.Nerves.Utils
@switches [verbosity: :string]
def run(args) do
preflight
{opts, _, _} = OptionParser.parse(args)
Mix.shell.info "Nerves Firmware Assembler"
config = Mix.Project.config
otp_app = config[:app]
target = config[:target]
verbosity = opts[:verbosity] || "normal"
firmware_config = Application.get_env(:nerves, :firmware)
system_path = System.get_env("NERVES_SYSTEM") || raise """
Environment variable $NERVES_SYSTEM is not set
"""
System.get_env("NERVES_TOOLCHAIN") || raise """
Environment variable $NERVES_TOOLCHAIN is not set
"""
Mix.Task.run "compile", [] # Maybe this should be in there?
Mix.Task.run "release", ["--verbosity=#{verbosity}", "--no-confirm-missing", "--implode"]
rel2fw_path = Path.join(system_path, "scripts/rel2fw.sh")
cmd = "bash #{rel2fw_path}"
rootfs_additions =
case firmware_config[:rootfs_additions] do
nil -> ""
rootfs_additions ->
rfs = File.cwd!
|> Path.join(rootfs_additions)
"-a " <> rfs
end
fwup_conf =
case firmware_config[:fwup_conf] do
nil -> ""
fwup_conf ->
fw_conf = File.cwd!
|> Path.join(fwup_conf)
"-c " <> fw_conf
end
fw = "-f _images/#{target}/#{otp_app}.fw"
output = "rel/#{otp_app}"
[cmd, fwup_conf, rootfs_additions, fw, output]
|> Enum.join(" ")
|> shell
|> result
end
def result(%{status: 0}), do: nil
def result(result), do: Mix.raise """
Nerves encountered an error. #{inspect result}
"""
end