Rust for RTEMS [was: Re: Interested for GSoC 2023]
Karel Gardas
karel at functional.vision
Fri Mar 3 18:18:09 UTC 2023
On 2/27/23 12:00, Karel Gardas wrote:
>>> On 2/27/23 02:16, Joel Sherrill wrote:
>>>> Another GCC related project could be Rust RTEMS Support but I don't
>>>> know what that entails beyond turning it on and seeing what goes
>>>> wrong. I tried to build it last year and got far enough to decide to
>>>> wait before trying again.
>>>
>>> Not sure how far you went. The process is generally:
>>>
>>> (1) tune Rust compiler to cross-compile correctly for specific
>>> hardware/os
>>> platform. So basically you get no_std capable compiler
>>>
>>> (2) review, patch and by using (1) cross-compile libc
>>>
>>> (3) using sources from (1) and (2) build full stage (std enabled) rustc.
>>>
>>> (4) tweak and tune tools (rustup/cargo etc.) whenever required to smooth
>>> sharp edges for RTEMS.
>>>
>>> Here, I'm nearly finished with (1) for arm-rtems (e.g. cortex-aX not
>>> cortex-
>>> mX).
Something is running:
silence:/tmp$ cat hello-rtems.rs
#![no_std]
#![no_main]
use core::panic::PanicInfo;
use core::ffi::c_char;
use core::ffi::c_int;
extern "C" {
fn puts(str: *const c_char) -> c_int;
}
#[no_mangle]
pub fn main() -> ! {
unsafe {
puts(b"Rust says hello to hosting RTEMS\n\0".as_ptr() as *const
i8);
}
loop {}
}
#[panic_handler]
fn panic(_: &PanicInfo) -> ! {
loop {}
}
silence:/tmp$ /tmp/rustc-rtems-arm/bin/rustc -g -Z verbose
--target=arm-rtems hello-rtems.rs -lrtemscpu -lrtemsbsp -lrtemsdefaultconfig
silence:/tmp$ file hello-rtems.exe
hello-rtems.exe: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV),
statically linked, with debug_info, not stripped
silence:/tmp$ ~rtems/sfw/qemu-7.2.0/bin/qemu-system-arm -serial null
-serial mon:stdio -nographic -M xilinx-zynq-a9 -m 512M -kernel
/tmp/hello-rtems.exe
Rust says hello to hosting RTEMS
QEMU 7.2.0 monitor - type 'help' for more information
(qemu) q
silence:/tmp$
Note: this is hacked rust-lang.org rust compiler, not gccrs project and
soon to be released GCC 13.
The biggest problem and probably soon to be source of headaches is
mixture of LLVM's compiler-rt and GCC's libgcc binaries. This means once
you employ for example arithmetic you need to add
-C link-arg=-Wl,--allow-multiple-definition otherwise you would get
multiple definitions symbols error.
Karel
More information about the devel
mailing list