@@ -19,6 +19,8 @@ endif
export ARCH=__x86_64__
export ROOT_PATH=$(shell pwd)
+export RUSTC=$(shell which rustc)
+
export DEBUG=DEBUG
export GLOBAL_CFLAGS := -mcmodel=large -fno-builtin -m64 -fno-stack-protector -D $(ARCH) -D $(EMULATOR) -O1
@@ -1,7 +1,7 @@
CFLAGS += -I .
-kernel_lib_subdirs:= libUI sys libELF
+kernel_lib_subdirs:= libUI sys libELF rust_helloworld
kernel_lib_objs:= $(shell find ./*.c)
@@ -0,0 +1,13 @@
+rust_helloworld_objs:=
+ifneq ("$(RUSTC)", "")
+ rust_helloworld_objs += helloworld.o
+endif
+all: $(rust_helloworld_objs)
+helloworld.o: helloworld.rs
+ @echo Compile helloworld.o
+ @echo rustc=$(which rustc)
+ $(shell $(RUSTC) --crate-type staticlib --target x86_64-unknown-none -o helloworld.o helloworld.rs)
@@ -0,0 +1,17 @@
+#![no_std]
+#![no_main]
+use core::panic::PanicInfo;
+#[no_mangle]
+pub extern "C" fn rust_helloworld_a_plus_b(a: i32, b: i32) -> i32 {
+ return a+b;
+}
+/// 这个函数将在panic时被调用
+#[panic_handler]
+fn panic(_info: &PanicInfo) -> ! {
+ loop {}
+// rustc --crate-type staticlib --target x86_64-unknown-none -o helloworld.o helloworld.rs