commit bfd6338ec67f80885ceaf3fe455508b452cd57a3 Author: Artemis Tosini Date: Sat Nov 11 23:03:50 2023 +0000 Add zephyr host tools diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..e403b90 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true + +[*.py] +indent_style = space +indent_size = 4 + +[*.nix] +indent_style = space +indent_size = 2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..750baeb --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +result +result-* diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..bcfa6af --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1699343069, + "narHash": "sha256-s7BBhyLA6MI6FuJgs4F/SgpntHBzz40/qV0xLPW6A1Q=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "ec750fd01963ab6b20ee1f0cb488754e8036d89d", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "utils": "utils" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..d86b028 --- /dev/null +++ b/flake.nix @@ -0,0 +1,21 @@ +{ + description = "artemist's NixOS packages and shells for development"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, utils }: utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { inherit system; }; + in + { + packages = { + zephyr = pkgs.callPackage ./packages/zephyr { }; + }; + + formatter = pkgs.nixfmt; + }); + } + diff --git a/packages/zephyr/assets.json b/packages/zephyr/assets.json new file mode 100644 index 0000000..36fb86c --- /dev/null +++ b/packages/zephyr/assets.json @@ -0,0 +1 @@ +{"version": "0.16.3", "hosts": ["aarch64-linux", "x86_64-linux"], "host_tools": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/hosttools_linux-aarch64.tar.xz", "hash": "sha256-6Lp/OgS+UztK7OcLFeDpzni9+yjx7wALdgduAuaNI80="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/hosttools_linux-x86_64.tar.xz", "hash": "sha256-1a9uQw66ShvzgidMcAEI8Yk2ly7BIsHhvNSFROB1haU="}}, "toolchains": {"aarch64-zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_aarch64-zephyr-elf.tar.xz", "hash": "sha256-ACtFirDmVIr1cxKeBOqKLgLlq3muM1PDrtVe2sgoKs4="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_aarch64-zephyr-elf.tar.xz", "hash": "sha256-K/i7tgG31Ges8g5Wg+OL7NvPkM+dZ7jI8fNtuZZp588="}}, "arc-zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_arc-zephyr-elf.tar.xz", "hash": "sha256-liAw9L9tYOho3yj7ZMgfIb5zW2mfE875kZeCojqEJU0="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_arc-zephyr-elf.tar.xz", "hash": "sha256-J3LvfTfYlYBtUAj9FQzIlIRjnNIx37SwD4qsR8/B0bU="}}, "arc64-zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_arc64-zephyr-elf.tar.xz", "hash": "sha256-/mlfMjmv6rN+StX2WYGbAdgMUTADS4aeTpcBpBpeNgs="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_arc64-zephyr-elf.tar.xz", "hash": "sha256-ZymurzQVs7wlmk7rY56Acr5aVhe3QNmPkdvkGEJOjeo="}}, "arm-zephyr-eabi": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_arm-zephyr-eabi.tar.xz", "hash": "sha256-q7N2qxdiwZXUFhzgQEWXvd4fLnSMEfeJp9L0DVlp2ok="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_arm-zephyr-eabi.tar.xz", "hash": "sha256-yB6/clHVl7A1C6Ail+Wg/hU+aqQO+6vb9f+ZbQ+OJo8="}}, "microblazeel-zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_microblazeel-zephyr-elf.tar.xz", "hash": "sha256-EO9ldL/ylaPPV9eROGs4F3N1uwpz08LmDa2wcvDDHsg="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_microblazeel-zephyr-elf.tar.xz", "hash": "sha256-GTi5/YqcvLkt5ncELzdyZj2hxCJ9CRkN7k2BdW/L1Hg="}}, "mips-zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_mips-zephyr-elf.tar.xz", "hash": "sha256-YfKzL1uq8pB/KDGIVOK1pIwxOL/F/dw7BGSJBM+QEbc="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_mips-zephyr-elf.tar.xz", "hash": "sha256-VXbNsOOp3gauqEirZFUbx4LpYHN92AG3F9jVWpSOEAE="}}, "nios2-zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_nios2-zephyr-elf.tar.xz", "hash": "sha256-vRsc92ASUERbxQo2nYL/Saag/gH8LkN9RtpvrJT5Wng="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_nios2-zephyr-elf.tar.xz", "hash": "sha256-qJ88ckgzdk2i2RHL0t5FhZ7BAwE/bXlu6yCCL8h51PM="}}, "riscv64-zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_riscv64-zephyr-elf.tar.xz", "hash": "sha256-UANGMCbgrGv2abeBgXS/nQUZA6SnTh91rRwTer+aiO0="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_riscv64-zephyr-elf.tar.xz", "hash": "sha256-+rv0R+LwqCN9KpIcNigwWOptBOKqvfWMKBlvqZ34jos="}}, "sparc-zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_sparc-zephyr-elf.tar.xz", "hash": "sha256-tpQzxD+qM9FS1qUi67Tr/1XSsw3+HdpksLudXE9UPrM="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_sparc-zephyr-elf.tar.xz", "hash": "sha256-b2MXhMSSPI9QIgk62TDQBMDBXe1XnkZNlC5r2s43m7I="}}, "x86_64-zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_x86_64-zephyr-elf.tar.xz", "hash": "sha256-n0AdGFRuJKhG0LH3O0gYBpCvHqVIRCZQCfetEGUAI/A="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_x86_64-zephyr-elf.tar.xz", "hash": "sha256-E4eMuHNiuB8UV8ZHe/NvK3bzq6KWjLqRC4wHtAydXrE="}}, "xtensa-dc233c_zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_xtensa-dc233c_zephyr-elf.tar.xz", "hash": "sha256-iFSrV0UeA32Oylnd5tgrTHdoTIzZX7bptiOtW3fpn2c="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_xtensa-dc233c_zephyr-elf.tar.xz", "hash": "sha256-vUqk4b1fvXpTiqBMggMd0msJxyono/e8bNkXJRfugBE="}}, "xtensa-espressif_esp32s2_zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_xtensa-espressif_esp32s2_zephyr-elf.tar.xz", "hash": "sha256-+5sUX61eU6PkQ3vNi+E3QigOQcJC94u0aQPDDd2iwoE="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_xtensa-espressif_esp32s2_zephyr-elf.tar.xz", "hash": "sha256-pqy4Ko9vGEKAZtA/AKQ3f003XAM7Ajrc0qaKaKQIgmM="}}, "xtensa-espressif_esp32s3_zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_xtensa-espressif_esp32s3_zephyr-elf.tar.xz", "hash": "sha256-MCyZVlCASNOkeGfOfhoooY/teGrMdeK2t9XYf70UySU="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_xtensa-espressif_esp32s3_zephyr-elf.tar.xz", "hash": "sha256-1Hw4jM5C2jNgxU3gXPflJ+zH4hAdjCX+6McByAKtyLk="}}, "xtensa-espressif_esp32_zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_xtensa-espressif_esp32_zephyr-elf.tar.xz", "hash": "sha256-lU/M6Cx1AslbAh6teeYZOsPNfEswzPLVCT3P+qnJOuQ="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_xtensa-espressif_esp32_zephyr-elf.tar.xz", "hash": "sha256-wcrBnEMF6UDdvVXSdVjlqoyxSgXuVpFVLF4NObnlEAI="}}, "xtensa-intel_ace15_mtpm_zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_xtensa-intel_ace15_mtpm_zephyr-elf.tar.xz", "hash": "sha256-3c816J8DtIogHrkhnoacF391zqPZsPvAft7D9S6Yn70="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_xtensa-intel_ace15_mtpm_zephyr-elf.tar.xz", "hash": "sha256-0OBZKjCaGEQ/Sl9D2FXE6Q2btdbDifIIBEGH6ktq0NU="}}, "xtensa-intel_tgl_adsp_zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_xtensa-intel_tgl_adsp_zephyr-elf.tar.xz", "hash": "sha256-ApKioSOjlMo0BZa96M7NnA7FaavOw9xDbYvD647469A="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_xtensa-intel_tgl_adsp_zephyr-elf.tar.xz", "hash": "sha256-wgi9ccs8wtBCkzIVfQkszrXmeWJMSVr42SZ5B6hb0RM="}}, "xtensa-mtk_mt8195_adsp_zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_xtensa-mtk_mt8195_adsp_zephyr-elf.tar.xz", "hash": "sha256-w6SBFdK2OgLOmBc+86wLeCrq5v5Tk5DHkUvDBXFlIG0="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_xtensa-mtk_mt8195_adsp_zephyr-elf.tar.xz", "hash": "sha256-I0V8+4x0KGg30nDbvPtwgHbSP/QB8kktCwu2khzKumM="}}, "xtensa-nxp_imx8m_adsp_zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_xtensa-nxp_imx8m_adsp_zephyr-elf.tar.xz", "hash": "sha256-Xx4cB2HbTybC51IV+EPb54zC+KFIP3Ldey/oWRznjvk="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_xtensa-nxp_imx8m_adsp_zephyr-elf.tar.xz", "hash": "sha256-AsDSa4HIQUtz/9wKSWgBzqab1Q4twnt/TsVGWqeV+v0="}}, "xtensa-nxp_imx_adsp_zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_xtensa-nxp_imx_adsp_zephyr-elf.tar.xz", "hash": "sha256-NsIM7oaA62wg3nmqVGe+Byx9bThDVtXWnQu1gG+SpBs="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_xtensa-nxp_imx_adsp_zephyr-elf.tar.xz", "hash": "sha256-jRZ3mgFqpWrCPoWbX1JYPRnUY+fWuovxcDm+Jay2I9M="}}, "xtensa-nxp_rt500_adsp_zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_xtensa-nxp_rt500_adsp_zephyr-elf.tar.xz", "hash": "sha256-2xbjdKiQ+YdmGJKklnkLeltt8KccKylm700QMtfPFns="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_xtensa-nxp_rt500_adsp_zephyr-elf.tar.xz", "hash": "sha256-ngILyZMyRR+kIXqnmRBgkFGfFErFw067vSNwWZSJDqk="}}, "xtensa-sample_controller_zephyr-elf": {"aarch64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-aarch64_xtensa-sample_controller_zephyr-elf.tar.xz", "hash": "sha256-kxEMHQlQem9JnyvXnaObEfGKoqjHb/s61jZZjYpDFPw="}, "x86_64-linux": {"url": "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_xtensa-sample_controller_zephyr-elf.tar.xz", "hash": "sha256-cLU3AfbQ6KgalPGl0+s3v+9GP8mxCFB7RumxqJxkFkE="}}}} \ No newline at end of file diff --git a/packages/zephyr/default.nix b/packages/zephyr/default.nix new file mode 100644 index 0000000..19fe43e --- /dev/null +++ b/packages/zephyr/default.nix @@ -0,0 +1,8 @@ +{ callPackage, stdenv, lib }: +let assets = lib.importJSON ./assets.json; +in { + host-tools = callPackage ./host-tools.nix { + inherit (assets) version hosts; + sources = assets.host_tools; + }; +} diff --git a/packages/zephyr/host-tools.nix b/packages/zephyr/host-tools.nix new file mode 100644 index 0000000..2e03a84 --- /dev/null +++ b/packages/zephyr/host-tools.nix @@ -0,0 +1,29 @@ +{ stdenv, fetchurl, hosts, lib, python3, sources, version, which }: +stdenv.mkDerivation rec { + pname = "zephyr-host-tools"; + inherit version; + + nativeBuildInputs = [ python3 which ]; + src = fetchurl (sources."${stdenv.hostPlatform.system}"); + + dontUnpack = true; + + installPhase = '' + runHook preInstall + + # Extract outer archive (no directories so nixpkgs can't unpack) + tar xvf ${src} + cp *.sh $TEMP/installer.sh + chmod +x $TEMP/installer.sh + $TEMP/installer.sh -D -n -y -d "$out" + runHook postInstall + ''; + + meta = with lib; { + homepage = "https://www.zephyrproject.org/"; + description = "Host tools for building the Zephyr RTOS"; + license = licenses.asl20; + platforms = hosts; + maintainers = with maintainers; [ artemist ]; + }; +} diff --git a/packages/zephyr/update.py b/packages/zephyr/update.py new file mode 100755 index 0000000..20fe597 --- /dev/null +++ b/packages/zephyr/update.py @@ -0,0 +1,55 @@ +#!/usr/bin/env nix-shell +#! nix-shell -i python3 -p python3 python3Packages.requests +import requests +import json +import subprocess +import os +import re + + +def prefetch_file(url: str) -> str: + out = subprocess.run( + ["nix", "store", "prefetch-file", "--json", url], + stdout=subprocess.PIPE, + check=True, + ) + return json.loads(out.stdout.decode("utf-8"))["hash"] + + +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +HOSTS = ["aarch64", "x86_64"] + +release = requests.get( + "https://api.github.com/repos/zephyrproject-rtos/sdk-ng/releases/latest" +).json() +tag = release["tag_name"] +targets = [] +for asset in release["assets"]: + if ( + match := re.fullmatch( + r"toolchain_linux-aarch64_([a-zA-Z0-9_-]+)\.tar\.xz", asset["name"] + ) + ) is not None: + targets.append(match.group(1)) + +host_tools = {} +for host in HOSTS: + url = f"https://github.com/zephyrproject-rtos/sdk-ng/releases/download/{tag}/hosttools_linux-{host}.tar.xz" + host_tools[host + "-linux"] = {"url": url, "hash": prefetch_file(url)} + +toolchains = {} +for target in targets: + toolchains[target] = {} + for host in HOSTS: + url = f"https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-{host}_{target}.tar.xz" + toolchains[target][host + "-linux"] = {"url": url, "hash": prefetch_file(url)} + +out_obj = { + "version": tag[1:], + "hosts": list(map(lambda arch: arch + "-linux", HOSTS)), + "host_tools": host_tools, + "toolchains": toolchains, +} + +with open(os.path.join(BASE_DIR, "assets.json"), "w") as out_file: + json.dump(out_obj, out_file)