sdrplay: add darwin support

- Support darwin
- Update version to 3.15.1
This commit is contained in:
Francesco Zanini
2025-09-22 11:31:07 +02:00
parent 3afcbc59d8
commit d2366aa38f
3 changed files with 145 additions and 55 deletions
+56
View File
@@ -0,0 +1,56 @@
{
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
View File
@@ -0,0 +1,54 @@
{
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/
'';
}
+35 -55
View File
@@ -1,79 +1,59 @@
{
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.15.1";
version = "3.07.1";
srcs = rec {
aarch64 = {
url = "https://www.sdrplay.com/software/SDRplay_RSP_API-ARM64-${version}.run";
hash = "sha256-GJPFW6W8Ke4mnczcSLFYfioOMGCfFn2/EIA07VnmVGY=";
};
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=";
};
aarch64-linux = x86_64-linux;
aarch64-darwin = x86_64-darwin;
};
platforms = lib.attrNames sources;
package = if stdenv.hostPlatform.isLinux then ./linux.nix else ./darwin.nix;
in
stdenv.mkDerivation rec {
callPackage package {
pname = "sdrplay";
inherit version;
src = fetchurl srcs."${arch}";
src =
let
inherit (stdenv.hostPlatform) system;
source =
if lib.hasAttr system sources then
sources."${system}"
else
throw "SDRplay is not supported on ${system}";
nativeBuildInputs = [ autoPatchelfHook ];
buildInputs = [
libusb1
udev
(lib.getLib stdenv.cc.cc)
];
unpackPhase = ''
sh "$src" --noexec --target source
'';
sourceRoot = "source";
dontBuild = true;
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";
};
}