#api-bindings #open-harmony #harmony-os #ffi

ohos-sys

Bindings to the native API of OpenHarmony OS

11 unstable releases (3 breaking)

0.4.0 Oct 29, 2024
0.3.1 Sep 5, 2024
0.3.0 Aug 29, 2024
0.2.2 Aug 18, 2024
0.1.0 Apr 29, 2024

#1 in #open-harmony

Download history 1417/week @ 2024-08-10 1214/week @ 2024-08-17 1248/week @ 2024-08-24 1121/week @ 2024-08-31 998/week @ 2024-09-07 657/week @ 2024-09-14 697/week @ 2024-09-21 691/week @ 2024-09-28 1305/week @ 2024-10-05 834/week @ 2024-10-12 1068/week @ 2024-10-19 973/week @ 2024-10-26 963/week @ 2024-11-02 754/week @ 2024-11-09 875/week @ 2024-11-16 639/week @ 2024-11-23

3,377 downloads per month
Used in 2 crates

Apache-2.0

280KB
4K SLoC

ohos-sys

FFI-bindings for the native API of OpenHarmony OS. See the documentation for a list of supported components. This crate is under active development, and not officially affiliated with OpenHarmony OS.

Development

The current bindings are generated with bindgen using scripts/generate_bindings.sh. A separate file is generated for each API version, and (assuming no breaking changes) the new additions are manually copied to an apiXX_additions.rs file, which is included as a module if feature = api-XX is selected. The generated file drawing_apiXX.rs should be committed to version control, so we can easily rerun the script on a patch-release for a given API-level and see what changed. The file itself is however not needed, and will be excluded from crates.io releases.

Contributing

There are still quite a few OpenHarmony APIs missing. Feel free to contribute missing APIs, but be sure to adapt the script, so your bindings are reproducible! Please also check the following:

  • Ensure that opaque struct definitions do not derive Copy, Clone and Debug.
  • Blocklist all unnecessary type definitions, e.g. from the C standard library.
  • Preferably generate the bindings with libclang in C mode. However, if a header file is not C-compliant due to an issue of the OpenHarmony SDK, then setting libclang to C++ mode is fine.
  • Be sure to guard the new component behind a cargo feature and document the feature in Cargo.toml.
  • If you did not generate the bindings with API-level 10, specify which API-level you generated the bindings with and guard the generated module behind the corresponding api-level feature flag.
  • Installing bindgen: We require at least bindgen 0.70.0, with the prettyplease feature enabled. You can install it by running cargo install bindgen-cli --features prettyplease

License

This crate is licensed under the Apache-2.0 license, matching the OpenHarmony OS SDK.

Dependencies