소스 검색

new: 在lib下引入一个rust的helloworld! (#68)

login 2 년 전
부모
커밋
e002152383
4개의 변경된 파일33개의 추가작업 그리고 1개의 파일을 삭제
  1. 2 0
      Makefile
  2. 1 1
      kernel/lib/Makefile
  3. 13 0
      kernel/lib/rust_helloworld/Makefile
  4. 17 0
      kernel/lib/rust_helloworld/helloworld.rs

+ 2 - 0
Makefile

@@ -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 - 1
kernel/lib/Makefile

@@ -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)
 

+ 13 - 0
kernel/lib/rust_helloworld/Makefile

@@ -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)

+ 17 - 0
kernel/lib/rust_helloworld/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