Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 3 additions & 134 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ include(variable)
include(dependencies)
include(flags)
include(configuration)
include(source)

# ============================================================================
# Platform Checks
Expand Down Expand Up @@ -55,7 +56,8 @@ message(STATUS "CMake Current Binary Directory: ${CMAKE_CURRENT_BINARY_DIR}")
message(STATUS "CMake Host System Name: ${CMAKE_HOST_SYSTEM_NAME}")
message(STATUS "CMake Host System Processor: ${CMAKE_HOST_SYSTEM_PROCESSOR}")
message(STATUS "VoidFrame Scheduler: ${VF_SCHEDULER}")
message(STATUS "VoidFrame Rust Heap Management: ${VF_CONFIG_HEAP_RUST}")
message(STATUS "VoidFrame Heap Management Language: ${VF_CONFIG_HEAP_LANG}")
message(STATUS "CMake sources configured.")

# ============================================================================
# Standard Configuration
Expand All @@ -65,139 +67,6 @@ set(CMAKE_CXX_STANDARD 20)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# ============================================================================
# Source Files Organization
# ============================================================================
set(ASM_SOURCES
arch/x86_64/asm/pxs.asm
arch/x86_64/idt/IdtLoad.asm
arch/x86_64/gdt/GdtTssFlush.asm
arch/x86_64/interrupts/Interrupts.asm
arch/x86_64/syscall/SyscallEntry.asm
include/Switch.asm
)

set(KERNEL_CORE_SOURCES
kernel/core/Kernel.c
kernel/core/Panic.c
kernel/core/Compositor.c
kernel/core/InitRD.c
)

set(SCHED_SOURCES
kernel/sched/MLFQ.c
kernel/sched/EEVDF.c
)

set(KERNEL_ETC_SOURCES
kernel/etc/Shell.c
kernel/etc/Console.c
kernel/etc/Format.c
kernel/etc/VBEConsole.c
kernel/etc/Editor.c
kernel/etc/StringOps.c
kernel/etc/POST.c
)

set(ATOMIC_IPC_SOURCES
kernel/atomic/Atomics.c
kernel/ipc/Ipc.c
)

set(EXECF_SOURCES
kernel/execf/elf/ELFloader.c
kernel/execf/pe/PEloader.c
kernel/execf/aout/AoutLoader.c
kernel/execf/ExecLoader.c
)

set(MM_SOURCES
mm/PMem.c
mm/MemOps.c
mm/VMem.c
mm/StackGuard.c
mm/MemPool.c
mm/KernelHeap.c
mm/trace/StackTrace.c
mm/security/Cerberus.c
mm/PageFaultHandler.c
)

set(FS_SOURCES
fs/VFRFS.c
fs/FAT/FAT1x.c
fs/EXT/Ext2.c
fs/Iso9660.c
fs/VFS.c
fs/BlockDevice.c
fs/FileSystem.c
fs/MBR.c
)

set(DRIVER_SOURCES
drivers/APIC.c
drivers/TSC.c
drivers/ACPI.c
drivers/Serial.c
drivers/PS2.c
drivers/Ide.c
drivers/Vesa.c
drivers/PCI/PCI.c
drivers/RTC/Rtc.c
drivers/ethernet/realtek/RTL8139.c
drivers/ethernet/intel/E1000.c
drivers/ethernet/interface/Ip.c
drivers/ethernet/interface/Arp.c
drivers/ethernet/interface/Icmp.c
drivers/ethernet/Network.c
drivers/xHCI/xHCI.c
drivers/ISA/ISA.c
drivers/sound/SB16.c
drivers/sound/Generic.c
drivers/storage/AHCI.c
drivers/LPT/LPT.c
drivers/virtio/VirtioBlk.c
drivers/vmware/SVGAII.c
)

set(ARCH_SOURCES
arch/x86_64/idt/Idt.c
arch/x86_64/gdt/Gdt.c
arch/x86_64/interrupts/Interrupts.c
arch/x86_64/syscall/Syscall.c
arch/x86_64/features/x64.c
)

set(INCLUDE_SOURCES
include/ctype.c
include/Font.c
)

set(CPP_SOURCES
ports/6502/6502.cpp
)

set(C_SOURCES
${KERNEL_CORE_SOURCES}
${SCHED_SOURCES}
${KERNEL_ETC_SOURCES}
${ATOMIC_IPC_SOURCES}
${EXECF_SOURCES}
${MM_SOURCES}
${FS_SOURCES}
${DRIVER_SOURCES}
${ARCH_SOURCES}
${INCLUDE_SOURCES}
)

set(OBJ_SOURCES)
if(NOT EXCLUDE_EXTRA_OBJECTS)
set(OBJ_SOURCES
kernel/etc/objects/splash1.o
kernel/etc/objects/panic.o
)
endif()

