Skip to content

Prepare a Linux development host

Use Linux for host tools, Python bindings and ARM cross-compilation. The emulator frontend also needs Qt and compatible multimedia libraries. Firmware is imported separately. PySide6 availability depends on the Python version and host architecture; use the CLI if the Console's renderer is absent.

1. Install dependencies

For the installed host tools, use Python 3.11–3.14 and a virtual environment:

sudo apt update
sudo apt install python3 python3-venv
python3 -m venv ~/.venvs/symbian
source ~/.venvs/symbian/bin/activate
pip install symbian-platform
symbian doctor

The wheels support x86_64 and aarch64 with glibc 2.28 or later. The native host libraries are included; building applications also requires the native target SDK. Follow Getting started for SDK selection.

Building from a source checkout

Follow the Linux tab in Prepare tools and source for Ubuntu dependency installation, static host libraries and the Python source environment. Use CMake 3.28+, Ninja 1.12+ and matching LLVM tools. SDK export discovers clang++, clang, ld.lld, llvm-ar and llvm-ranlib from PATH; set SYMBIAN_LLVM_BIN to one LLVM bin directory when multiple versions are installed. The pinned guest runtime needs Clang 23.

For host native and Python tests, from the checkout:

export SYMBIAN_DEPS_PREFIX="$PWD/.symbian/host-deps"
scripts/bootstrap_wheel_deps.sh
cmake --preset debug
cmake --build --preset debug --parallel 4
ctest --preset debug
uv run pytest -q

build/debug/compile_commands.json records compiler commands. See the host build guide for wheel construction and installed checks.

2. Build an application

Install the native SDK archive, then follow Create a standalone application. Native archives need glibc 2.39 or later and include LLVM, CMake, Ninja and resource tools. You can also build the SDK from the prepared source checkout. The CMake toolchain selects an ARM target independently of the host. Its compilation database contains --target=armv6-none-eabi or the selected ARMv5T triple.

Build and inspect describes the ELF and E32 outputs. A build does not execute the application; use the emulator or target device to check runtime behavior.

3. Install and run the emulator

Install the compatible emulator bundle for your Linux architecture. It supplies Qt and its multimedia libraries:

symbian emulator install
symbian emulator doctor

The emulator has its own release version. See Install the emulator for selecting or rolling back a version. To build it yourself, follow Build the emulator.

Import local firmware using the firmware guide. SDK launch and guest-debug wrappers accept the Linux executable and discover gdb-multiarch when arm-none-eabi-gdb is absent. See Run and Debug.

For unattended Qt sessions on a host without a display, use xvfb-run -a with an owned disposable instance. Inspect the guest exit report as well as the frontend log when diagnosing failures.

sudo apt install xvfb
xvfb-run -a symbian app run --project ~/dev/hello_time

4. USB devices

Use symbian device list to find the connected phone. If descriptor inspection or MTP transfer reports insufficient USB permissions, grant access to Nokia USB devices for the active desktop user with a udev rule:

sudo tee /etc/udev/rules.d/70-symbian-nokia.rules >/dev/null <<'EOF'
SUBSYSTEM=="usb", ATTR{idVendor}=="0421", TAG+="uaccess"
EOF
sudo udevadm control --reload-rules

Disconnect and reconnect the phone, then list it again. This rule uses Nokia's USB vendor ID; adapt it for another manufacturer. A mounted mass-storage volume also needs normal filesystem write permissions. Close a desktop MTP browser before using the SDK's MTP session on the same phone. See Connect a device and the complete application installation sequence.