defmodule Burrito.Steps.Fetch.ResolveERTS do
alias Burrito.Builder.Context
alias Burrito.Builder.Log
alias Burrito.Builder.Target
alias Burrito.Builder.Step
alias Burrito.Util.ERTSResolver
@behaviour Step
# A list of the pre-compiled ERTS builds we provide
@pre_compiled_supported_tuples [
{:windows, :x86_64},
{:darwin, :x86_64},
{:darwin, :aarch64},
{:linux, :x86_64},
{:linux, :aarch64}
]
@impl Step
def execute(%Context{} = context) do
if !pass_precompile_check?(context.target) do
Log.error(
:step,
"We currently do not provide a pre-compiled ERTS release for your target's requested architecture and OS!"
)
%Context{context | halted: true}
else
Log.info(:step, "Resolving ERTS: #{inspect(context.target.erts_source)}")
resolved_erts_target = ERTSResolver.resolve(context.target)
case resolved_erts_target.erts_source do
{:unresolved, _} ->
Log.error(:step, "Cannot resolve ERTS, please check for errors in the log above.")
%Context{context | halted: true}
_ ->
%Context{context | target: resolved_erts_target}
end
end
end
defp pass_precompile_check?(%Target{erts_source: {:precompiled, _}} = target) do
{target.os, target.cpu} in @pre_compiled_supported_tuples
end
defp pass_precompile_check?(_) do
true
end
end