# ============================================================================
# Rust Memory Management
# ============================================================================
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ It would be amazing if you could contribute to this project!
- meson >= 1.4 (used: meson 1.9.1)
- ninja >= 1.11 (used: ninja 1.21.1)
- clang/++ >= 18.0.0 (used: 20.1.8)
- rustup (nightly, bare metal toolchain) >= 1.89.0 (used: 1.92.0-nightly)
- nasm >= 2.16 (used: 2.16.03)
- qemu >= 7.0.0 (used: 10.1.0)
- mkfs.fat
Expand Down Expand Up @@ -62,6 +63,7 @@ cmake .. -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/<linux/windows/macos>-x64.cmake \
-G Ninja \
-DVF_SCHEDULER=<MLFQ/EEVDF> \ # Optional, default: EEVDF
-DVF_CONFIG_HEAP_LANG=<C/RUST> \ # Optional, default: RUST
ccmake . # Optinal, tune as needed
ninja -j$(nproc)
ninja run
Expand Down Expand Up @@ -99,7 +101,7 @@ ninja run
- [x] Per-process memory checks (Cerberus)
- [x] Stack guard
- [x] Stack trace
- [x] Heap (Class-based)
- [x] Heap (C & Rust modules)
- [x] Paging
- [x] Interrupts
- [x] Process Management
Expand Down
3 changes: 2 additions & 1 deletion cmake/cache.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
set(VF_SCHEDULER "EEVDF" CACHE STRING "Scheduler type: MLFQ or EEVDF")
set_property(CACHE VF_SCHEDULER PROPERTY STRINGS MLFQ EEVDF)

set(VF_CONFIG_HEAP_RUST ON CACHE BOOL "Use Rust (and C) for heap management")
set(VF_CONFIG_HEAP_LANG "RUST" CACHE STRING "Heap language: RUST or C")
set_property(CACHE VF_CONFIG_HEAP_LANG PROPERTY STRINGS RUST C)
8 changes: 6 additions & 2 deletions cmake/features.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,13 @@ if(VF_SCHEDULER STREQUAL "MLFQ")
elseif(VF_SCHEDULER STREQUAL "EEVDF")
add_compile_definitions(VF_CONFIG_SCHED_EEVDF)
else()
message(FATAL_ERROR "Invalid scheduler: ${VF_SCHEDULER}. Have you pass: -DVF_SCHEDULER=<MLFQ/EEVDF>?.")
message(FATAL_ERROR "Invalid scheduler: ${VF_SCHEDULER}. Did you pass: -DVF_SCHEDULER=<MLFQ/EEVDF>?")
endif()

if(VF_CONFIG_HEAP_RUST)
if(VF_CONFIG_HEAP_LANG STREQUAL "RUST")
add_compile_definitions(VF_CONFIG_HEAP_RUST)
elseif(VF_CONFIG_HEAP_LANG STREQUAL "C")
add_compile_definitions(VF_CONFIG_HEAP_C)
else()
message(FATAL_ERROR "Invalid heap language: ${VF_CONFIG_HEAP_LANG}. Did you pass: -DVF_CONFIG_HEAP_LANG=<RUST/C>?")
endif()
2 changes: 1 addition & 1 deletion cmake/flags.cmake
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# ============================================================================
# Compiler Flags
# ============================================================================
set(C_FLAGS " -m64 -O2 -fno-omit-frame-pointer -finline-functions -foptimize-sibling-calls -nostdinc -nostdlib -fno-builtin -ffreestanding -mno-red-zone -mserialize -fPIE -fPIC -mcmodel=kernel -fcf-protection=full -fvisibility=hidden")
set(C_FLAGS " -m64 -target x86_64-unknown-none-elf -O2 -fno-omit-frame-pointer -finline-functions -foptimize-sibling-calls -nostdinc -nostdlib -fno-builtin -ffreestanding -mno-red-zone -mserialize -fPIE -fPIC -mcmodel=kernel -fcf-protection=full -fvisibility=hidden")

if(SILENT_BUILD)
string(APPEND C_FLAGS " -w")
Expand Down
141 changes: 141 additions & 0 deletions cmake/source.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
# ============================================================================
# Sources Organization
# ============================================================================
set(ASM_SOURCES
arch/x86_64/asm/pxs.asm
arch/x86_64/idt/IdtLoad.asm
arch/x86_64/gdt/GdtTssFlush.asm
arch/x86_64/interrupts/Interrupts.asm
arch/x86_64/syscall/SyscallEntry.asm
include/Switch.asm
)

set(KERNEL_CORE_SOURCES
kernel/core/Kernel.c
kernel/core/Panic.c
kernel/core/Compositor.c
kernel/core/InitRD.c
)

