Forums › BB Series Discussions › BB60C-API for ARM › Reply To: BB60C-API for ARM
scubajosh
- This reply was modified 3 months, 3 weeks ago by
scubajosh.
macOS Apple Silicon (aarch64 / M-series) native library support for BB60C
Hi Signal Hound team,
We’re integrating the BB60C into a Python application on macOS Apple Silicon (M1/M2/M3/M4). The lib/aarch64/libbb_api.so.5.0.10 in your SDK zip is a Linux ELF shared object compiled for the SYSV ABI. macOS uses the Mach-O binary format — CDLL() (Python ctypes) and dlopen() cannot load an ELF .so on macOS regardless of CPU architecture. Even though both the Jetson and Apple Silicon are aarch64, the OS ABIs are incompatible.
**What we need:** a macOS aarch64 build of bb_api as a .dylib (Mach-O shared library).
**What that requires on your end:**
1. **Build toolchain** — compile on macOS (Xcode clang or clang from Homebrew targeting arm64-apple-macosx). The Jetson/Ubuntu g++ build cannot produce Mach-O output.
2. **Dependencies to swap:**
– libusb-1.0 → use the macOS Homebrew build (brew install libusb), or link against IOUSBLib.framework directly. The libusb project ships macOS ARM64 builds.
– libftd2xx → FTDI ships a macOS ARM64 D2XX driver (.dylib) at ftdichip.com — the same download page you reference in README_aarch64.txt has a macOS section.
3. **Link flags** — replace -Wl,-rpath Linux syntax with macOS equivalents:
`
clang++ sources -o libbb_api.dylib -dynamiclib \
-install_name @rpath/libbb_api.dylib \
-arch arm64 \
-target arm64-apple-macosx11.0 \
-lusb-1.0 -lftd2xx \
-Wl,-rpath,@loader_path
`
4. **USB device permissions** — on macOS the equivalent of udev rules is an IOUSBLib entitlement or a signed driver kext/dext. For development/testing, running with elevated permissions or via a USB user-space claim (which libusb handles automatically on macOS) is sufficient without a kernel driver.
5. **Deliverable** — a lib/macos_arm64/libbb_api.dylib (or libbb_api.N.N.N.dylib with a symlink) in the SDK zip, alongside any required libftd2xx.dylib. The libusb-1.0.dylib can be expected as a Homebrew dependency rather than bundled.
**The ARM64 limitation note in your README** (sweep/IQ only is fine — we only need IQ streaming and sweep modes.
**( 1 kHz min RBW will not work for security TSCM work I would need at least 300hz RBW)
