From 7487204417479360db79e7cd352fb40048df5091 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 1 Dec 2022 06:13:31 +0200 Subject: [PATCH] Rust support --- Architecture/amd64/rust-target.json | 21 +++++++++++++++++++++ Core/Disk.cpp | 2 ++ Makefile | 12 +++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 Architecture/amd64/rust-target.json diff --git a/Architecture/amd64/rust-target.json b/Architecture/amd64/rust-target.json new file mode 100644 index 00000000..f3697f10 --- /dev/null +++ b/Architecture/amd64/rust-target.json @@ -0,0 +1,21 @@ +{ + "llvm-target": "x86_64-unknown-none", + "data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128", + "cpu": "x86-64", + "arch": "x86_64", + "features": "-mmx,-sse,+soft-float", + "target-endian": "little", + "target-pointer-width": "64", + "target-c-int-width": "32", + "os": "none", + "linker-flavor": "ld", + "pre-link-args": { + "ld": [ + "-m64" + ] + }, + "no-compiler-rt": true, + "disable-redzone": true, + "eliminate-frame-pointer": false, + "morestack": false +} \ No newline at end of file diff --git a/Core/Disk.cpp b/Core/Disk.cpp index 744fb4aa..c9ac8847 100644 --- a/Core/Disk.cpp +++ b/Core/Disk.cpp @@ -17,6 +17,7 @@ namespace Disk DriverManager->IOCB(DriverUID, (void *)callback); this->AvailablePorts = callback->DiskCallback.Fetch.Ports; this->BytesPerSector = callback->DiskCallback.Fetch.BytesPerSector; + debug("AvailablePorts:%ld BytesPerSector:%ld", this->AvailablePorts, this->BytesPerSector); if (this->AvailablePorts <= 0) { @@ -30,6 +31,7 @@ namespace Disk { Drive *drive = new Drive; sprintf_(drive->Name, "sd%ld-%d", DriverUID, this->AvailablePorts); + debug("Drive Name: %s", drive->Name); // TODO: Implement disk type detection. Very useful in the future. drive->MechanicalDisk = true; diff --git a/Makefile b/Makefile index dbc3b9f3..a1dd2228 100644 --- a/Makefile +++ b/Makefile @@ -11,8 +11,11 @@ NM = ../$(COMPILER_PATH)/$(COMPILER_ARCH)nm OBJCOPY = ../$(COMPILER_PATH)/$(COMPILER_ARCH)objcopy OBJDUMP = ../$(COMPILER_PATH)/$(COMPILER_ARCH)objdump GDB = ../$(COMPILER_PATH)/$(COMPILER_ARCH)gdb +RUSTC = /usr/bin/rustc NASM = /usr/bin/nasm +RUST_TARGET_PATH = Architecture/$(OSARCH)/rust-target.json + GIT_COMMIT = $(shell git rev-parse HEAD) GIT_COMMIT_SHORT = $(shell git rev-parse --short HEAD) @@ -23,19 +26,22 @@ ASM_SOURCES = $(shell find ./ -type f -name '*.asm' -not -path "./Architecture/i S_SOURCES = $(shell find ./ -type f -name '*.S' -not -path "./Architecture/i686/*" -not -path "./Architecture/aarch64/*") C_SOURCES = $(shell find ./ -type f -name '*.c' -not -path "./Architecture/i686/*" -not -path "./Architecture/aarch64/*") CPP_SOURCES = $(shell find ./ -type f -name '*.cpp' -not -path "./Architecture/i686/*" -not -path "./Architecture/aarch64/*") +RS_SOURCES = $(shell find ./ -type f -name '*.rs' -not -path "./Architecture/i686/*" -not -path "./Architecture/aarch64/*") else ifeq ($(OSARCH), i686) ASM_SOURCES = $(shell find ./ -type f -name '*.asm' -not -path "./Architecture/amd64/*" -not -path "./Architecture/aarch64/*") S_SOURCES = $(shell find ./ -type f -name '*.S' -not -path "./Architecture/amd64/*" -not -path "./Architecture/aarch64/*") C_SOURCES = $(shell find ./ -type f -name '*.c' -not -path "./Architecture/amd64/*" -not -path "./Architecture/aarch64/*") CPP_SOURCES = $(shell find ./ -type f -name '*.cpp' -not -path "./Architecture/amd64/*" -not -path "./Architecture/aarch64/*") +RS_SOURCES = $(shell find ./ -type f -name '*.rs' -not -path "./Architecture/amd64/*" -not -path "./Architecture/aarch64/*") else ifeq ($(OSARCH), aarch64) ASM_SOURCES = $(shell find ./ -type f -name '*.asm' -not -path "./Architecture/amd64/*" -not -path "./Architecture/i686/*") S_SOURCES = $(shell find ./ -type f -name '*.S' -not -path "./Architecture/amd64/*" -not -path "./Architecture/i686/*") C_SOURCES = $(shell find ./ -type f -name '*.c' -not -path "./Architecture/amd64/*" -not -path "./Architecture/i686/*") CPP_SOURCES = $(shell find ./ -type f -name '*.cpp' -not -path "./Architecture/amd64/*" -not -path "./Architecture/i686/*") +RS_SOURCES = $(shell find ./ -type f -name '*.rs' -not -path "./Architecture/amd64/*" -not -path "./Architecture/i686/*") endif HEADERS = $(sort $(dir $(wildcard ./include/*))) -OBJ = $(C_SOURCES:.c=.o) $(CPP_SOURCES:.cpp=.o) $(ASM_SOURCES:.asm=.o) $(S_SOURCES:.S=.o) $(PSF_SOURCES:.psf=.o) $(BMP_SOURCES:.bmp=.o) +OBJ = $(C_SOURCES:.c=.o) $(CPP_SOURCES:.cpp=.o) $(RS_SOURCES:.rs=.o) $(ASM_SOURCES:.asm=.o) $(S_SOURCES:.S=.o) $(PSF_SOURCES:.psf=.o) $(BMP_SOURCES:.bmp=.o) STACK_USAGE_OBJ = $(C_SOURCES:.c=.su) $(CPP_SOURCES:.cpp=.su) GCNO_OBJ = $(C_SOURCES:.c=.gcno) $(CPP_SOURCES:.cpp=.gcno) INCLUDE_DIR = ./include @@ -139,6 +145,10 @@ $(KERNEL_FILENAME): $(OBJ) $(info Compiling $<) $(CPP) $(CFLAGS) $(CFLAG_STACK_PROTECTOR) $(WARNCFLAG) -std=c++20 -fexceptions -c $< -o $@ -fno-rtti +%.o: %.rs $(HEADERS) $(RUST_TARGET_PATH) + $(info Compiling $<) + $(RUSTC) $< -C panic=abort -C soft-float --emit=obj -o $@ + %.o: %.asm $(info Compiling $<) $(NASM) $< $(NASMFLAGS) -o $@