Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion cmake/nuttx_add_rust.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,8 @@ endfunction()
# hello
# CRATE_PATH
# ${CMAKE_CURRENT_SOURCE_DIR}/hello
# FEATURES
# sim
# )
# ~~~

Expand All @@ -142,6 +144,8 @@ function(nuttx_add_rust)
ONE_VALUE
CRATE_NAME
CRATE_PATH
MULTI_VALUE
FEATURES
REQUIRED
CRATE_NAME
CRATE_PATH
Expand All @@ -159,6 +163,10 @@ function(nuttx_add_rust)
set(RUST_PANIC_FLAGS "")
endif()

foreach(feature ${FEATURES})
list(APPEND RUST_FEATURE_FLAGS --features ${feature})
endforeach()

# Get the Rust target triple
nuttx_rust_target_triple(${LLVM_ARCHTYPE} ${LLVM_ABITYPE} ${LLVM_CPUTYPE}
RUST_TARGET)
Expand Down Expand Up @@ -198,7 +206,7 @@ function(nuttx_add_rust)
RUSTFLAGS=${RUST_PANIC_FLAGS} cargo build ${RUST_PROFILE_FLAG}
-Zbuild-std=std,panic_abort -Zjson-target-spec --manifest-path
${CRATE_PATH}/Cargo.toml --target ${RUST_TARGET} --target-dir
${RUST_BUILD_DIR}
${RUST_BUILD_DIR} ${RUST_FEATURE_FLAGS}
DEPENDS ${RUST_CRATE_SOURCES}
COMMENT "Building Rust crate ${CRATE_NAME}"
VERBATIM)
Expand Down
7 changes: 6 additions & 1 deletion examples/rust/hello/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,12 @@
if(CONFIG_EXAMPLES_HELLO_RUST_CARGO)

# Build the Rust crate using nuttx_add_rust
nuttx_add_rust(CRATE_NAME hello CRATE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
if(CONFIG_ARCH_SIM)
nuttx_add_rust(CRATE_NAME hello CRATE_PATH ${CMAKE_CURRENT_SOURCE_DIR}
FEATURES sim)
else()
nuttx_add_rust(CRATE_NAME hello CRATE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
endif()

nuttx_add_application(
NAME ${CONFIG_EXAMPLES_HELLO_RUST_CARGO_PROGNAME} STACKSIZE
Expand Down
3 changes: 3 additions & 0 deletions examples/rust/hello/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ edition = "2021"
[lib]
crate-type = ["staticlib"]

[features]
sim = []

[profile.dev]
panic = "abort"

Expand Down
6 changes: 5 additions & 1 deletion examples/rust/hello/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,12 @@ MODULE = $(CONFIG_EXAMPLES_HELLO_RUST_CARGO)
RUST_LIB := $(call RUST_GET_BINDIR,hello,$(APPDIR)/examples/rust)
RUST_SRCS := $(call RUST_CARGO_SRCS,hello,$(APPDIR)/examples/rust)

ifeq ($(CONFIG_ARCH_SIM),y)
HELLO_RUST_FEATURES := sim
endif

$(RUST_LIB): $(RUST_SRCS)
$(call RUST_CARGO_BUILD,hello,$(APPDIR)/examples/rust)
$(call RUST_CARGO_BUILD,hello,$(APPDIR)/examples/rust,$(HELLO_RUST_FEATURES))

context:: $(RUST_LIB)

Expand Down
7 changes: 6 additions & 1 deletion examples/rust/hello/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
extern crate serde;
extern crate serde_json;

use core::ffi::{c_char, c_int};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
Expand All @@ -11,7 +12,7 @@ struct Person {

// Function hello_rust_cargo without manglng
#[no_mangle]
pub extern "C" fn hello_rust_cargo_main() {
pub extern "C" fn hello_rust_cargo_main(_argc: c_int, _argv: *mut *mut c_char) -> c_int {
// Print hello world to stdout

let john = Person {
Expand Down Expand Up @@ -50,7 +51,11 @@ pub extern "C" fn hello_rust_cargo_main() {
println!("Hello world from tokio!");
});

#[cfg(not(feature = "sim"))]
loop {
// Do nothing
}

#[cfg(feature = "sim")]
0
}
9 changes: 6 additions & 3 deletions tools/Rust.mk
Original file line number Diff line number Diff line change
Expand Up @@ -90,11 +90,12 @@ endef

# Build Rust project using cargo
#
# Usage: $(call RUST_CARGO_BUILD,cratename,prefix)
# Usage: $(call RUST_CARGO_BUILD,cratename,prefix[,features])
#
# Inputs:
# cratename - Name of the Rust crate (e.g. hello)
# prefix - Path prefix to the crate (e.g. path/to/project)
# features - Optional Cargo features to enable
#
# Output:
# None, builds the Rust project
Expand All @@ -105,15 +106,17 @@ define RUST_CARGO_BUILD
RUSTFLAGS="-Zunstable-options -Cpanic=immediate-abort" \
cargo build --release -Zbuild-std=std,panic_abort -Zjson-target-spec \
--manifest-path $(2)/$(1)/Cargo.toml \
--target $(call RUST_TARGET_TRIPLE)
--target $(call RUST_TARGET_TRIPLE) \
$(if $(strip $(3)),--features $(3),)
endef
else
define RUST_CARGO_BUILD
@echo "Building Rust code with cargo..."
NUTTX_INCLUDE_DIR=$(TOPDIR)/include:$(TOPDIR)/include/arch \
cargo build -Zbuild-std=std,panic_abort -Zjson-target-spec \
--manifest-path $(2)/$(1)/Cargo.toml \
--target $(call RUST_TARGET_TRIPLE)
--target $(call RUST_TARGET_TRIPLE) \
$(if $(strip $(3)),--features $(3),)
endef
endif

Expand Down
Loading