set(SCHED_SOURCES
kernel/sched/MLFQ.c
kernel/sched/EEVDF.c
)

set(KERNEL_ETC_SOURCES
kernel/etc/Shell.c
kernel/etc/Console.c
kernel/etc/Format.c
kernel/etc/VBEConsole.c
kernel/etc/Editor.c
kernel/etc/StringOps.c
kernel/etc/POST.c
)

set(ATOMIC_IPC_SOURCES
kernel/atomic/Atomics.c
kernel/ipc/Ipc.c
)

set(EXECF_SOURCES
kernel/execf/elf/ELFloader.c
kernel/execf/pe/PEloader.c
kernel/execf/aout/AoutLoader.c
kernel/execf/ExecLoader.c
)

set(MM_SOURCES
mm/PMem.c
mm/MemOps.c
mm/VMem.c
mm/StackGuard.c
mm/MemPool.c
mm/trace/StackTrace.c
mm/security/Cerberus.c
mm/PageFaultHandler.c
)

set(FS_SOURCES
fs/VFRFS.c
fs/FAT/FAT1x.c
fs/EXT/Ext2.c
fs/Iso9660.c
fs/VFS.c
fs/BlockDevice.c
fs/FileSystem.c
fs/MBR.c
)

set(DRIVER_SOURCES
drivers/APIC.c
drivers/TSC.c
drivers/ACPI.c
drivers/Serial.c
drivers/PS2.c
drivers/Ide.c
drivers/Vesa.c
drivers/PCI/PCI.c
drivers/RTC/Rtc.c
drivers/ethernet/realtek/RTL8139.c
drivers/ethernet/intel/E1000.c
drivers/ethernet/interface/Ip.c
drivers/ethernet/interface/Arp.c
drivers/ethernet/interface/Icmp.c
drivers/ethernet/Network.c
drivers/xHCI/xHCI.c
drivers/ISA/ISA.c
drivers/sound/SB16.c
drivers/sound/Generic.c
drivers/storage/AHCI.c
drivers/LPT/LPT.c
drivers/virtio/VirtioBlk.c
drivers/vmware/SVGAII.c
)

set(ARCH_SOURCES
arch/x86_64/idt/Idt.c
arch/x86_64/gdt/Gdt.c
arch/x86_64/interrupts/Interrupts.c
arch/x86_64/syscall/Syscall.c
arch/x86_64/features/x64.c
)

set(INCLUDE_SOURCES
include/ctype.c
include/Font.c
)

set(CPP_SOURCES
ports/6502/6502.cpp
)

set(C_SOURCES
${KERNEL_CORE_SOURCES}
${SCHED_SOURCES}
${KERNEL_ETC_SOURCES}
${ATOMIC_IPC_SOURCES}
${EXECF_SOURCES}
${MM_SOURCES}
${FS_SOURCES}
${DRIVER_SOURCES}
${ARCH_SOURCES}
${INCLUDE_SOURCES}
)

set(OBJ_SOURCES)

# ============================================================================
# Sources Configuration
# ============================================================================
if (VF_CONFIG_HEAP_LANG STREQUAL "C")
list(APPEND MM_SOURCES
mm/KernelHeap.c
)
endif()

if(NOT EXCLUDE_EXTRA_OBJECTS)
set(OBJ_SOURCES
kernel/etc/objects/splash1.o
kernel/etc/objects/panic.o
)
endif()
18 changes: 0 additions & 18 deletions kernel/etc/Shell.c
Original file line number Diff line number Diff line change
Expand Up @@ -368,23 +368,6 @@ static void AllocHandler(const char * args) {
KernelFree(size_str);
}

static void RsAllocHandler(const char * args) {
char* size_str = GetArg(args, 1);
if (!size_str) {
PrintKernel("Usage: rsalloc <size>\n");
KernelFree(size_str);
return;
}
int size = atoi(size_str);
if (size <= 0) {
PrintKernel("Usage: rsalloc <size>\n");
KernelFree(size_str);
return;
}
if (!rust_kmalloc((uint32_t)size)) PrintKernelErrorF("Allocation for %d bytes failed\n", size);
KernelFree(size_str);
}

static void PanicHandler(const char * args) {
char* str = GetArg(args, 1);
Registers * regs = {0};
Expand Down Expand Up @@ -1200,7 +1183,6 @@ static const ShellCommand commands[] = {\
{"mkdir", MkdirHandler},
{"touch", TouchHandler},
{"alloc", AllocHandler},
{"rsalloc", RsAllocHandler},
{"panic", PanicHandler},
{"kill", KillHandler},
{"rm", RmHandler},
Expand Down
Loading