Builds PulseView and its sigrok libraries
natively for arm64 macOS, and packages a self-contained
/Applications/PulseView.app.
The old approach ran the 2018 x86_64 PulseView 0.4.2 .dmg under Rosetta. That
is no longer necessary — libsigrok, libsigrokdecode and pulseview all
build cleanly as native arm64 against Homebrew's Qt6.
make # full build + package /Applications/PulseView.app
open -a PulseViewRequires Homebrew. The build installs its own dependencies
(Qt6, glib/glibmm, boost, libusb/hidapi/libftdi/libserialport, doxygen, swig,
python@3.14) via brew.
| Command | What it does |
|---|---|
make |
Full from-scratch build + package the app |
make install |
Same as make (the app is the install) |
make package |
Repackage /Applications/PulseView.app from an existing build (no recompile) |
make run |
Launch the dev binary from the build tree |
make clean |
Remove downloaded sources + build prefix |
make distclean |
clean + remove the installed app |
make (via install.sh) clones three repos and builds them in order, all
under this directory:
- libsigrok (git) →
sigrok/prefix — needs Doxygen for the C++ bindings. - libsigrokdecode (git) →
sigrok/prefix — protocol decoders; linked against Homebrew's defaultpython@3.14. - pulseview (git, Qt6) →
pulseview/build/pulseview.
Then it packages everything into /Applications/PulseView.app: the binary, the
sigrok dylibs (rewritten to bundle-relative paths), the decoders, the fx2lafw
firmware, and Qt frameworks via macdeployqt. The app is self-contained except
for Homebrew's python@3.14, which the decoders link by absolute path.
The cloned sources (libsigrok/, libsigrokdecode/, pulseview/) and the
build prefix (sigrok/) are git-ignored — they're downloaded artifacts and
re-created by make.
patches/*.patch are applied to the fresh PulseView checkout on every build
(install.sh runs git apply after cloning). Currently:
pulseview-top-margin-clamp.patch— stops the first trace (D0) being clipped at, or pushed below, the top of the view when a stale savedv_offsetis restored. Top-aligns the trace stack when it fits the window; otherwise honours the saved scroll position but clamps it so the first trace can never be clipped.pulseview-default-samplerate-count.patch— sets the default acquisition parameters to 16 MHz sample rate and 1k sample limit when a device is selected (the driver clamps the rate to its nearest supported value).
- Why build the sigrok libs from git rather than the Homebrew bottles? PulseView
master uses decoder APIs (logic output channels, the
Glib::DateTimeheader packet) that the released 0.5.x bottles predate. Building all three from git keeps the versions self-consistent. - The fx2lafw firmware (needed for Saleae Logic clones to capture, not just
enumerate) has no Homebrew formula;
install.shdownloads the official blobs. - First launch may hit Gatekeeper (the app is ad-hoc signed, not notarized): right-click → Open once.