diff --git a/lib/maintainers.nix b/lib/maintainers.nix index ab729f83a424..ccde5c5e25b0 100644 --- a/lib/maintainers.nix +++ b/lib/maintainers.nix @@ -591,6 +591,7 @@ taku0 = "Takuo Yonezawa "; tari = "Peter Marheine "; tavyc = "Octavian Cerna "; + TealG = "Teal Gaure <~@Teal.Gr>"; teh = "Tom Hunger "; telotortium = "Robert Irelan "; teto = "Matthieu Coudron "; diff --git a/pkgs/applications/audio/axoloti/default.nix b/pkgs/applications/audio/axoloti/default.nix new file mode 100644 index 000000000000..b976d31a27fb --- /dev/null +++ b/pkgs/applications/audio/axoloti/default.nix @@ -0,0 +1,101 @@ +{ stdenv, fetchFromGitHub, fetchurl, makeWrapper, unzip +, gnumake, gcc-arm-embedded, dfu-util-axoloti, jdk, ant, libfaketime }: + +stdenv.mkDerivation rec { + version = "1.0.12-1"; + name = "axoloti-${version}"; + + src = fetchFromGitHub { + owner = "axoloti"; + repo = "axoloti"; + rev = "${version}"; + sha256 = "13njmv8zac0kaaxgkv4y4zfjcclafn9cw0m8lj2k4926wnwjmf50"; + }; + + chibi_version = "2.6.9"; + chibi_name = "ChibiOS_${chibi_version}"; + + chibios = fetchurl { + url = "mirror://sourceforge/project/chibios/ChibiOS_RT%20stable/Version%20${chibi_version}/${chibi_name}.zip"; + sha256 = "0lb5s8pkj80mqhsy47mmq0lqk34s2a2m3xagzihalvabwd0frhlj"; + }; + + buildInputs = [ makeWrapper unzip gcc-arm-embedded dfu-util-axoloti jdk ant libfaketime ]; + + patchPhase = '' + unzip ${chibios} + mv ${chibi_name} chibios + (cd chibios/ext; unzip -q -o fatfs-0.9-patched.zip) + + # Remove source of non-determinism in ChibiOS + substituteInPlace "chibios/os/various/shell.c" \ + --replace "#ifdef __DATE__" "#if 0" + + # Hardcode full path to compiler tools + for f in "firmware/Makefile.patch" \ + "firmware/Makefile" \ + "firmware/flasher/Makefile" \ + "firmware/mounter/Makefile"; do + substituteInPlace "$f" \ + --replace "arm-none-eabi-" "${gcc-arm-embedded}/bin/arm-none-eabi-" + done + + # Hardcode path to "make" + for f in "firmware/compile_firmware_linux.sh" \ + "firmware/compile_patch_linux.sh"; do + substituteInPlace "$f" \ + --replace "make" "${gnumake}/bin/make" + done + + # Hardcode dfu-util path + substituteInPlace "platform_linux/upload_fw_dfu.sh" \ + --replace "/bin/dfu-util" "" + substituteInPlace "platform_linux/upload_fw_dfu.sh" \ + --replace "./dfu-util" "${dfu-util-axoloti}/bin/dfu-util" + + # Fix build version + substituteInPlace "build.xml" \ + --replace "(git missing)" "${version}" + + # Remove build time + substituteInPlace "build.xml" \ + --replace "" "" + substituteInPlace "build.xml" \ + --replace \ + '' \ + '' + substituteInPlace "build.xml" \ + --replace "" "" + substituteInPlace "build.xml" \ + --replace \ + '{line.separator}' \ + '{line.separator} ' + ''; + + buildPhase = '' + find . -exec touch -d '1970-01-01 00:00' {} \; + (cd platform_linux; sh compile_firmware.sh) + faketime "1970-01-01 00:00:00" ant -Dbuild.runtime=true + ''; + + installPhase = '' + mkdir -p $out/bin $out/share/axoloti + + cp -r doc firmware chibios platform_linux CMSIS *.txt $out/share/axoloti/ + install -vD dist/Axoloti.jar $out/share/axoloti/ + + makeWrapper ${jdk}/bin/java $out/bin/axoloti --add-flags "-Daxoloti_release=$out/share/axoloti -Daxoloti_runtime=$out/share/axoloti -jar $out/share/axoloti/Axoloti.jar" + ''; + + meta = with stdenv.lib; { + homepage = http://www.axoloti.com; + description = '' + Sketching embedded digital audio algorithms. + + To fix permissions of the Axoloti USB device node, add a similar udev rule to services.udev.extraRules: + SUBSYSTEM=="usb", ATTR{idVendor}=="16c0", ATTR{idProduct}=="0442", OWNER="someuser", GROUP="somegroup" + ''; + license = licenses.gpl3; + maintainers = with lib.maintainers; [ TealG ]; + }; +} diff --git a/pkgs/applications/audio/axoloti/dfu-util.nix b/pkgs/applications/audio/axoloti/dfu-util.nix new file mode 100644 index 000000000000..2076e45de546 --- /dev/null +++ b/pkgs/applications/audio/axoloti/dfu-util.nix @@ -0,0 +1,31 @@ +{ stdenv, fetchurl, pkgconfig, libusb1-axoloti }: + +stdenv.mkDerivation rec { + name="dfu-util-${version}"; + version = "0.8"; + + nativeBuildInputs = [ pkgconfig ]; + buildInputs = [ libusb1-axoloti ]; + + src = fetchurl { + url = "http://dfu-util.sourceforge.net/releases/${name}.tar.gz"; + sha256 = "0n7h08avlzin04j93m6hkq9id6hxjiiix7ff9gc2n89aw6dxxjsm"; + }; + + meta = with stdenv.lib; { + description = "Device firmware update (DFU) USB programmer"; + longDescription = '' + dfu-util is a program that implements the host (PC) side of the USB + DFU 1.0 and 1.1 (Universal Serial Bus Device Firmware Upgrade) protocol. + + DFU is intended to download and upload firmware to devices connected over + USB. It ranges from small devices like micro-controller boards up to mobile + phones. With dfu-util you are able to download firmware to your device or + upload firmware from it. + ''; + homepage = http://dfu-util.gnumonks.org/; + license = licenses.gpl2Plus; + platforms = platforms.unix; + maintainers = [ ]; + }; +} diff --git a/pkgs/applications/audio/axoloti/libusb1.nix b/pkgs/applications/audio/axoloti/libusb1.nix new file mode 100644 index 000000000000..cf71c006046e --- /dev/null +++ b/pkgs/applications/audio/axoloti/libusb1.nix @@ -0,0 +1,38 @@ +{ stdenv, fetchurl, pkgconfig, systemd ? null, libobjc, IOKit, fetchpatch }: + +stdenv.mkDerivation rec { + name = "libusb-1.0.19"; + + src = fetchurl { + url = "mirror://sourceforge/libusb/${name}.tar.bz2"; + sha256 = "0h38p9rxfpg9vkrbyb120i1diq57qcln82h5fr7hvy82c20jql3c"; + }; + + outputs = [ "out" "dev" ]; # get rid of propagating systemd closure + + buildInputs = [ pkgconfig ]; + propagatedBuildInputs = + stdenv.lib.optional stdenv.isLinux systemd ++ + stdenv.lib.optionals stdenv.isDarwin [ libobjc IOKit ]; + + patches = [ + (fetchpatch { + name = "libusb.stdfu.patch"; + url = "https://raw.githubusercontent.com/axoloti/axoloti/1.0.12/platform_linux/src/libusb.stdfu.patch"; + sha256 = "194j7j61i4q6x0ihm9ms8dxd4vliw20n2rj6cm9h17qzdl9xr33d"; + }) + ]; + + NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s"; + + preFixup = stdenv.lib.optionalString stdenv.isLinux '' + sed 's,-ludev,-L${systemd.lib}/lib -ludev,' -i $out/lib/libusb-1.0.la + ''; + + meta = { + homepage = http://www.libusb.info; + description = "User-space USB library"; + platforms = stdenv.lib.platforms.unix; + maintainers = [ ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index efd7f9be5764..33e182c18101 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -677,6 +677,13 @@ with pkgs; libssl = openssl; }; + axoloti = callPackage ../applications/audio/axoloti { }; + dfu-util-axoloti = callPackage ../applications/audio/axoloti/dfu-util.nix { }; + libusb1-axoloti = callPackage ../applications/audio/axoloti/libusb1.nix { + inherit (darwin) libobjc; + inherit (darwin.apple_sdk.frameworks) IOKit; + }; + azureus = callPackage ../tools/networking/p2p/azureus { }; backblaze-b2 = callPackage ../development/tools/backblaze-b2 { };