Skip to content

Build for OpenHarmony / HarmonyOS

NovaPhy has partial support for HarmonyOS. You can build the NovaPhy C++ modules through native compilation with DevBox. However, natively compiled Python modules cannot be loaded by the Python interpreter because of the strict permission strategy. Therefore, you must package NovaPhy into python-installer and install the repackaged python-installer using debugging tools (hdc).

Native Compile

vcpkg is not available on HarmonyOS. You have to download and install NovaPhy's dependencies manually.

Prerequisites

Steps

# Prepare prerequisites
export CC=clang
export CXX=clang++
python -m pip install pybind11

mkdir sysroot

# Build and install Eigen3
wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz
tar -xzf eigen-3.4.0.tar.gz
cd eigen-3.4.0
mkdir build
cmake -S . -B build --install-prefix="$(pwd)/../sysroot"
cmake --install build
cd ..

# Build and install TinyXML
wget https://github.com/leethomason/tinyxml2/archive/refs/tags/11.0.0.tar.gz
tar -xzf 11.0.0.tar.gz
cd tinyxml2-11.0.0
mkdir build
cmake -S . -B build --install-prefix="$(pwd)/../sysroot"
cmake --install build
cd ..

# Build NovaPhy
cd NovaPhy
mkdir build
cmake -S . -B build \
    "-DCMAKE_PREFIX_PATH=$(pwd)/../sysroot;$(python -m pybind11 --cmakedir)"

Cross Compile on Linux

For cross-compiling and packaging python-installer on Linux, the script scripts/ohos/build.sh can complete the process automatically. But before using the script, some configuration is needed.

Signing Certificate

You must generate the certificate for python-installer yourself:

  1. Download python-installer provided by OpenHarmony PC Developer.
  2. Open the project in DevEco Studio. Note that DevEco Studio only supports Windows and macOS. (If you have another method to obtain the certificate, this step is unnecessary.)
  3. Generate signature information via DevEco Studio.

After these steps, the build-profile.json of python-installer will contain a snippet similar to:

{
  "name": "default",
  "type": "HarmonyOS",
  "material": {
      "certpath": "path-to-cer",
      "keyAlias": "debugKey",
      "keyPassword": "<redacted>",
      "profile": "path-to-p7b",
      "signAlg": "SHA256withECDSA",
      "storeFile": "path-to-p12",
      "storePassword": "<redacted>"
  }
}

Copy the snippet and save it to a JSON file (e.g. sign-config.json). All three paths in the configuration must share a common parent directory.

Build Script

You also need the HarmonyOS command line tools.

export OHOS_CLI=/path/to/ohos-command-tools
./scripts/ohos/build.sh -S . -B build-ohos -s sign-config.json

The script builds python-installer with NovaPhy and installs it on the connected HDC device. If HDC cannot see the device, verify the cable, developer/debugging mode, and hdc list targets first. On Linux, configure a least-privilege udev rule for that device's vendor/product IDs (or use the distribution's HDC device-access group), then reload the rules and reconnect the device.

Do not apply recursive 0777 permissions to /dev/bus/usb: that grants every local user broad access to every USB device and is not a suitable persistent setup. Consult the HarmonyOS command-line tools guide for the current HDC host/device setup.