blob: 89573490a71361366561c0aa6a257267dbd7f169 [file] [log] [blame]
.. _module-pw_rust:
=======
pw_rust
=======
Rust support in pigweed is **highly** experimental. Currently functionality
is split between Bazel and GN support.
-----
Bazel
-----
Bazel support is based on `rules_rust <https://github.com/bazelbuild/rules_rust>`_
and supports a rich set of targets for both host and target builds.
Building and Running the Embedded Examples
==========================================
The examples can be built for both the ``lm3s6965evb`` and ``microbit``
QEMU machines. The examples can be built and run using the following commands
where ``PLATFORM`` is one of ``lm3s6965evb`` or ``microbit``.
embedded_hello
--------------
.. code-block:: bash
$ bazel build //pw_rust/examples/embedded_hello:hello \
--platforms //pw_build/platforms:${PLATFORM}
$ qemu-system-arm \
-machine ${PLATFORM} \
-nographic \
-semihosting-config enable=on,target=native \
-kernel ./bazel-bin/pw_rust/examples/embedded_hello/hello
Hello, Pigweed!
tokenized_logging
-----------------
.. code-block:: bash
$ bazel build //pw_rust/examples/tokenized_logging:tokenized_logging \
--//pw_log/rust:pw_log_backend=//pw_rust/examples/tokenized_logging:pw_log_backend\
--platforms //pw_build/platforms:${PLATFORM}
$ qemu-system-arm \
-machine ${PLATFORM} \
-nographic \
-semihosting-config enable=on,target=native \
-kernel ./bazel-bin/pw_rust/examples/tokenized_logging/tokenized_logging \
| python -m pw_tokenizer.detokenize \
base64 \
./bazel-bin/pw_rust/examples/tokenized_logging/tokenized_logging
--
GN
--
In GN, currently only building a single host binary using the standard
libraries is supported. Windows builds are currently unsupported.
Building
========
To build the sample rust targets, you need to enable
``pw_rust_ENABLE_EXPERIMENTAL_BUILD``:
.. code-block:: bash
$ gn gen out --args="pw_rust_ENABLE_EXPERIMENTAL_BUILD=true"
Once that is set, you can build and run the ``hello`` example:
.. code-block:: bash
$ ninja -C out host_clang_debug/obj/pw_rust/example/bin/hello
$ ./out/host_clang_debug/obj/pw_rust/examples/host_executable/bin/hello
Hello, Pigweed!
------------------
Third Party Crates
------------------
Thrid party crates are vendored in the
`third_party/rust_crates <https://pigweed.googlesource.com/third_party/rust_crates>`_
respository. Currently referencing these is only supported through the bazel
build.