Installation#
heliaPROFILER (hpx) needs Python plus a small set of embedded-development
tools: an ARM cross-compiler, CMake/Ninja, and SEGGER J-Link software. Power
capture additionally needs a Joulescope JS110/JS220 and, on Linux, a udev
rule for non-root USB access.
Alpha
heliaPROFILER is pre-1.0. Breaking changes may land on minor
versions until v1.0 — pin an exact version (pip install
helia-profiler==0.1.0) for anything long-lived.
Requirements#
| Dependency | Version | Purpose |
|---|---|---|
| Python | >= 3.11, < 3.13 |
Runtime |
arm-none-eabi-gcc |
13.x or 14.x | Default ARM cross-compiler |
| CMake | >= 3.24 |
Build system |
| Ninja | any | Build backend |
| SEGGER J-Link software | >= 7.80 |
Flash and RTT/SWO capture |
neuralspotx (nsx) |
latest 0.7.x |
Firmware build pipeline (installed automatically as a dependency) |
armclang and ATfE are optional alternative toolchains — see
Toolchains. A Joulescope JS110/JS220 is optional
and only needed for power capture — see Power Measurement.
1. Install heliaPROFILER#
Extras:
pip install 'helia-profiler[aot]' # heliaAOT compiler support
pip install 'helia-profiler[analysis]' # model compute/parameter analysis, no hardware needed
Power-measurement support (pyjoulescope_driver) ships as a core
dependency — no extra install needed, just the udev rule below on Linux.
2. ARM GNU Toolchain (arm-none-eabi-gcc)#
For a newer compiler than your distro packages, download the
Arm GNU Toolchain
tarball and put its bin/ directory on PATH:
Download the macOS package from the
Arm GNU Toolchain Downloads
page and install it (default location
/Applications/ArmGNUToolchain/), then add it to PATH:
Download the Windows installer from the Arm GNU Toolchain Downloads page and run it — check "Add path to environment variable" during setup. Verify in a new terminal:
3. CMake and Ninja#
4. SEGGER J-Link software#
hpx drives J-Link through SEGGER Commander (JLinkExe on Linux/macOS,
JLink.exe on Windows) for flashing and pylink-square
(RTT/SWO capture, installed automatically with heliaPROFILER).
Discovery checks JLINK_PATH first, then both executable names on PATH, then
common SEGGER install locations. Set JLINK_PATH to the full executable path
for non-standard installations.
Download the .deb/.tgz installer from
segger.com/downloads/jlink
and install it. The SEGGER installer sets up the udev rules needed for
non-root USB access to the J-Link probe; reboot or replug the probe
afterward if hpx probes list doesn't see it.
Download and run the .pkg installer from
segger.com/downloads/jlink.
Download and run the .exe installer from
segger.com/downloads/jlink.
Drivers are installed automatically.
heliaPROFILER bundles a pinned, tested copy of the permissively licensed SEGGER RTT target sources. No separate RTT source checkout is required for normal use. The SEGGER J-Link host software remains a separate installation.
For testing another RTT release, hpx resolves explicit overrides in this order:
target.segger_rtt_pathin configuration orSession.with_target()- The
SEGGER_RTT_PATHenvironment variable - The bundled RTT target sources
An override directory must contain both RTT/SEGGER_RTT.c and
Config/SEGGER_RTT_Conf.h:
Prefer explicit profile configuration over modifying PATH:
5. Joulescope (optional, for power capture)#
pyjoulescope_driver is a core dependency, so no extra pip install is
needed — just make the USB device accessible:
Joulescope needs a udev rule granting your user access to its USB
device before hpx profile --power will find it without root. Follow
the udev setup instructions from the
Joulescope project, then
replug the device.
No extra driver setup — plug in the Joulescope and it should enumerate.
Some Windows configurations need a WinUSB driver bound to the
Joulescope's USB interface (for example via
Zadig) before pyjoulescope_driver can open
it. If hpx profile --power reports the device isn't found, check
Device Manager for an unbound interface first.
See Power Measurement for wiring and sync-GPIO setup.
Verify everything: hpx doctor#
Expected output (columns will vary by platform; a dash – means an
optional tool wasn't found):
Toolchain Check
╭────┬────────────────────────────────────┬────────────────────────────────╮
│ │ Tool │ Path │
├────┼────────────────────────────────────┼────────────────────────────────┤
│ ✓ │ ARM GCC toolchain │ /usr/bin/arm-none-eabi-gcc │
│ ✓ │ CMake (>= 3.24) │ /usr/bin/cmake │
│ ✓ │ Ninja build system │ /usr/bin/ninja │
│ ✓ │ SEGGER J-Link commander │ /usr/bin/JLinkExe │
│ ✓ │ neuralspotx Python package │ installed │
│ ✓ │ pylink Python package (RTT/SWO │ installed │
│ │ transport) │ │
│ – │ heliaAOT compiler │ not installed │
│ – │ ARM Compiler (armclang) │ not installed │
│ – │ ARM fromelf (armclang) │ not installed │
╰────┴────────────────────────────────────┴────────────────────────────────╯
All required tools found.
✓ rows are required; – rows are optional (only needed for heliaAOT or
armclang). Once every required row shows ✓, continue to
First Profile.