deskHPSDR unter macOS selbst compilieren

Über mein Projekt deskHPSDR hatte ich ja bereits berichtet, nun wollen wir uns also damit beschäftigen, wie wir das unter macOS in ein startbares Programm aus dem Quellcode umwandeln können.

macOS vorbereiten

Um solche Programme aus der Open Source Welt auch auf einem macOS lauffähig zu machen, gibt es einiges an Vorbereitungen sozusagen „unter der Haube“ zu erledigen. Getestet wurde das hier alles unter macOS 14.7.1 aka Sonoma, sowohl auf einem Macbook Air M1 (ARM) und einem iMac 21″ i5 (Intel).

Für macOS gibt es für solche Zwecke zwei Paketmanager, ähnlich wie man das von Linux kennt:

Für unser deskHPSDR benötigen wir erstes, also Homebrew. Um Homebrew installieren und nutzen zu können, müssen wir uns allerdings erstmal eine minimale Entwicklungsumgebung installieren. Fangen wir also an.

Dazu benötigen wir die Terminal-App, die wir unter Programme > Dienstprogramme finden und starten. Damit steht uns eine Shell im Textmode zur Verfügung wie man das auch schon von Linux kennt. Auch macOS ist ein UNIX-Derivat, Apple nennt das Darwin und ist ein BSD-System.

Nachdem die Terminal-App gestartet ist, gehts nun also weiter, zuerst müssen wir uns die Xcode Command Line Tools installieren, die u.a. den notwendigen Compiler und einige andere Sachen enthalten:

~$ xcode-select --install

Diese Installation lassen wir durchlaufen, bis diese abgeschlossen ist. Als zweites benötigen wir einen sog. X11-Server für macOS.
Den holen wir uns mit dem Webbrowser von https://www.xquartz.org/ die derzeit aktuelle Version XQuartz-2.8.5.pkg herunter und installieren diese ebenfalls. Dann gehts wieder zurück in die Terminal-App.

Da installieren wir uns jetzt den Homebrew-Paket-Manager:

~$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Bitte unter UNIX-Systemen immer beachten, diese arbeiten mit Groß- und Kleinschreibung. Das wird also unterschieden, man kann also nicht wie unter WINDOWS groß oder klein schreiben, nein, bitte immer genau so schreiben wie angegeben.

Nach der Erst-Installation von Homebrew prüfen wir erstmal, ob wir aktuell sind:

~$ brew update && brew upgrade

Diese beiden Befehle merken wir uns mal, später sollte man das auch von Zeit zu Zeit mal ausführen, um Homebrew immer aktuell zu halten. Damit wären die drei ersten Schritte unter macOS erstmal erledigt, jetzt wenden wir uns also dem deskHPSDR zu.

Compilieren von deskHPSDR

Wir bleiben in unserer Terminal-App und holen uns erstmal den Quellcode vom deskHPSDR auf github.com:

~$ cd $HOME
~$ mkdir src
~$ cd src
~/src$ git clone https://github.com/dl1bz/deskhpsdr.git
~/src$ cd deskhpsdr
~/src/deskhpsdr$

Jetzt installieren wir uns die nötigen Softwarebibliotheken, ohne die deskHPSDR nicht funktionieren würde. Dazu nutzen wir ein bereits vorbereitetes Shell-Script:

~/src/deskhpsdr$ ./MacOS/prep_macos.sh

Nachdem das durchgelaufen ist, fehlt nur noch das eigentliche Compilieren des deskHPSDR. Dazu gibt es mehrere Optionen, ich habe das Makefile, was den Compilierungsvorgang steuert, etwas angepasst, so dass man nicht viel machen muss.

~/src/deskhpsdr$ make macapp

Der Befehl make macapp macht folgendes:

  • compilieren des Quellcodes zu einem ausführbaren Programm
  • erzeugen einer (macOS-typischen) deskHPSDR.app
  • Kopieren dieser deskHPSDR.app auf Deinen persönlichen Desktop
  • starten der deskHPSDR.app nach dem Kopieren auf Deinen persönlichen Desktop

deskHPSDR findest Du also immer auf Deinem persönlichen Desktop zum starten, wenn Du make macapp benutzt.

Anpassen von Optionen im Makefile von deskHPSDR

Im mitgelieferten Makefile von deskHPSDR sind Optionen wählbar, die eine gewisse Softwareunterstützung hinzufügen, sofern diese extra benötigt wird:

GPIO=OFF
MIDI=ON
SATURN=OFF
USBOZY=OFF
SOAPYSDR=OFF
STEMLAB=OFF
EXTENDED_NR=
SERVER=OFF
AUDIO=PULSE
DESKTOP=ON
ATU=OFF
DEVEL=OFF

Unter diesen Optionen befindet sich auch eine Erklärung, was diese bedeuten. Die Optionen GPIO, MIDI und AUDIO lassen wir so, wie sie sind. Die Unterstützung für entsprechende SDR-Geräte müsst Ihr selbst bestimmen. Grundsätzlich sind aber Geräte wie der Hermes-Lite 2 bereits ohne diese speziellen Optionen nutzbar, denn das HPSDR-Protokoll 1 (alt) und HPSDR-Protokoll 2 (neu) ist immer aktiviert. Der Rest sind einfach zusätzliche SDR, die eben nicht das HPSDR-Protokoll sprechen oder spezielle Anpassungen erfordern.

