Unverified Commit acadbb14 authored by jopejoe1's avatar jopejoe1 Committed by GitHub
Browse files

sdrplay: add darwin support (#445178)

parents 366836e0 d2366aa3
Loading
Loading
Loading
Loading
+56 −0
Original line number Diff line number Diff line
{
  pname,
  version,
  src,
  meta,
  lib,
  stdenv,
  xar,
  cpio,
  libusb1,
  fixDarwinDylibNames,
}:
stdenv.mkDerivation {
  inherit
    pname
    version
    src
    meta
    ;

  nativeBuildInputs = [
    xar
    cpio
    fixDarwinDylibNames
  ];

  unpackPhase = ''
    xar -xf $src
    zcat SDRplayAPI.pkg/Payload | cpio -i
  '';

  dontBuild = true;

  env = {
    majorVersion = lib.versions.major version;
    majorMinorVersion = lib.versions.majorMinor version;
  };

  installPhase = ''
    root="$PWD/Library/SDRplayAPI/${version}"

    mkdir -p $out/{bin,lib}

    cp "$root/bin/sdrplay_apiService" "$out/bin"
    cp -r "$root/include" "$out/include"

    lib="$out/lib/libsdrplay_api.$majorMinorVersion.dylib"
    cp "$root/lib/libsdrplay_api.so.$majorMinorVersion" "$lib"
    ln -s "$lib" "$out/lib/libsdrplay_api.$majorVersion.dylib"
    ln -s "$lib" "$out/lib/libsdrplay_api.dylib"
  '';

  postFixup = ''
    install_name_tool -add_rpath "${lib.getLib libusb1}/lib" $out/bin/sdrplay_apiService
  '';
}
+54 −0
Original line number Diff line number Diff line
{
  pname,
  version,
  src,
  meta,
  stdenv,
  lib,
  fetchurl,
  autoPatchelfHook,
  udev,
  libusb1,
}:
let
  arch = stdenv.hostPlatform.qemuArch;
in
stdenv.mkDerivation rec {
  inherit
    pname
    version
    src
    meta
    ;

  nativeBuildInputs = [ autoPatchelfHook ];

  buildInputs = [
    libusb1
    udev
    (lib.getLib stdenv.cc.cc)
  ];

  unpackPhase = ''
    sh "$src" --noexec --target source
  '';

  sourceRoot = "source";

  dontBuild = true;

  env = {
    majorVersion = lib.versions.major version;
    majorMinorVersion = lib.versions.majorMinor version;
  };

  installPhase = ''
    mkdir -p $out/{bin,lib,include}
    libName="libsdrplay_api"
    cp "${arch}/$libName.so.$majorMinorVersion" $out/lib/
    ln -s "$out/lib/$libName.so.$majorMinorVersion" "$out/lib/$libName.so.$majorVersion"
    ln -s "$out/lib/$libName.so.$majorVersion" "$out/lib/$libName.so"
    cp "${arch}/sdrplay_apiService" $out/bin/
    cp -r inc/* $out/include/
  '';
}
+33 −53
Original line number Diff line number Diff line
{
  callPackage,
  fetchurl,
  stdenv,
  lib,
  fetchurl,
  autoPatchelfHook,
  udev,
  libusb1,
}:
let
  arch =
    if stdenv.hostPlatform.isx86_64 then
      "x86_64"
    else if stdenv.hostPlatform.isi686 then
      "i686"
    else if stdenv.hostPlatform.isAarch64 then
      "aarch64"
    else
      throw "unsupported architecture";

  version = "3.07.1";

  srcs = rec {
    aarch64 = {
      url = "https://www.sdrplay.com/software/SDRplay_RSP_API-ARM64-${version}.run";
      hash = "sha256-GJPFW6W8Ke4mnczcSLFYfioOMGCfFn2/EIA07VnmVGY=";
    };
let
  version = "3.15.1";

    x86_64 = {
  sources = rec {
    x86_64-linux = {
      url = "https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-${version}.run";
      sha256 = "1a25c7rsdkcjxr7ffvx2lwj7fxdbslg9qhr8ghaq1r53rcrqgzmf";
      hash = "sha256-CTcyv10Xz9G2LqHh4qOW9tKBEcB+rztE2R7xJIU4QBQ=";
    };

    i686 = x86_64;
    x86_64-darwin = {
      url = "https://www.sdrplay.com/software/SDRplayAPI-macos-installer-universal-3.15.1.pkg";
      hash = "sha256-XRSM7aH653XS0t9bP89G3uJ7YiLiU1xMBjwvLqL3rMM=";
    };
in
stdenv.mkDerivation rec {
  pname = "sdrplay";
  inherit version;

  src = fetchurl srcs."${arch}";
    aarch64-linux = x86_64-linux;
    aarch64-darwin = x86_64-darwin;
  };

  nativeBuildInputs = [ autoPatchelfHook ];
  platforms = lib.attrNames sources;

  buildInputs = [
    libusb1
    udev
    (lib.getLib stdenv.cc.cc)
  ];
  package = if stdenv.hostPlatform.isLinux then ./linux.nix else ./darwin.nix;

  unpackPhase = ''
    sh "$src" --noexec --target source
  '';
in

  sourceRoot = "source";
callPackage package {
  pname = "sdrplay";
  inherit version;

  dontBuild = true;
  src =
    let
      inherit (stdenv.hostPlatform) system;
      source =
        if lib.hasAttr system sources then
          sources."${system}"
        else
          throw "SDRplay is not supported on ${system}";

  installPhase = ''
    mkdir -p $out/{bin,lib,include,lib/udev/rules.d}
    majorVersion="${lib.concatStringsSep "." (lib.take 1 (builtins.splitVersion version))}"
    majorMinorVersion="${lib.concatStringsSep "." (lib.take 2 (builtins.splitVersion version))}"
    libName="libsdrplay_api"
    cp "${arch}/$libName.so.$majorMinorVersion" $out/lib/
    ln -s "$out/lib/$libName.so.$majorMinorVersion" "$out/lib/$libName.so.$majorVersion"
    ln -s "$out/lib/$libName.so.$majorVersion" "$out/lib/$libName.so"
    cp "${arch}/sdrplay_apiService" $out/bin/
    cp -r inc/* $out/include/
    cp 66-mirics.rules $out/lib/udev/rules.d/
  '';
    in
    fetchurl source;

  meta = with lib; {
    inherit platforms;

    description = "SDRplay API";
    longDescription = ''
      Proprietary library and api service for working with SDRplay devices. For documentation and licensing details see
      https://www.sdrplay.com/docs/SDRplay_API_Specification_v${lib.concatStringsSep "." (lib.take 2 (builtins.splitVersion version))}.pdf
    '';

    homepage = "https://www.sdrplay.com/downloads/";
    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
    license = licenses.unfree;
@@ -81,7 +61,7 @@ stdenv.mkDerivation rec {
      pmenke
      zaninime
    ];
    platforms = platforms.linux;

    mainProgram = "sdrplay_apiService";
  };
}