From c70a26412b1ac5086a88fcfa1d4822cfa231fac7 Mon Sep 17 00:00:00 2001 From: Lee Lup Yuen Date: Tue, 6 Aug 2024 09:20:38 +0800 Subject: [PATCH 1/6] Add config for leds_rust --- .../rv-virt/configs/leds64_rust/defconfig | 76 +++++++++++++++++++ tools/D.defs | 37 +++++---- tools/Rust.defs | 37 +++++---- tools/ci/platforms/ubuntu.sh | 1 + 4 files changed, 119 insertions(+), 32 deletions(-) create mode 100644 boards/risc-v/qemu-rv/rv-virt/configs/leds64_rust/defconfig diff --git a/boards/risc-v/qemu-rv/rv-virt/configs/leds64_rust/defconfig b/boards/risc-v/qemu-rv/rv-virt/configs/leds64_rust/defconfig new file mode 100644 index 0000000000000..696083e9846ed --- /dev/null +++ b/boards/risc-v/qemu-rv/rv-virt/configs/leds64_rust/defconfig @@ -0,0 +1,76 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +# CONFIG_DISABLE_OS_API is not set +# CONFIG_NSH_DISABLE_LOSMART is not set +CONFIG_16550_ADDRWIDTH=0 +CONFIG_16550_UART0=y +CONFIG_16550_UART0_BASE=0x10000000 +CONFIG_16550_UART0_CLOCK=3686400 +CONFIG_16550_UART0_IRQ=37 +CONFIG_16550_UART0_SERIAL_CONSOLE=y +CONFIG_16550_UART=y +CONFIG_ARCH="risc-v" +CONFIG_ARCH_BOARD="rv-virt" +CONFIG_ARCH_BOARD_QEMU_RV_VIRT=y +CONFIG_ARCH_CHIP="qemu-rv" +CONFIG_ARCH_CHIP_QEMU_RV64=y +CONFIG_ARCH_CHIP_QEMU_RV=y +CONFIG_ARCH_CHIP_QEMU_RV_ISA_A=y +CONFIG_ARCH_CHIP_QEMU_RV_ISA_C=y +CONFIG_ARCH_CHIP_QEMU_RV_ISA_M=y +CONFIG_ARCH_INTERRUPTSTACK=2048 +CONFIG_ARCH_RISCV=y +CONFIG_ARCH_STACKDUMP=y +CONFIG_BCH=y +CONFIG_BOARDCTL_POWEROFF=y +CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=6366 +CONFIG_BUILTIN=y +CONFIG_DEBUG_FEATURES=y +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEVICE_TREE=y +CONFIG_DEV_ZERO=y +CONFIG_ELF=y +CONFIG_EXAMPLES_HELLO=y +CONFIG_EXAMPLES_LEDS=y +CONFIG_EXAMPLES_LEDS_RUST=y +CONFIG_FS_HOSTFS=y +CONFIG_FS_PROCFS=y +CONFIG_IDLETHREAD_STACKSIZE=2048 +CONFIG_INIT_ENTRYPOINT="nsh_main" +CONFIG_INIT_STACKSIZE=3072 +CONFIG_LIBC_ENVPATH=y +CONFIG_LIBC_EXECFUNCS=y +CONFIG_LIBC_PERROR_STDOUT=y +CONFIG_LIBC_STRERROR=y +CONFIG_LIBM=y +CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6 +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_FILEIOSIZE=512 +CONFIG_NSH_READLINE=y +CONFIG_PATH_INITIAL="/system/bin" +CONFIG_RAM_SIZE=33554432 +CONFIG_RAM_START=0x80000000 +CONFIG_READLINE_CMD_HISTORY=y +CONFIG_RISCV_SEMIHOSTING_HOSTFS=y +CONFIG_RR_INTERVAL=200 +CONFIG_SCHED_WAITPID=y +CONFIG_SERIAL_UART_ARCH_MMIO=y +CONFIG_STACK_COLORATION=y +CONFIG_START_MONTH=12 +CONFIG_START_YEAR=2021 +CONFIG_SYMTAB_ORDEREDBYNAME=y +CONFIG_SYSTEM_NSH=y +CONFIG_SYSTEM_NSH_STACKSIZE=3072 +CONFIG_TESTING_GETPRIME=y +CONFIG_TESTING_OSTEST=y +CONFIG_USEC_PER_TICK=1000 +CONFIG_USERLED=y +CONFIG_USERLED_LOWER=y diff --git a/tools/D.defs b/tools/D.defs index 1f317daa0202c..427ec14208d7a 100644 --- a/tools/D.defs +++ b/tools/D.defs @@ -46,23 +46,28 @@ ifeq ($(CONFIG_ARCH_SIM),y) DFLAGS += -mtriple=$(LLVM_ARCHTYPE)-apple-$(LLVM_ABITYPE) endif else ifeq ($(CONFIG_ARCH_RISCV),y) - # Traget triple is riscv[32|64][isa]-unknown-none-elf + # Target triple is riscv[32|64][isa]-unknown-none-elf + # "imafdc" becomes "gc" - D_ARCHTYPE = $(LLVM_ARCHTYPE)i - ifeq ($(CONFIG_ARCH_RV_ISA_M),y) - D_ARCHTYPE := $(D_ARCHTYPE)m - endif - ifeq ($(CONFIG_ARCH_RV_ISA_A),y) - D_ARCHTYPE := $(D_ARCHTYPE)a - endif - ifeq ($(CONFIG_ARCH_RV_ISA_F),y) - D_ARCHTYPE := $(D_ARCHTYPE)f - endif - ifeq ($(CONFIG_ARCH_RV_ISA_D),y) - D_ARCHTYPE := $(D_ARCHTYPE)d - endif - ifeq ($(CONFIG_ARCH_RV_ISA_C),y) - D_ARCHTYPE := $(D_ARCHTYPE)c + ifeq ($(CONFIG_ARCH_RV_ISA_M)$(CONFIG_ARCH_RV_ISA_A)$(CONFIG_ARCH_FPU)$(CONFIG_ARCH_DPFPU)$(CONFIG_ARCH_RV_ISA_C),yyyyy) + D_ARCHTYPE = $(LLVM_ARCHTYPE)gc + else + D_ARCHTYPE = $(LLVM_ARCHTYPE)i + ifeq ($(CONFIG_ARCH_RV_ISA_M),y) + D_ARCHTYPE := $(D_ARCHTYPE)m + endif + ifeq ($(CONFIG_ARCH_RV_ISA_A),y) + D_ARCHTYPE := $(D_ARCHTYPE)a + endif + ifeq ($(CONFIG_ARCH_FPU),y) + D_ARCHTYPE := $(D_ARCHTYPE)f + endif + ifeq ($(CONFIG_ARCH_DPFPU),y) + D_ARCHTYPE := $(D_ARCHTYPE)d + endif + ifeq ($(CONFIG_ARCH_RV_ISA_C),y) + D_ARCHTYPE := $(D_ARCHTYPE)c + endif endif DFLAGS += -mtriple=$(D_ARCHTYPE)-unknown-none-elf diff --git a/tools/Rust.defs b/tools/Rust.defs index 3a762e9a6bef1..1e055e3c5d889 100644 --- a/tools/Rust.defs +++ b/tools/Rust.defs @@ -45,23 +45,28 @@ ifeq ($(CONFIG_ARCH_SIM),y) RUSTFLAGS += --target $(LLVM_ARCHTYPE)-apple-$(LLVM_ABITYPE) endif else ifeq ($(CONFIG_ARCH_RISCV),y) - # Traget triple is riscv[32|64][isa]-unknown-none-elf + # Target triple is riscv[32|64][isa]-unknown-none-elf + # "imafdc" becomes "gc" - RUST_ARCHTYPE = $(LLVM_ARCHTYPE)i - ifeq ($(CONFIG_ARCH_RV_ISA_M),y) - RUST_ARCHTYPE := $(RUST_ARCHTYPE)m - endif - ifeq ($(CONFIG_ARCH_RV_ISA_A),y) - RUST_ARCHTYPE := $(RUST_ARCHTYPE)a - endif - ifeq ($(CONFIG_ARCH_RV_ISA_F),y) - RUST_ARCHTYPE := $(RUST_ARCHTYPE)f - endif - ifeq ($(CONFIG_ARCH_RV_ISA_D),y) - RUST_ARCHTYPE := $(RUST_ARCHTYPE)d - endif - ifeq ($(CONFIG_ARCH_RV_ISA_C),y) - RUST_ARCHTYPE := $(RUST_ARCHTYPE)c + ifeq ($(CONFIG_ARCH_RV_ISA_M)$(CONFIG_ARCH_RV_ISA_A)$(CONFIG_ARCH_FPU)$(CONFIG_ARCH_DPFPU)$(CONFIG_ARCH_RV_ISA_C),yyyyy) + RUST_ARCHTYPE = $(LLVM_ARCHTYPE)gc + else + RUST_ARCHTYPE = $(LLVM_ARCHTYPE)i + ifeq ($(CONFIG_ARCH_RV_ISA_M),y) + RUST_ARCHTYPE := $(RUST_ARCHTYPE)m + endif + ifeq ($(CONFIG_ARCH_RV_ISA_A),y) + RUST_ARCHTYPE := $(RUST_ARCHTYPE)a + endif + ifeq ($(CONFIG_ARCH_FPU),y) + RUST_ARCHTYPE := $(RUST_ARCHTYPE)f + endif + ifeq ($(CONFIG_ARCH_DPFPU),y) + RUST_ARCHTYPE := $(RUST_ARCHTYPE)d + endif + ifeq ($(CONFIG_ARCH_RV_ISA_C),y) + RUST_ARCHTYPE := $(RUST_ARCHTYPE)c + endif endif RUSTFLAGS += --target $(RUST_ARCHTYPE)-unknown-none-elf diff --git a/tools/ci/platforms/ubuntu.sh b/tools/ci/platforms/ubuntu.sh index e545b4f5aba2b..fdfaaa9bf25cc 100755 --- a/tools/ci/platforms/ubuntu.sh +++ b/tools/ci/platforms/ubuntu.sh @@ -230,6 +230,7 @@ rust() { # Install targets supported from NuttX rustup target add thumbv6m-none-eabi rustup target add thumbv7m-none-eabi + rustup target add riscv64gc-unknown-none-elf fi command rustc --version From 483da1e8cf4b9d71ac658a97d3a99a3b85b1a9e9 Mon Sep 17 00:00:00 2001 From: Lee Lup Yuen Date: Tue, 6 Aug 2024 09:37:41 +0800 Subject: [PATCH 2/6] Add doc --- Documentation/applications/examples/leds_rust/index.rst | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Documentation/applications/examples/leds_rust/index.rst diff --git a/Documentation/applications/examples/leds_rust/index.rst b/Documentation/applications/examples/leds_rust/index.rst new file mode 100644 index 0000000000000..11ab85770f908 --- /dev/null +++ b/Documentation/applications/examples/leds_rust/index.rst @@ -0,0 +1,6 @@ +================================= +``leds_rust`` Toggle LEDs in Rust +================================= + +This is a simple test in Rust of the board LED driver at +``nuttx/drivers/leds/userled_*.c``. From a71874fdf4c9ed41cebea4fc93496fd22a62e3f1 Mon Sep 17 00:00:00 2001 From: Lee Lup Yuen Date: Tue, 6 Aug 2024 11:19:09 +0800 Subject: [PATCH 3/6] Add doc for leds64_rust --- .../platforms/risc-v/qemu-rv/boards/rv-virt/index.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/platforms/risc-v/qemu-rv/boards/rv-virt/index.rst b/Documentation/platforms/risc-v/qemu-rv/boards/rv-virt/index.rst index e0a2a8a2b37af..ce324bb8350f1 100644 --- a/Documentation/platforms/risc-v/qemu-rv/boards/rv-virt/index.rst +++ b/Documentation/platforms/risc-v/qemu-rv/boards/rv-virt/index.rst @@ -257,6 +257,11 @@ leds64 Similar to the `nsh64`_ configuration, but with User LEDs support for 64-bit RISC-V. +leds64_rust +----------- + +Similar to the `leds64`_ configuration, but with `leds_rust` example enabled. + netnsh ------ From 7c0477c4835c2789cfaa4b6a249acf96c1fcdcc9 Mon Sep 17 00:00:00 2001 From: Lee Lup Yuen Date: Tue, 6 Aug 2024 11:21:47 +0800 Subject: [PATCH 4/6] Add doc for leds64_rust --- Documentation/platforms/risc-v/qemu-rv/boards/rv-virt/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/platforms/risc-v/qemu-rv/boards/rv-virt/index.rst b/Documentation/platforms/risc-v/qemu-rv/boards/rv-virt/index.rst index ce324bb8350f1..16a186960043b 100644 --- a/Documentation/platforms/risc-v/qemu-rv/boards/rv-virt/index.rst +++ b/Documentation/platforms/risc-v/qemu-rv/boards/rv-virt/index.rst @@ -260,7 +260,7 @@ Similar to the `nsh64`_ configuration, but with User LEDs support for 64-bit RIS leds64_rust ----------- -Similar to the `leds64`_ configuration, but with `leds_rust` example enabled. +Similar to the `leds64`_ configuration, but with ``leds_rust`` example enabled. netnsh ------ From 723281ed9bfc77fe093474b2f87ac54605537ddd Mon Sep 17 00:00:00 2001 From: Lee Lup Yuen Date: Tue, 6 Aug 2024 12:47:40 +0800 Subject: [PATCH 5/6] Fix the D Target --- tools/D.defs | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/tools/D.defs b/tools/D.defs index 427ec14208d7a..f46c41def63c8 100644 --- a/tools/D.defs +++ b/tools/D.defs @@ -46,33 +46,18 @@ ifeq ($(CONFIG_ARCH_SIM),y) DFLAGS += -mtriple=$(LLVM_ARCHTYPE)-apple-$(LLVM_ABITYPE) endif else ifeq ($(CONFIG_ARCH_RISCV),y) - # Target triple is riscv[32|64][isa]-unknown-none-elf - # "imafdc" becomes "gc" + # Target triple is riscv[32|64]-unknown-none-elf + DFLAGS += -mtriple=$(LLVM_ARCHTYPE)-unknown-none-elf + DFLAGS += -mattr=+m,+a,+f,+d,+c - ifeq ($(CONFIG_ARCH_RV_ISA_M)$(CONFIG_ARCH_RV_ISA_A)$(CONFIG_ARCH_FPU)$(CONFIG_ARCH_DPFPU)$(CONFIG_ARCH_RV_ISA_C),yyyyy) - D_ARCHTYPE = $(LLVM_ARCHTYPE)gc - else - D_ARCHTYPE = $(LLVM_ARCHTYPE)i - ifeq ($(CONFIG_ARCH_RV_ISA_M),y) - D_ARCHTYPE := $(D_ARCHTYPE)m - endif - ifeq ($(CONFIG_ARCH_RV_ISA_A),y) - D_ARCHTYPE := $(D_ARCHTYPE)a - endif - ifeq ($(CONFIG_ARCH_FPU),y) - D_ARCHTYPE := $(D_ARCHTYPE)f - endif - ifeq ($(CONFIG_ARCH_DPFPU),y) - D_ARCHTYPE := $(D_ARCHTYPE)d - endif - ifeq ($(CONFIG_ARCH_RV_ISA_C),y) - D_ARCHTYPE := $(D_ARCHTYPE)c - endif + # Handle ABI and CPU + ifeq ($(CONFIG_ARCH_RV32),y) + DFLAGS += -mcpu=generic-rv32 + DFLAGS += -mabi=ilp32d + else ifeq ($(CONFIG_ARCH_RV64),y) + DFLAGS += -mcpu=generic-rv64 + DFLAGS += -mabi=lp64d endif - - DFLAGS += -mtriple=$(D_ARCHTYPE)-unknown-none-elf - DFLAGS += -mattr=+m,+a,+f,+d,+c -mabi=ilp32d - DFLAGS += -mcpu=generic-rv32 else # For arm, but there are some other archs not support yet, # such as xtensa, x86 bare metal, etc. From c977708ab709f4e644b3e892b5fe49d8307c3f9c Mon Sep 17 00:00:00 2001 From: Lup Yuen Lee Date: Tue, 6 Aug 2024 16:04:13 +0800 Subject: [PATCH 6/6] Add Rust Target riscv64gc-unknown-none-elf --- tools/ci/docker/linux/Dockerfile | 3 ++- tools/ci/platforms/msys2.sh | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/ci/docker/linux/Dockerfile b/tools/ci/docker/linux/Dockerfile index 78b43ca5c09fd..845f9bc18b70c 100644 --- a/tools/ci/docker/linux/Dockerfile +++ b/tools/ci/docker/linux/Dockerfile @@ -66,7 +66,8 @@ ENV RUSTUP_HOME=$RUST_HOME/rustup RUN mkdir -p $CARGO_HOME \ && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \ && $CARGO_HOME/bin/rustup target add thumbv6m-none-eabi \ - && $CARGO_HOME/bin/rustup target add thumbv7m-none-eabi + && $CARGO_HOME/bin/rustup target add thumbv7m-none-eabi \ + && $CARGO_HOME/bin/rustup target add riscv64gc-unknown-none-elf RUN mkdir /tools/gn -p \ && cd /tools/gn \ diff --git a/tools/ci/platforms/msys2.sh b/tools/ci/platforms/msys2.sh index f5230e778c368..687b81cff4c8d 100755 --- a/tools/ci/platforms/msys2.sh +++ b/tools/ci/platforms/msys2.sh @@ -181,6 +181,7 @@ rust() { # Install targets supported from NuttX "$CARGO_HOME"/bin/rustup target add thumbv6m-none-eabi "$CARGO_HOME"/bin/rustup target add thumbv7m-none-eabi + "$CARGO_HOME"/bin/rustup target add riscv64gc-unknown-none-elf rm rustup-init.exe fi command rustc --version