From b347842b8d3428c83a03549328b02bc5abf1e366 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sun, 4 Feb 2018 18:57:20 +0000 Subject: [PATCH] rust setup stuff --- kernel-rs/Cargo.toml | 7 +++++++ kernel-rs/Makefile | 14 +++++++++++--- kernel-rs/src/arch/x86_64/long_mode_init.asm | 4 ++++ kernel-rs/src/lib.rs | 8 ++++++++ kernel-rs/x86_64-KFS.json | 12 ++++++++++++ 5 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 kernel-rs/Cargo.toml create mode 100755 kernel-rs/src/lib.rs create mode 100644 kernel-rs/x86_64-KFS.json diff --git a/kernel-rs/Cargo.toml b/kernel-rs/Cargo.toml new file mode 100644 index 00000000..765e83c8 --- /dev/null +++ b/kernel-rs/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "kfs" +version = "0.1.0" +authors = ["Jack Halford "] + +[lib] +crate-type = ["staticlib"] diff --git a/kernel-rs/Makefile b/kernel-rs/Makefile index 19b2e1b3..b43759b2 100644 --- a/kernel-rs/Makefile +++ b/kernel-rs/Makefile @@ -2,12 +2,16 @@ arch ?= x86_64 kernel := build/kernel-$(arch).bin iso := build/os-$(arch).iso +target ?= $(arch)-KFS +rust_os := target/$(target)/debug/libkfs.a + linker_script := src/arch/$(arch)/linker.ld grub.cfg := src/arch/$(arch)/grub.cfg asm_source_files := $(wildcard src/arch/$(arch)/*.asm) asm_object_files := $(patsubst src/arch/$(arch)/%.asm, \ build/arch/$(arch)/%.o, $(asm_source_files)) -.PHONY: all clean run iso + +.PHONY: all clean run iso kernel all: $(kernel) @@ -26,8 +30,12 @@ $(iso): $(kernel) $(grub.cfg) grub-mkrescue -o $(iso) build/isofiles 2>/dev/null rm -r build/isofiles -$(kernel): $(asm_object_files) $(linker_script) - @ld -n -T $(linker_script) -o $(kernel) $(asm_object_files) +$(kernel): kernel $(asm_object_files) $(linker_script) + @ld -n -T $(linker_script) -o $(kernel) \ + $(asm_object_files) $(rust_os) + +kernel: + @xargo build --target $(target) # compile asm files build/arch/$(arch)/%.o: src/arch/$(arch)/%.asm diff --git a/kernel-rs/src/arch/x86_64/long_mode_init.asm b/kernel-rs/src/arch/x86_64/long_mode_init.asm index 318764af..5b693dd1 100644 --- a/kernel-rs/src/arch/x86_64/long_mode_init.asm +++ b/kernel-rs/src/arch/x86_64/long_mode_init.asm @@ -10,6 +10,10 @@ long_mode_start: mov es, ax mov fs, ax mov gs, ax + + extern rust_main + call rust_main + ;print 'OKAY' to screen mov rax, 0x2f592f412f4b2f4f mov qword [0xb8000], rax diff --git a/kernel-rs/src/lib.rs b/kernel-rs/src/lib.rs new file mode 100755 index 00000000..e65b4ff0 --- /dev/null +++ b/kernel-rs/src/lib.rs @@ -0,0 +1,8 @@ +#![feature(lang_items)] +#![no_std] + +#[no_mangle] +pub extern fn rust_main() {} + +#[lang = "eh_personality"] #[no_mangle] pub extern fn eh_personality() {} +#[lang = "panic_fmt"] #[no_mangle] pub extern fn panic_fmt() -> ! {loop{}} diff --git a/kernel-rs/x86_64-KFS.json b/kernel-rs/x86_64-KFS.json new file mode 100644 index 00000000..ab1cb664 --- /dev/null +++ b/kernel-rs/x86_64-KFS.json @@ -0,0 +1,12 @@ +{ + "llvm-target": "x86_64-unknown-none", + "data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128", + "linker-flavor": "gcc", + "target-endian": "little", + "target-pointer-width": "64", + "target-c-int-width": "32", + "arch": "x86_64", + "os": "none", + "disable-redzone": true, + "features": "-mmx,-sse,+soft-float" +}