Packages
nerves_system_rpi5_gpu
0.8.0
Nerves System - Raspberry Pi 5 (64-bits with Nvidia GPU support)
Current section
Files
Jump to
Current section
Files
nerves_system_rpi5_gpu
mix.exs
mix.exs
defmodule NervesSystemRpi5Gpu.MixProject do
use Mix.Project
@github_organization "spin42"
@app :nerves_system_rpi5_gpu
@source_url "https://github.com/#{@github_organization}/#{@app}"
@version Path.join(__DIR__, "VERSION")
|> File.read!()
|> String.trim()
def project do
[
app: @app,
version: @version,
# Because we're using OTP 27, we need to enforce Elixir 1.17 or later.
elixir: "~> 1.17",
compilers: Mix.compilers() ++ [:nerves_package],
nerves_package: nerves_package(),
description: description(),
package: package(),
deps: deps(),
aliases: [
loadconfig: [&bootstrap/1],
generate_fwup_conf: &generate_fwup_conf/1
],
docs: docs()
]
end
def application do
[]
end
defp bootstrap(args) do
set_target()
Application.start(:nerves_bootstrap)
Mix.Task.run("loadconfig", args)
end
def cli do
[preferred_envs: %{docs: :docs, "hex.build": :docs, "hex.publish": :docs}]
end
defp nerves_package do
[
type: :system,
artifact_sites: [
{:github_releases, "#{@github_organization}/#{@app}"}
],
build_runner_opts: build_runner_opts(),
platform: Nerves.System.BR,
platform_config: [
defconfig: "nerves_defconfig"
],
# The :env key is an optional experimental feature for adding environment
# variables to the crosscompile environment. These are intended for
# llvm-based tooling that may need more precise processor information.
env: [
{"TARGET_ARCH", "aarch64"},
{"TARGET_CPU", "cortex_a76"},
{"TARGET_OS", "linux"},
{"TARGET_ABI", "gnu"},
{"TARGET_GCC_FLAGS",
"-mabi=lp64 -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096 -fstack-protector-strong -mcpu=cortex-a76 -fPIE -pie -Wl,-z,now -Wl,-z,relro"}
],
checksum: package_files()
]
end
defp deps do
[
{:nerves, "~> 1.11", runtime: false},
{:nerves_system_br, "1.33.0", runtime: false},
{:nerves_toolchain_aarch64_nerves_linux_gnu, "~> 13.2.0", runtime: false},
{:nerves_system_linter, "~> 0.4", only: [:dev, :test], runtime: false},
{:ex_doc, "~> 0.22", only: :docs, runtime: false}
]
end
defp description do
"Nerves System - Raspberry Pi 5 (64-bits with Nvidia GPU support)"
end
defp docs do
[
extras: ["README.md", "CHANGELOG.md"],
main: "readme",
assets: %{"assets" => "./assets"},
source_ref: "v#{@version}",
source_url: @source_url,
skip_undefined_reference_warnings_on: ["CHANGELOG.md"]
]
end
defp package do
[
files: package_files(),
licenses: ["GPL-2.0-only", "GPL-2.0-or-later"],
links: %{
"GitHub" => @source_url,
"REUSE Compliance" =>
"https://api.reuse.software/info/github.com/nerves-project/nerves_system_rpi5"
}
]
end
defp package_files do
[
"fwup_include",
"rootfs_overlay",
"CHANGELOG.md",
"cmdline.txt",
"config.txt",
"fwup-ops.conf",
"fwup.conf.eex",
"fwup.conf",
"LICENSES/*",
"linux-6.12.defconfig",
"mix.exs",
"nerves_defconfig",
"post-build.sh",
"post-createfs.sh",
"ramoops-pi4-overlay.dts",
"README.md",
"REUSE.toml",
"VERSION"
]
end
defp build_runner_opts() do
# Download source files first to get download errors right away.
[make_args: primary_site() ++ ["source", "all", "legal-info"]]
end
defp primary_site() do
case System.get_env("BR2_PRIMARY_SITE") do
nil -> []
primary_site -> ["BR2_PRIMARY_SITE=#{primary_site}"]
end
end
defp set_target() do
if function_exported?(Mix, :target, 1) do
apply(Mix, :target, [:target])
else
System.put_env("MIX_TARGET", "target")
end
end
defp generate_fwup_conf(_args) do
template_path = Path.join(__DIR__, "fwup.conf.eex")
output_path = Path.join(__DIR__, "fwup.conf")
Mix.shell().info("Generating fwup.conf")
content = EEx.eval_file(template_path)
File.write!(output_path, content)
Mix.shell().info("Successfully generated #{output_path}")
end
end