diff --git a/flake.nix b/flake.nix index ad3c074..c0ff73b 100644 --- a/flake.nix +++ b/flake.nix @@ -5,7 +5,10 @@ outputs = { self, nixpkgs }@inputs: let # Nixpkgs instantiated for supported system types - nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); + nixpkgsFor = forAllSystems (system: import nixpkgs { + inherit system; + config.allowUnfree = true; # :( + }); lastModifiedDate = self.lastModifiedDate or self.lastModified or "19700101"; @@ -103,11 +106,9 @@ gperf ccache gmp.dev - # openocd + openocd dfu-util bossa - # pkgs.nrfutil # UNFREE - # nRF-Command-Line-Tools # jlink srecord # for srec_cat @@ -174,7 +175,13 @@ }; in my-west-fun { pnameext = "-arm"; - moreBuildInputs = [ gcc binutils stdenv.cc.cc.lib ]; + moreBuildInputs = [ + gcc + binutils + stdenv.cc.cc.lib + + pkgs.nrfutil + ]; wrapperArgs = '' --set ZEPHYR_TOOLCHAIN_VARIANT "gnuarmemb" \ --set GNUARMEMB_TOOLCHAIN_PATH "${arm-toolchain}" @@ -209,6 +216,14 @@ --set ESPRESSIF_TOOLCHAIN_PATH "${zephyr-sdk}/xtensa-espressif_esp32_zephyr-elf" ''; }; + + + # from https://github.com/NixOS/nixpkgs/pull/255185 + nrf-command-line-tools = callPackage ../pkgs_from_pr_255185/nrf-command-line-tools { }; + nrfconnect = callPackage ../pkgs_from_pr_255185/nrfconnect { + acceptLicense = true; + }; + segger-jlink = callPackage ../pkgs_from_pr_255185/segger-jlink { }; }); homeManagerModules.zephyr = ({ config, lib, pkgs, ... }: @@ -242,6 +257,10 @@ my-west my-west-arm my-west-esp32 + + nrf-command-line-tools + nrfconnect + segger-jlink ]); }; }); diff --git a/pkgs_from_pr_255185/nrf-command-line-tools/default.nix b/pkgs_from_pr_255185/nrf-command-line-tools/default.nix new file mode 100644 index 0000000..09644c1 --- /dev/null +++ b/pkgs_from_pr_255185/nrf-command-line-tools/default.nix @@ -0,0 +1,76 @@ +{ lib +, stdenv +, fetchurl +, autoPatchelfHook +, udev +, libusb1 +, segger-jlink +}: + +let + supported = { + x86_64-linux = { + name = "linux-amd64"; + hash = "sha256-zL9tXl2HsO8JZXEGsjg4+lDJJz30StOMH96rU7neDsg="; + }; + aarch64-linux = { + name = "linux-arm64"; + hash = "sha256-ACy3rXsvBZNVXdVkpP2AqrsoqKPliw6m9UUWrFOCBzs="; + }; + armv7l-linux = { + name = "linux-armhf"; + hash = "sha256-nD1pHL/SQqC7OlxuovWwvtnXKMmhfx5qFaF4ti8gh8g="; + }; + }; + + platform = supported.${stdenv.system} or (throw "unsupported platform ${stdenv.system}"); + + version = "10.23.2"; + + url = let + versionWithDashes = builtins.replaceStrings ["."] ["-"] version; + in "https://nsscprodmedia.blob.core.windows.net/prod/software-and-other-downloads/desktop-software/nrf-command-line-tools/sw/versions-${lib.versions.major version}-x-x/${versionWithDashes}/nrf-command-line-tools-${version}_${platform.name}.tar.gz"; + +in stdenv.mkDerivation { + pname = "nrf-command-line-tools"; + inherit version; + + src = fetchurl { + inherit url; + inherit (platform) hash; + }; + + runtimeDependencies = [ + segger-jlink + ]; + + nativeBuildInputs = [ + autoPatchelfHook + ]; + + buildInputs = [ + udev + libusb1 + ]; + + dontConfigure = true; + dontBuild = true; + + installPhase = '' + runHook preInstall + + rm -rf ./python + mkdir -p $out + cp -r * $out + + runHook postInstall + ''; + + meta = with lib; { + description = "Nordic Semiconductor nRF Command Line Tools"; + homepage = "https://www.nordicsemi.com/Products/Development-tools/nRF-Command-Line-Tools"; + license = licenses.unfree; + platforms = attrNames supported; + maintainers = with maintainers; [ stargate01 ]; + }; +} diff --git a/pkgs_from_pr_255185/nrfconnect/default.nix b/pkgs_from_pr_255185/nrfconnect/default.nix new file mode 100644 index 0000000..c3a6e0e --- /dev/null +++ b/pkgs_from_pr_255185/nrfconnect/default.nix @@ -0,0 +1,44 @@ +{ lib +, fetchurl +, appimageTools +}: + +let + pname = "nrfconnect"; + version = "4.3.0"; + + src = fetchurl { + url = "https://nsscprodmedia.blob.core.windows.net/prod/software-and-other-downloads/desktop-software/nrf-connect-for-desktop/${lib.versions.major version}-${lib.versions.minor version}-${lib.versions.patch version}/nrfconnect-${version}-x86_64.appimage"; + hash = "sha256-G8//dZqPxn6mR8Bjzf/bAn9Gv7t2AFWIF9twCGbqMd8="; + name = "${pname}-${version}.AppImage"; + }; + + appimageContents = appimageTools.extractType2 { + inherit pname version src; + }; + +in appimageTools.wrapType2 { + inherit pname version src; + + extraPkgs = pkgs: with pkgs; [ + segger-jlink + ]; + + extraInstallCommands = '' + mv $out/bin/nrfconnect-* $out/bin/nrfconnect + install -Dm444 ${appimageContents}/nrfconnect.desktop -t $out/share/applications + install -Dm444 ${appimageContents}/usr/share/icons/hicolor/512x512/apps/nrfconnect.png \ + -t $out/share/icons/hicolor/512x512/apps + substituteInPlace $out/share/applications/nrfconnect.desktop \ + --replace 'Exec=AppRun' 'Exec=nrfconnect' + ''; + + meta = with lib; { + description = "Nordic Semiconductor nRF Connect for Desktop"; + homepage = "https://www.nordicsemi.com/Products/Development-tools/nRF-Connect-for-desktop"; + license = licenses.unfree; + platforms = platforms.linux; + maintainers = with maintainers; [ stargate01 ]; + mainProgram = "nrfconnect"; + }; +} diff --git a/pkgs_from_pr_255185/segger-jlink/default.nix b/pkgs_from_pr_255185/segger-jlink/default.nix new file mode 100644 index 0000000..cfec869 --- /dev/null +++ b/pkgs_from_pr_255185/segger-jlink/default.nix @@ -0,0 +1,228 @@ +{ lib +, stdenv +, fetchurl +, autoPatchelfHook +, udev +, config +, acceptLicense ? config.segger-jlink.acceptLicense or false +, fontconfig +, xorg +, makeDesktopItem +, copyDesktopItems +}: + +let + supported = { + x86_64-linux = { + name = "x86_64"; + hash = "sha256-WGEDvB6TJ8Y2Xl1VUB1JWVMK54OevvPoVGris3I27t4="; + }; + i686-linux = { + name = "i386"; + hash = "sha256-BOQ4yExDRGKuUvsPUUswElrps0SpXcDCHxy2tmGbV/I="; + }; + aarch64-linux = { + name = "arm64"; + hash = "sha256-ZWzaWCUgV4x5Fbz+jphj771kIyLyeoRZKjgf8rmbFxQ="; + }; + armv7l-linux = { + name = "arm"; + hash = "sha256-Qjb5P1XH/CoiLP9iqWyEX0YHUjDIuSdw5ej1bE61T48="; + }; + }; + + platform = supported.${stdenv.system} or (throw "unsupported platform ${stdenv.system}"); + + version = "794a"; + + url = "https://www.segger.com/downloads/jlink/JLink_Linux_V${version}_${platform.name}.tgz"; + + src = + assert !acceptLicense -> throw '' + Use of the "SEGGER JLink Software and Documentation pack" requires the + acceptance of the following licenses: + + - SEGGER Downloads Terms of Use [1] + - SEGGER Software Licensing [2] + + You can express acceptance by setting acceptLicense to true in your + configuration. Note that this is not a free license so it requires allowing + unfree licenses as well. + + configuration.nix: + nixpkgs.config.allowUnfree = true; + nixpkgs.config.segger-jlink.acceptLicense = true; + + config.nix: + allowUnfree = true; + segger-jlink.acceptLicense = true; + + [1]: ${url} + [2]: https://www.segger.com/purchase/licensing/ + ''; + fetchurl { + inherit url; + inherit (platform) hash; + curlOpts = "--data accept_license_agreement=accepted"; + }; + + qt4-bundled = stdenv.mkDerivation { + pname = "segger-jlink-qt4"; + inherit src version; + + nativeBuildInputs = [ + autoPatchelfHook + ]; + + buildInputs = [ + stdenv.cc.cc.lib + fontconfig + xorg.libXrandr + xorg.libXfixes + xorg.libXcursor + xorg.libSM + xorg.libICE + xorg.libX11 + ]; + + dontConfigure = true; + dontBuild = true; + + installPhase = '' + runHook preInstall + + # Install libraries + mkdir -p $out/lib + mv libQt* $out/lib + + runHook postInstall + ''; + + meta = with lib; { + description = "Bundled QT4 libraries for the J-Link Software and Documentation pack"; + homepage = "https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack"; + license = licenses.lgpl21; + maintainers = with maintainers; [ stargate01 ]; + knownVulnerabilities = [ + "This bundled version of Qt 4 has reached its end of life after 2015. See https://github.com/NixOS/nixpkgs/pull/174634" + "CVE-2023-43114" + "CVE-2023-38197" + "CVE-2023-37369" + "CVE-2023-34410" + "CVE-2023-32763" + "CVE-2023-32762" + "CVE-2023-32573" + "CVE-2022-25634" + "CVE-2020-17507" + "CVE-2020-0570" + "CVE-2018-21035" + "CVE-2018-19873" + "CVE-2018-19871" + "CVE-2018-19870" + "CVE-2018-19869" + "CVE-2015-1290" + "CVE-2014-0190" + "CVE-2013-0254" + "CVE-2012-6093" + "CVE-2012-5624" + "CVE-2009-2700" + ]; + }; + }; + +in stdenv.mkDerivation { + pname = "segger-jlink"; + inherit src version; + + nativeBuildInputs = [ + autoPatchelfHook + copyDesktopItems + ]; + + buildInputs = [ + qt4-bundled + ]; + + # Udev is loaded late at runtime + appendRunpaths = [ + "${udev}/lib" + ]; + + dontConfigure = true; + dontBuild = true; + + desktopItems = map (entry: + (makeDesktopItem { + name = entry; + exec = entry; + icon = "applications-utilities"; + desktopName = entry; + genericName = "SEGGER ${entry}"; + categories = [ "Development" ]; + type = "Application"; + terminal = false; + startupNotify = false; + }) + ) [ + "JFlash" + "JFlashLite" + "JFlashSPI" + "JLinkConfig" + "JLinkGDBServer" + "JLinkLicenseManager" + "JLinkRTTViewer" + "JLinkRegistration" + "JLinkRemoteServer" + "JLinkSWOViewer" + "JLinkUSBWebServer" + "JMem" + ]; + + installPhase = '' + runHook preInstall + + # Install binaries and runtime files into /opt/ + mkdir -p $out/opt + mv J* ETC GDBServer Firmwares $out/opt + + # Link executables into /bin/ + mkdir -p $out/bin + for binr in $out/opt/*Exe; do + binrlink=''${binr#"$out/opt/"} + ln -s $binr $out/bin/$binrlink + # Create additional symlinks without "Exe" suffix + binrlink=''${binrlink/%Exe} + ln -s $binr $out/bin/$binrlink + done + + # Copy special alias symlinks + for slink in $(find $out/opt/. -type l); do + cp -P -n $slink $out/bin || true + rm $slink + done + + # Install libraries + install -Dm444 libjlinkarm.so* -t $out/lib + for libr in $out/lib/libjlinkarm.*; do + ln -s $libr $out/opt + done + + # Install docs and examples + mkdir -p $out/share + mv Doc $out/share/docs + mv Samples $out/share/examples + + # Install udev rules + install -Dm444 99-jlink.rules -t $out/lib/udev/rules.d/ + + runHook postInstall + ''; + + meta = with lib; { + description = "J-Link Software and Documentation pack"; + homepage = "https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack"; + license = licenses.unfree; + platforms = attrNames supported; + maintainers = with maintainers; [ FlorianFranzen stargate01 ]; + }; +}