Bitte lasst auch folgende Optionen so, wie sie sind:

DESKTOP=ON
ATU=OFF
DEVEL=OFF

Zur Erklärung, denn diese gibt es im piHPSDR nämlich nicht:

  • DESKTOP=ON
    Das ist die wichtigste Option, denn diese aktiviert meine Erweiterungen und macht deskHPSDR zu dem, was es ist. Also immer auf ON lassen.
  • ATU=OFF
    Hier habe ich etwas eingebaut, wenn man wie ich einen vollautomatischen Antennentuner verwendet, der per HF abgestimmt werden muss: Wenn man das Band wechselt, regelt deskHPSDR die TX-Leistung immer auf 1 herunter und merkt sich die vorige Einstellung. Erst wenn man EINMAL die TUNE-Prozedur verwendet hat, um u.a. den ATU abzustimmen, wird danach die ursprüngliche TX-Leistung wieder hergestellt. Gleichzeitig ist im TX-Menü die Option TUNE USE DRIVE deaktiviert, die bedeutet, man muss im TX-Menü ein TUNE DRIVE LEVEL definieren, welches dann immer die TUNE-Funktion verwendet, um einen Abstimmträger zu erzeugen. Das habe ich so gebaut, da in meinem Fall meine PA immer nach dem Hermes-Lite 2 eingeschleift und aktiv ist, ich also meinen ATU mit der PA abstimmen muss. Der Hintergrund ist einfach, die 5W des Hermes-Lite 2 reichen meinem Tuner nicht, er benötigt 25-30W Abstimmleistung. Deswegen gehts nur mit PA und um deren MOSFETs vor Fehlbedienung etwas zu schützen, habe ich diese automatische Leistungsreduzierung bei Bandwechsel eingebaut. Signalisiert wird das zusätzlich auf der Bedienoberfläche mit TUNED in rot (noch nicht abgestimmt) bzw. grün (abgestimmt und TX-Leistung wiederhergestellt). Standardmässig ist diese Sonderfunktion AUS, weswegen auch die Option ATU=OFF gesetzt ist.
  • DEVEL=OFF
    Das ist für Softwareentwicklung gedacht, die noch nicht abgeschlossen ist und mehr oder weniger neue Funktionen zum Testen bereitstellt. Da in diesem Falle auch mal Fehlfunktionen auftreten können, lasst diese bitte also auf OFF, es ist eher für mich nur zum Testen gedacht.

Geändertes Arbeitsverzeichnis bei deskHPSDR

Um einen eventuellen Paralleleinsatz piHPSDR und deskHPSDR möglich zu machen, habe ich das Ablage- oder auch Arbeitsverzeichnis umbenannt:

  • unter macOS:
    piHPSDR $HOME/Library/Application Support/piHPSDR
    deskHPSDR $HOME/Library/Application Support/deskHPSDR
  • unter Linux:
    piHPSDR $HOME/.config/pihpsdr
    deskHPSDR $HOME/.config/deskhpsdr

$HOME steht dabei immer für das aktuelle Nutzerverzeichnis, da ja in Mehrbenutzersystemen wie Linux oder macOS jeder angelegte Benutzer immer ein eigenes Home-Verzeichnis bekommt, meist unter /home/<name_des_nutzers> oder bei macOS unter /Users/<name_des_nutzers>.
Zur Kontrolle wird jetzt auch das akuelle Arbeitsverzeichnis auf dem Startfenster angezeigt, also das, was vor dem Discovery aufgeht.

Update deskHPSDR mithilfe von Github

Von Zeit zu Zeit aktualisiere ich den Sourcecode von deskHPSDR. Dann sollte man es also auch von Zeit zu Zeit mal aktualisieren, was in dem Falle heisst:

  • Download bzw. Aktualisierung des aktuellen Sourcecodes, der bei github.com von mir bereitgestellt wird
  • Bereinigung einer bereits schon compilierten Version
  • Neucompilieren, um die neue, geänderte Version wieder als startbares Programm zu erzeugen

Dazu benötigen wir wieder unsere Terminal App:

~$ cd $HOME
~$ cd src/deskhpsdr
~/src/deskhpsdr$ git pull
~/src/deskhpsdr$ make clean
~/src/deskhpsdr$ make macapp

Hinweis: Ändert man selbst etwas am Sourcecode in dem von Github.com geclonten Repository vom deskHPSDR, wird git pull leider fehlschlagen, da git dann nicht mehr weiß, welche Änderungen die letzten, aktuellen waren. In diesem Fall einfach nochmals das ganze Repository des deskHPSDR neu clonen. Natürlich kann man dieses Problem lösen, der Weg ist aber nicht ganz trivial, deswegen verzichte ich an dieser Stelle auf die Beschreibung der Lösung.

In einem der nächsten Beiträge werde ich das, was ich hier für macOS ausführlich beschrieben habe, nochmal für Linux aufbereiten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert