mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 15:34:33 +00:00
Rust support
This commit is contained in:
parent
c9c248ccc7
commit
7487204417
21
Architecture/amd64/rust-target.json
Normal file
21
Architecture/amd64/rust-target.json
Normal file
@ -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
|
||||||
|
}
|
@ -17,6 +17,7 @@ namespace Disk
|
|||||||
DriverManager->IOCB(DriverUID, (void *)callback);
|
DriverManager->IOCB(DriverUID, (void *)callback);
|
||||||
this->AvailablePorts = callback->DiskCallback.Fetch.Ports;
|
this->AvailablePorts = callback->DiskCallback.Fetch.Ports;
|
||||||
this->BytesPerSector = callback->DiskCallback.Fetch.BytesPerSector;
|
this->BytesPerSector = callback->DiskCallback.Fetch.BytesPerSector;
|
||||||
|
debug("AvailablePorts:%ld BytesPerSector:%ld", this->AvailablePorts, this->BytesPerSector);
|
||||||
|
|
||||||
if (this->AvailablePorts <= 0)
|
if (this->AvailablePorts <= 0)
|
||||||
{
|
{
|
||||||
@ -30,6 +31,7 @@ namespace Disk
|
|||||||
{
|
{
|
||||||
Drive *drive = new Drive;
|
Drive *drive = new Drive;
|
||||||
sprintf_(drive->Name, "sd%ld-%d", DriverUID, this->AvailablePorts);
|
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.
|
// TODO: Implement disk type detection. Very useful in the future.
|
||||||
drive->MechanicalDisk = true;
|
drive->MechanicalDisk = true;
|
||||||
|
|
||||||
|
12
Makefile
12
Makefile
@ -11,8 +11,11 @@ NM = ../$(COMPILER_PATH)/$(COMPILER_ARCH)nm
|
|||||||
OBJCOPY = ../$(COMPILER_PATH)/$(COMPILER_ARCH)objcopy
|
OBJCOPY = ../$(COMPILER_PATH)/$(COMPILER_ARCH)objcopy
|
||||||
OBJDUMP = ../$(COMPILER_PATH)/$(COMPILER_ARCH)objdump
|
OBJDUMP = ../$(COMPILER_PATH)/$(COMPILER_ARCH)objdump
|
||||||
GDB = ../$(COMPILER_PATH)/$(COMPILER_ARCH)gdb
|
GDB = ../$(COMPILER_PATH)/$(COMPILER_ARCH)gdb
|
||||||
|
RUSTC = /usr/bin/rustc
|
||||||
NASM = /usr/bin/nasm
|
NASM = /usr/bin/nasm
|
||||||
|
|
||||||
|
RUST_TARGET_PATH = Architecture/$(OSARCH)/rust-target.json
|
||||||
|
|
||||||
GIT_COMMIT = $(shell git rev-parse HEAD)
|
GIT_COMMIT = $(shell git rev-parse HEAD)
|
||||||
GIT_COMMIT_SHORT = $(shell git rev-parse --short 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/*")
|
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/*")
|
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/*")
|
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)
|
else ifeq ($(OSARCH), i686)
|
||||||
ASM_SOURCES = $(shell find ./ -type f -name '*.asm' -not -path "./Architecture/amd64/*" -not -path "./Architecture/aarch64/*")
|
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/*")
|
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/*")
|
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/*")
|
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)
|
else ifeq ($(OSARCH), aarch64)
|
||||||
ASM_SOURCES = $(shell find ./ -type f -name '*.asm' -not -path "./Architecture/amd64/*" -not -path "./Architecture/i686/*")
|
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/*")
|
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/*")
|
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/*")
|
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
|
endif
|
||||||
HEADERS = $(sort $(dir $(wildcard ./include/*)))
|
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)
|
STACK_USAGE_OBJ = $(C_SOURCES:.c=.su) $(CPP_SOURCES:.cpp=.su)
|
||||||
GCNO_OBJ = $(C_SOURCES:.c=.gcno) $(CPP_SOURCES:.cpp=.gcno)
|
GCNO_OBJ = $(C_SOURCES:.c=.gcno) $(CPP_SOURCES:.cpp=.gcno)
|
||||||
INCLUDE_DIR = ./include
|
INCLUDE_DIR = ./include
|
||||||
@ -139,6 +145,10 @@ $(KERNEL_FILENAME): $(OBJ)
|
|||||||
$(info Compiling $<)
|
$(info Compiling $<)
|
||||||
$(CPP) $(CFLAGS) $(CFLAG_STACK_PROTECTOR) $(WARNCFLAG) -std=c++20 -fexceptions -c $< -o $@ -fno-rtti
|
$(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
|
%.o: %.asm
|
||||||
$(info Compiling $<)
|
$(info Compiling $<)
|
||||||
$(NASM) $< $(NASMFLAGS) -o $@
|
$(NASM) $< $(NASMFLAGS) -o $@
|
||||||
|
Loading…
x
Reference in New Issue
Block a user