Current section
Files
Jump to
Current section
Files
lib/mix/tasks/firebird.target.status.ex
defmodule Mix.Tasks.Firebird.Target.Status do
@moduledoc """
Show the status of the WASM compilation target.
Displays discovered sources, compiled artifacts, configuration,
and prerequisite status.
## Usage
mix firebird.target.status
mix firebird.target.status --json
"""
use Mix.Task
@shortdoc "Show WASM target compilation status"
@switches [
output: :string,
dirs: :string,
json: :boolean
]
@impl Mix.Task
def run(args) do
{opts, _rest, _invalid} = OptionParser.parse(args, switches: @switches)
config = Firebird.Target.Config.from_mix_project()
config =
case Keyword.get(opts, :output) do
nil -> config
dir -> %{config | output_dir: dir}
end
config =
case Keyword.get(opts, :dirs) do
nil -> config
dirs -> %{config | sources: String.split(dirs, ",", trim: true)}
end
status = Firebird.Target.status(config)
if Keyword.get(opts, :json, false) do
Mix.shell().info(Jason.encode!(status, pretty: true))
else
print_status(status)
end
:ok
end
defp print_status(status) do
Mix.shell().info("π₯ Firebird WASM Target Status")
Mix.shell().info("")
# Prerequisites
prereqs = status.prerequisites
Mix.shell().info(" Prerequisites:")
Mix.shell().info(
" wat2wasm: #{if prereqs.wat2wasm, do: "β
installed", else: "β not found"}"
)
Mix.shell().info(" Elixir: #{prereqs.elixir_version}")
Mix.shell().info(" OTP: #{prereqs.otp_version}")
Mix.shell().info("")
# Sources
Mix.shell().info(" Sources: #{status.sources} file(s)")
Enum.each(status.source_files, fn f ->
Mix.shell().info(" π #{f}")
end)
Mix.shell().info("")
# Artifacts
artifacts = status.artifacts
Mix.shell().info(" Output: #{status.output_dir}/")
Mix.shell().info(" WAT files: #{artifacts.wat_count}")
Mix.shell().info(" WASM files: #{artifacts.wasm_count}")
Mix.shell().info("")
# Config
config = status.config
Mix.shell().info(" Configuration:")
Mix.shell().info(" optimize: #{config.optimize}")
Mix.shell().info(" tco: #{config.tco}")
Mix.shell().info(" inline: #{config.inline}")
Mix.shell().info(" wat_only: #{config.wat_only}")
Mix.shell().info(" source_map: #{config.source_map}")
end
end