diff --git a/pkgs/development/tools/misc/blackmagic/default.nix b/pkgs/development/tools/misc/blackmagic/default.nix new file mode 100644 index 000000000000..ab84cb37656e --- /dev/null +++ b/pkgs/development/tools/misc/blackmagic/default.nix @@ -0,0 +1,59 @@ +{ stdenv, lib, fetchFromGitHub +, gcc-arm-embedded, bash, libftdi +, python, pythonPackages +}: + +with lib; + +stdenv.mkDerivation rec { + name = "blackmagic-${version}"; + version = "1.6.1"; + + src = fetchFromGitHub { + owner = "blacksphere"; + repo = "blackmagic"; + rev = "d3a8f27fdbf952194e8fc5ce9b2fc9bcef7c545c"; + sha256 = "0c3l7cfqag3g7zrfn4mmikkx7076hb1r856ybhhdh0f6zji2j6jx"; + fetchSubmodules = true; + }; + + buildInputs = [ + gcc-arm-embedded + libftdi + python + pythonPackages.intelhex + ]; + + postPatch = '' + # Prevent calling out to `git' to generate a version number: + substituteInPlace src/Makefile \ + --replace '`git describe --always --dirty`' '${version}' + + # Fix scripts that generate headers: + for f in $(find scripts libopencm3/scripts -type f); do + patchShebangs "$f" + done + ''; + + buildPhase = "${stdenv.shell} ${./helper.sh}"; + installPhase = ":"; # buildPhase does this. + + meta = { + description = "In-application debugger for ARM Cortex microcontrollers"; + longDescription = '' + The Black Magic Probe is a modern, in-application debugging tool + for embedded microprocessors. It allows you to see what is going + on "inside" an application running on an embedded microprocessor + while it executes. + + This package builds the firmware for all supported platforms, + placing them in separate directories under the firmware + directory. It also places the FTDI version of the blackmagic + executable in the bin directory. + ''; + homepage = https://github.com/blacksphere/blackmagic; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ pjones ]; + platforms = platforms.unix; + }; +} diff --git a/pkgs/development/tools/misc/blackmagic/helper.sh b/pkgs/development/tools/misc/blackmagic/helper.sh new file mode 100755 index 000000000000..b4c7558885bb --- /dev/null +++ b/pkgs/development/tools/misc/blackmagic/helper.sh @@ -0,0 +1,49 @@ +################################################################################ +# Build all of the platforms manually since the `all_platforms' target +# doesn't preserve all of the build outputs and overrides CFLAGS. +set -e +set -u + +################################################################################ +# Prevent a warning from shellcheck: +out=${out:-/tmp} + +################################################################################ +export CFLAGS=$NIX_CFLAGS_COMPILE + +################################################################################ +PRODUCTS="blackmagic.bin blackmagic.hex blackmagic_dfu.bin blackmagic_dfu.hex" + +################################################################################ +make_platform() { + echo "Building for hardware platform $1" + + make clean + make PROBE_HOST="$1" + + if [ "$1" = libftdi ]; then + mkdir -p "$out/bin" + install -m 0555 blackmagic "$out/bin" + fi + + for f in $PRODUCTS; do + if [ -r "$f" ]; then + mkdir -p "$out/firmware/$1" + install -m 0444 "$f" "$out/firmware/$1" + fi + done + +} + +################################################################################ +# Start by building libopencm3: +make -C libopencm3 + +################################################################################ +# And now all of the platforms: +cd src + +for platform in platforms/*/Makefile.inc; do + probe=$(basename "$(dirname "$platform")") + make_platform "$probe" +done diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 134574cb455b..3b9b325ea71c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6546,6 +6546,8 @@ with pkgs; bison3 = callPackage ../development/tools/parsing/bison/3.x.nix { }; bison = bison3; + blackmagic = callPackage ../development/tools/misc/blackmagic { }; + bloaty = callPackage ../development/tools/bloaty { }; bossa = callPackage ../development/tools/misc/bossa {