| <!-- |
| Documentation/_templates/layout.html |
| |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. The |
| ASF licenses this file to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance with the |
| License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| License for the specific language governing permissions and limitations |
| under the License. |
| --> |
| |
| |
| |
| <!DOCTYPE html> |
| <html class="writer-html5" lang="en"> |
| <head> |
| <meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" /> |
| |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
| <title>Rust in NuttX — NuttX latest documentation</title> |
| <link rel="stylesheet" type="text/css" href="../_static/pygments.css" /> |
| <link rel="stylesheet" type="text/css" href="../_static/css/theme.css" /> |
| <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" /> |
| <link rel="stylesheet" type="text/css" href="../_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css" /> |
| <link rel="stylesheet" type="text/css" href="../_static/custom.css" /> |
| |
| |
| <link rel="shortcut icon" href="../_static/favicon.ico"/> |
| <script src="../_static/jquery.js"></script> |
| <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script> |
| <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> |
| <script src="../_static/doctools.js"></script> |
| <script src="../_static/sphinx_highlight.js"></script> |
| <script src="../_static/clipboard.min.js"></script> |
| <script src="../_static/copybutton.js"></script> |
| <script src="../_static/design-tabs.js"></script> |
| <script src="../_static/js/theme.js"></script> |
| <link rel="index" title="Index" href="../genindex.html" /> |
| <link rel="search" title="Search" href="../search.html" /> |
| <link rel="next" title="Interfacing with OP-TEE" href="optee.html" /> |
| <link rel="prev" title="Removing Device Drivers with NSH" href="remove_device_drivers_nsh.html" /> |
| </head> |
| |
| <body class="wy-body-for-nav"> |
| <div class="wy-grid-for-nav"> |
| <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |
| <div class="wy-side-scroll"> |
| <div class="wy-side-nav-search" > |
| |
| <a href="../index.html" class="icon icon-home"> NuttX |
| |
| |
| |
| </a> |
| |
| <!-- this version selector is quite ugly, should be probably replaced by something |
| more modern --> |
| |
| <div class="version-selector"> |
| <select onchange="javascript:location.href = this.value;"> |
| |
| <option value="../../latest" selected="selected">latest</option> |
| |
| <option value="../../10.0.0" >10.0.0</option> |
| |
| <option value="../../10.0.1" >10.0.1</option> |
| |
| <option value="../../10.1.0" >10.1.0</option> |
| |
| <option value="../../10.2.0" >10.2.0</option> |
| |
| <option value="../../10.3.0" >10.3.0</option> |
| |
| <option value="../../11.0.0" >11.0.0</option> |
| |
| <option value="../../12.0.0" >12.0.0</option> |
| |
| <option value="../../12.1.0" >12.1.0</option> |
| |
| <option value="../../12.2.0" >12.2.0</option> |
| |
| <option value="../../12.2.1" >12.2.1</option> |
| |
| <option value="../../12.3.0" >12.3.0</option> |
| |
| <option value="../../12.4.0" >12.4.0</option> |
| |
| <option value="../../12.5.0" >12.5.0</option> |
| |
| <option value="../../12.5.1" >12.5.1</option> |
| |
| <option value="../../12.6.0" >12.6.0</option> |
| |
| <option value="../../12.7.0" >12.7.0</option> |
| |
| <option value="../../12.8.0" >12.8.0</option> |
| |
| <option value="../../12.9.0" >12.9.0</option> |
| |
| <option value="../../12.10.0" >12.10.0</option> |
| |
| <option value="../../12.11.0" >12.11.0</option> |
| |
| </select> |
| </div> |
| |
| |
| <div role="search"> |
| <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> |
| <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> |
| <input type="hidden" name="check_keywords" value="yes" /> |
| <input type="hidden" name="area" value="default" /> |
| </form> |
| </div> |
| |
| </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> |
| <p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p> |
| <ul class="current"> |
| <li class="toctree-l1"><a class="reference internal" href="../index.html">Home</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../introduction/index.html">Introduction</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../quickstart/index.html">Getting Started</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../contributing/index.html">Contributing</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../platforms/index.html">Supported Platforms</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../components/index.html">OS Components</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../applications/index.html">Applications</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../implementation/index.html">Implementation Details</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../reference/index.html">API Reference</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../faq/index.html">FAQ</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../debugging/index.html">Debugging</a></li> |
| <li class="toctree-l1 current"><a class="reference internal" href="index.html">Guides</a><ul class="current"> |
| <li class="toctree-l2"><a class="reference internal" href="nfs.html">NFS Client How-To</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="usbtrace.html">USB Device Trace</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="simulator.html">Simulator</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="rndis.html">How to use RNDIS</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="drivers.html">Drivers</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="cpp_cmake.html">C++ Example using CMake</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="pysimcoder.html">pysimCoder integration with NuttX</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="customboards.html">Custom Boards How-To</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="customapps.html">Custom Apps How-to</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="citests.html">Running CI Test Locally</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="zerolatencyinterrupts.html">High Performance: Zero Latency Interrupts, Maskable Nested Interrupts</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="fortify.html">Fortify</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="nestedinterrupts.html">Nested Interrupts</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="ofloader.html">Open Flash Loader</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="testingtcpip.html">Testing TCP/IP Network Stacks</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="automounter.html">Auto-Mounter</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="stm32nullpointer.html">STM32 Null Pointer Detection</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="stm32ccm.html">STM32 CCM Allocator</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="etcromfs.html">etc romfs</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="thread_local_storage.html">Thread Local Storage</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="devicetree.html">Device Tree</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="changing_systemclockconfig.html">Changing the System Clock Configuration</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="usingkernelthreads.html">Using Kernel Threads</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="armv7m_runtimestackcheck.html">ARMv7-M Run Time Stack Checking</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="include_files_board_h.html">Including Files in board.h</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="specialstuff_in_nuttxheaderfiles.html">Why can’t I put my special stuff in NuttX header files?</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="kernel_threads_with_custom_stacks.html">Kernel Threads with Custom Stacks</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="versioning_and_task_names.html">Versioning and Task Names</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="logging_rambuffer.html">Logging to a RAM Buffer</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="ipv6.html">IPv6</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="integrate_newlib.html">Integrating with Newlib</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="protected_build.html">NuttX Protected Build</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="platform_directories.html">Platform Directories</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="port_drivers_to_stm32f7.html">Porting Drivers to the STM32 F7</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="semihosting.html">Semihosting</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="renode.html">Run NuttX on Renode</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="signal_events_interrupt_handlers.html">Signaling Events from Interrupt Handlers</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="signaling_sem_priority_inheritance.html">Signaling Semaphores and Priority Inheritance</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="smaller_vector_tables.html">Smaller Vector Tables</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="port.html">How to port</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="updating_release_system_elf.html">Updating a Release System with ELF Programs</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="partially_linked_elf.html">ELF Programs – With Symbol Tables</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="fully_linked_elf.html">ELF Programs – No Symbol Tables</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="building_nuttx_with_app_out_of_src_tree.html">Building NuttX with Applications Outside the Source Tree</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="building_uclibcpp.html">Building uClibc++</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="custom_app_directories.html">Custom Application Directories</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="multiple_nsh_sessions.html">Multiple NSH Sessions</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="nsh_network_link_management.html">NSH Network Link Management</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="ram_rom_disks.html">RAM Disks and ROM Disks</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="reading_can_msgs.html">Reading CAN Messages</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="remove_device_drivers_nsh.html">Removing Device Drivers with NSH</a></li> |
| <li class="toctree-l2 current"><a class="current reference internal" href="#">Rust in NuttX</a><ul> |
| <li class="toctree-l3"><a class="reference internal" href="#introduction">Introduction</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="#prerequisites">Prerequisites</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="#supported-platforms">Supported Platforms</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="#getting-started">Getting Started</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="#specifying-target-cpu-for-optimization">Specifying Target CPU for Optimization</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="#editor-integration">Editor Integration</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l2"><a class="reference internal" href="optee.html">Interfacing with OP-TEE</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../glossary.html">Glossary</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../logos/index.html">NuttX Logos</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../_tags/tagsindex.html">Tags</a></li> |
| </ul> |
| |
| </div> |
| </div> |
| </nav> |
| |
| <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |
| <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |
| <a href="../index.html">NuttX</a> |
| </nav> |
| |
| <div class="wy-nav-content"> |
| <div class="rst-content"> |
| <div role="navigation" aria-label="Page navigation"> |
| <ul class="wy-breadcrumbs"> |
| <li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li> |
| <li class="breadcrumb-item"><a href="index.html">Guides</a></li> |
| <li class="breadcrumb-item active">Rust in NuttX</li> |
| <li class="wy-breadcrumbs-aside"> |
| <a href="https://github.com/apache/nuttx/blob/master/Documentation/guides/rust.rst" class="fa fa-github"> Edit on GitHub</a> |
| </li> |
| </ul> |
| <hr/> |
| </div> |
| <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |
| <div itemprop="articleBody"> |
| |
| <section id="rust-in-nuttx"> |
| <h1>Rust in NuttX<a class="headerlink" href="#rust-in-nuttx" title="Permalink to this heading"></a></h1> |
| <div class="admonition warning"> |
| <p class="admonition-title">Warning</p> |
| <p>This guide is under development. Rust support in NuttX is experimental.</p> |
| </div> |
| <section id="introduction"> |
| <h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this heading"></a></h2> |
| <p>NuttX is exploring Rust integration to provide memory safety guarantees and modern |
| language features while maintaining its small footprint and real-time capabilities.</p> |
| <p>This guide covers:</p> |
| <ul class="simple"> |
| <li><p>Setting up Rust toolchain for NuttX development</p></li> |
| <li><p>Building Rust components with NuttX</p></li> |
| <li><p>Interoperability between Rust and C</p></li> |
| <li><p>Testing Rust components</p></li> |
| </ul> |
| </section> |
| <section id="prerequisites"> |
| <h2>Prerequisites<a class="headerlink" href="#prerequisites" title="Permalink to this heading"></a></h2> |
| <ul class="simple"> |
| <li><p>Rust toolchain installed (rustup recommended)</p></li> |
| <li><p>NuttX build environment configured</p></li> |
| <li><p>Basic knowledge of Rust and NuttX development</p></li> |
| </ul> |
| </section> |
| <section id="supported-platforms"> |
| <h2>Supported Platforms<a class="headerlink" href="#supported-platforms" title="Permalink to this heading"></a></h2> |
| <ul class="simple"> |
| <li><p>AArch64</p></li> |
| <li><p>ARMv7-A</p></li> |
| <li><p>ARMv6-M</p></li> |
| <li><p>ARMv7-M</p></li> |
| <li><p>ARMv8-M</p></li> |
| <li><p>RISCV32</p></li> |
| <li><p>RISCV64</p></li> |
| <li><p>X86</p></li> |
| <li><p>X86_64</p></li> |
| </ul> |
| </section> |
| <section id="getting-started"> |
| <h2>Getting Started<a class="headerlink" href="#getting-started" title="Permalink to this heading"></a></h2> |
| <ol class="arabic simple"> |
| <li><p>Install Rust toolchain and switch to nightly</p></li> |
| </ol> |
| <p>Please refer to the official Rust installation guide for more details: <a class="reference external" href="https://www.rust-lang.org/tools/install">https://www.rust-lang.org/tools/install</a></p> |
| <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>rustup<span class="w"> </span>toolchain<span class="w"> </span>install<span class="w"> </span>nightly |
| rustup<span class="w"> </span>default<span class="w"> </span>nightly |
| </pre></div> |
| </div> |
| <ol class="arabic simple" start="2"> |
| <li><p>Prepare NuttX build environment</p></li> |
| </ol> |
| <p>Please ensure that you have a working NuttX build environment, and with the following PR merged or cherry-picked:</p> |
| <ul class="simple"> |
| <li><p><a class="reference external" href="https://github.com/apache/nuttx-apps/pull/2487">https://github.com/apache/nuttx-apps/pull/2487</a></p></li> |
| <li><p><a class="reference external" href="https://github.com/apache/nuttx/pull/15469">https://github.com/apache/nuttx/pull/15469</a></p></li> |
| </ul> |
| <ol class="arabic simple" start="3"> |
| <li><p>Enable essential kernel configurations</p></li> |
| </ol> |
| <p>Please enable the following configurations in your NuttX configuration:</p> |
| <ul class="simple"> |
| <li><p>CONFIG_SYSTEM_TIME64</p></li> |
| <li><p>CONFIG_FS_LARGEFILE</p></li> |
| <li><p>CONFIG_TLS_NELEM = 16</p></li> |
| <li><p>CONFIG_DEV_URANDOM</p></li> |
| </ul> |
| <p>The <cite>rv-virt:nsh</cite> board using make as the build system is recommended for testing Rust applications as it has been verified to work with this configuration.</p> |
| <p>For <cite>rv-virt:nsh</cite> board, you should disable <cite>CONFIG_ARCH_FPU</cite> configuration since RISCV32 with FPU is not supported yet.</p> |
| <ol class="arabic simple" start="4"> |
| <li><p>Enable sample application</p></li> |
| </ol> |
| <p>Please enable the sample application in your NuttX configuration: |
| - CONFIG_EXAMPLES_HELLO_RUST_CARGO</p> |
| <ol class="arabic simple" start="5"> |
| <li><p>Build and run the sample application</p></li> |
| </ol> |
| <p>Build the NuttX image and run it on your target platform:</p> |
| <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>qemu-system-riscv32<span class="w"> </span>-semihosting<span class="w"> </span>-M<span class="w"> </span>virt,aclint<span class="o">=</span>on<span class="w"> </span>-cpu<span class="w"> </span>rv32<span class="w"> </span>-smp<span class="w"> </span><span class="m">8</span><span class="w"> </span>-bios<span class="w"> </span>nuttx/nuttx<span class="w"> </span>-nographic |
| |
| NuttShell<span class="w"> </span><span class="o">(</span>NSH<span class="o">)</span><span class="w"> </span>NuttX-12.8.0 |
| nsh><span class="w"> </span>hello_rust_cargo |
| <span class="o">{</span><span class="s2">"name"</span>:<span class="s2">"John"</span>,<span class="s2">"age"</span>:30<span class="o">}</span> |
| <span class="o">{</span><span class="s2">"name"</span>:<span class="s2">"Jane"</span>,<span class="s2">"age"</span>:25<span class="o">}</span> |
| Deserialized:<span class="w"> </span>Alice<span class="w"> </span>is<span class="w"> </span><span class="m">28</span><span class="w"> </span>years<span class="w"> </span>old |
| Pretty<span class="w"> </span>JSON: |
| <span class="o">{</span> |
| <span class="s2">"name"</span>:<span class="w"> </span><span class="s2">"Alice"</span>, |
| <span class="s2">"age"</span>:<span class="w"> </span><span class="m">28</span> |
| <span class="o">}</span> |
| Hello<span class="w"> </span>world<span class="w"> </span>from<span class="w"> </span>tokio! |
| </pre></div> |
| </div> |
| <p>Congratulations! You have successfully built and run a Rust application on NuttX.</p> |
| </section> |
| <section id="specifying-target-cpu-for-optimization"> |
| <h2>Specifying Target CPU for Optimization<a class="headerlink" href="#specifying-target-cpu-for-optimization" title="Permalink to this heading"></a></h2> |
| <p>To optimize your Rust application for a specific CPU, you can use the <cite>RUSTFLAGS</cite> environment variable to specify the target CPU. This can significantly improve performance by enabling CPU-specific optimizations.</p> |
| <p>The <cite>RUSTFLAGS</cite> environment variable is particularly useful when you are working with CPUs that share the same Instruction Set Architecture (ISA) but have different microarchitectures. For example, both the Cortex-M33 and Cortex-M55 share the <cite>thumbv8m.main</cite> target name, but they have different performance characteristics and features. By specifying the actual CPU core, you can take advantage of the specific optimizations and features of the target CPU, leading to better performance and efficiency.</p> |
| <p>For instance, if you are targeting a Cortex-M33, you would set the <cite>RUSTFLAGS</cite> environment variable as follows:</p> |
| <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">export</span><span class="w"> </span><span class="nv">RUSTFLAGS</span><span class="o">=</span><span class="s2">"-C target-cpu=cortex-m33"</span> |
| </pre></div> |
| </div> |
| <p>And for a Cortex-M55, you would use:</p> |
| <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">export</span><span class="w"> </span><span class="nv">RUSTFLAGS</span><span class="o">=</span><span class="s2">"-C target-cpu=cortex-m55"</span> |
| </pre></div> |
| </div> |
| <p>This ensures that the Rust compiler generates optimized code tailored to the specific CPU core, rather than a generic ISA.</p> |
| <ol class="arabic simple"> |
| <li><p>Set the <cite>RUSTFLAGS</cite> environment variable to include the <cite>–target-cpu</cite> flag:</p></li> |
| </ol> |
| <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">export</span><span class="w"> </span><span class="nv">RUSTFLAGS</span><span class="o">=</span><span class="s2">"-C target-cpu=your_cpu_model"</span> |
| </pre></div> |
| </div> |
| <p>Replace <cite>your_cpu_model</cite> with the specific CPU model you are targeting. For example, for an ARM Cortex-M4, you would use:</p> |
| <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">export</span><span class="w"> </span><span class="nv">RUSTFLAGS</span><span class="o">=</span><span class="s2">"-C target-cpu=cortex-m4"</span> |
| </pre></div> |
| </div> |
| <ol class="arabic simple" start="2"> |
| <li><p>Build your NuttX image with the specified target CPU:</p></li> |
| </ol> |
| <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>make |
| </pre></div> |
| </div> |
| <p>This will ensure that the Rust compiler generates optimized code for the specified CPU.</p> |
| </section> |
| <section id="editor-integration"> |
| <h2>Editor Integration<a class="headerlink" href="#editor-integration" title="Permalink to this heading"></a></h2> |
| <p>To enable proper IDE support for Rust development in NuttX, you’ll need to configure your editor to recognize the Rust project structure correctly. This section focuses on VS Code with rust-analyzer, which is the most popular setup.</p> |
| <ol class="arabic simple"> |
| <li><p>Create or update <cite>.vscode/settings.json</cite> in your NuttX workspace:</p></li> |
| </ol> |
| <div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> |
| <span class="w"> </span><span class="nt">"rust-analyzer.linkedProjects"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> |
| <span class="w"> </span><span class="s2">"nuttx-apps/examples/rust/slint/Cargo.toml"</span> |
| <span class="w"> </span><span class="p">]</span> |
| <span class="p">}</span> |
| </pre></div> |
| </div> |
| <ol class="arabic simple" start="2"> |
| <li><p>(Optional) If you’re using a custom target specification, you can set the <cite>rust-analyzer.cargo.target</cite> setting:</p></li> |
| </ol> |
| <div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> |
| <span class="w"> </span><span class="nt">"rust-analyzer.cargo.target"</span><span class="p">:</span><span class="w"> </span><span class="s2">"thumbv8m.main-nuttx-eabihf"</span> |
| <span class="p">}</span> |
| </pre></div> |
| </div> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>Since NuttX now supports the Rust standard library (std), specifying an exact target triple is usually not necessary. The default host target should work fine for most cases.</p> |
| <p>If you’re working with a crate that tightly depends on the NuttX target, you can specify the target triple as shown above to get more accurate code analysis.</p> |
| </div> |
| <p>This configuration helps rust-analyzer understand your project structure and provide accurate code analysis, auto-completion, and other IDE features while working with Rust code in NuttX.</p> |
| </section> |
| </section> |
| |
| |
| </div> |
| </div> |
| <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> |
| <a href="remove_device_drivers_nsh.html" class="btn btn-neutral float-left" title="Removing Device Drivers with NSH" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> |
| <a href="optee.html" class="btn btn-neutral float-right" title="Interfacing with OP-TEE" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> |
| </div> |
| |
| <hr/> |
| |
| <div role="contentinfo"> |
| <p>© Copyright 2023, The Apache Software Foundation.</p> |
| </div> |
| |
| |
| |
| </footer> |
| </div> |
| </div> |
| </section> |
| </div> |
| <script> |
| jQuery(function () { |
| SphinxRtdTheme.Navigation.enable(true); |
| }); |
| </script> |
| |
| </body> |
| </html> |