ef14a52b49
We now have RNG!
- Implement ChaCha20-based cryptographically secure random number generator (CSPRNG) in `src/drivers/rand/random.c` and its header in `src/drivers/rand/random.h`.
- Modify VFS to support directory operations, including opening directories and reading directory entries.
- Update syscall interface to include new syscalls for directory handling: `SYS_OPEN_DIR` and `SYS_READ_ENTRIES`.
- Enhance file creation in EXT2 to allow specifying file modes.
- Refactor VFS file handling to accommodate new flags and modes.
- Update user-space application in `user/include/mlibc/helloworld.c` to demonstrate file operations including `touch`, `ls`, and `cat`.
- Clean up debug print statements in EXT2 file system code.
- Worked on proper error handling and return codes across VFS and syscall implementations.
It's only a small step but we're getting closer to making error codes standardized
We also setup SSE exactly as we should've the first time we introduced it in commit 9a9b91c
We have added it correctly to the user stack trampoline (hopefully), so there shouldn't be any issues now.
Signed-off-by: kaguya <vpshinomiya@protonmail.com>
153 lines
4.4 KiB
CMake
153 lines
4.4 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
|
|
project(KirkOS C ASM)
|
|
|
|
set(VERSION 1)
|
|
set(PATCHLEVEL 0)
|
|
set(SUBLEVEL 0)
|
|
set(EXTRAVERSION "")
|
|
|
|
set(KIRKOS_VERSION_STRING
|
|
"${VERSION}.${PATCHLEVEL}.${SUBLEVEL}${EXTRAVERSION}"
|
|
)
|
|
|
|
include(${CMAKE_SOURCE_DIR}/libs/uacpi/uacpi.cmake)
|
|
|
|
message(STATUS "Building KirkOS version: ${KIRKOS_VERSION_STRING}")
|
|
|
|
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
|
|
|
file(GLOB_RECURSE KIRKOS_SOURCES
|
|
"${CMAKE_SOURCE_DIR}/src/*.c"
|
|
"${CMAKE_SOURCE_DIR}/src/*.S"
|
|
)
|
|
|
|
|
|
set(ISO_ROOT "${CMAKE_BINARY_DIR}/iso_root")
|
|
set(DISK_IMG "${CMAKE_BINARY_DIR}/disk.img")
|
|
set(ISO "${CMAKE_BINARY_DIR}/image.iso")
|
|
|
|
set(EXT2_ROOT "${CMAKE_SOURCE_DIR}/ext2_root")
|
|
|
|
|
|
|
|
add_executable(KirkOS ${KIRKOS_SOURCES})
|
|
|
|
target_sources(KirkOS PRIVATE
|
|
${UACPI_SOURCES}
|
|
${CMAKE_SOURCE_DIR}/libs/uacpi/source/kernel_api.c
|
|
)
|
|
|
|
target_include_directories(KirkOS PRIVATE
|
|
${UACPI_INCLUDES}
|
|
)
|
|
|
|
target_compile_definitions(KirkOS PRIVATE
|
|
KIRKOS_VERSION="${KIRKOS_VERSION_STRING}"
|
|
KIRKOS_VERSION_MAJOR=${VERSION}
|
|
KIRKOS_VERSION_PATCH=${PATCHLEVEL}
|
|
KIRKOS_VERSION_SUB=${SUBLEVEL}
|
|
)
|
|
|
|
|
|
|
|
add_custom_command(
|
|
OUTPUT ${ISO_ROOT}/boot/KirkOS
|
|
DEPENDS KirkOS
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
$<TARGET_FILE:KirkOS>
|
|
${ISO_ROOT}/boot/KirkOS
|
|
)
|
|
|
|
add_custom_target(iso_kernel DEPENDS ${ISO_ROOT}/boot/KirkOS)
|
|
|
|
set(LIMINE_DIR "${CMAKE_SOURCE_DIR}/limine")
|
|
|
|
add_custom_target(limine_files
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${ISO_ROOT}/boot/limine
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${ISO_ROOT}/EFI/BOOT
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/limine.conf ${ISO_ROOT}/boot/limine/
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIMINE_DIR}/limine-bios.sys ${ISO_ROOT}/boot/limine/
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIMINE_DIR}/limine-bios-cd.bin ${ISO_ROOT}/boot/limine/
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIMINE_DIR}/limine-uefi-cd.bin ${ISO_ROOT}/boot/limine/
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIMINE_DIR}/BOOTX64.EFI ${ISO_ROOT}/EFI/BOOT/
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIMINE_DIR}/BOOTIA32.EFI ${ISO_ROOT}/EFI/BOOT/
|
|
)
|
|
add_custom_target(iso
|
|
DEPENDS iso_kernel limine_files
|
|
COMMAND xorriso -as mkisofs -R -r -J
|
|
-b boot/limine/limine-bios-cd.bin
|
|
-no-emul-boot -boot-load-size 4 -boot-info-table
|
|
-hfsplus
|
|
-apm-block-size 2048
|
|
--efi-boot boot/limine/limine-uefi-cd.bin
|
|
-efi-boot-part --efi-boot-image
|
|
--protective-msdos-label
|
|
${ISO_ROOT}
|
|
-o ${ISO}
|
|
|
|
COMMAND ${LIMINE_DIR}/limine bios-install ${ISO}
|
|
)
|
|
|
|
add_custom_target(disk_img
|
|
COMMAND dd if=/dev/zero of=${DISK_IMG} bs=1M count=512
|
|
COMMAND mkfs.ext2 -F -L KIRKOS ${DISK_IMG}
|
|
|
|
COMMAND guestfish --rw -a ${DISK_IMG} run
|
|
COMMAND guestfish --rw -a ${DISK_IMG} -m /dev/sda mkdir /root
|
|
COMMAND guestfish --rw -a ${DISK_IMG} -m /dev/sda copy-in ${EXT2_ROOT}/. /
|
|
|
|
COMMENT "Creating ext2 disk image via guestfish"
|
|
)
|
|
|
|
add_custom_target(run
|
|
DEPENDS iso disk_img
|
|
COMMAND qemu-system-x86_64
|
|
-cdrom ${ISO}
|
|
-hda ${DISK_IMG}
|
|
-debugcon stdio
|
|
-m 8G
|
|
-smp 2
|
|
-device ich9-intel-hda
|
|
-device hda-duplex
|
|
-cpu qemu64,+fsgsbase
|
|
)
|
|
|
|
add_custom_target(debug
|
|
DEPENDS iso disk_img
|
|
COMMAND qemu-system-x86_64
|
|
-cdrom ${ISO}
|
|
-hda ${DISK_IMG}
|
|
-debugcon stdio
|
|
-s -S
|
|
-d int,cpu_reset
|
|
-m 8G
|
|
-smp 2
|
|
-device ich9-intel-hda
|
|
-device hda-duplex
|
|
-cpu qemu64,+fsgsbase
|
|
)
|
|
|
|
target_include_directories(KirkOS PRIVATE
|
|
"${CMAKE_SOURCE_DIR}/src"
|
|
)
|
|
|
|
|
|
# ----------------------------------------
|
|
# DEFAULT C FLAGS (cacheable overrides)
|
|
# ----------------------------------------
|
|
set(KIRKOS_CFLAGS "-g -O2 -pipe -Wall -Wextra -std=gnu11 -ffreestanding -fno-stack-protector -fno-stack-check -fno-lto -fno-PIC -ffunction-sections -fdata-sections -m64 -march=x86-64 -mabi=sysv -mno-80387 -mno-red-zone -mcmodel=kernel"
|
|
CACHE STRING "Default CFLAGS for KirkOS")
|
|
|
|
set(KIRKOS_LDFLAGS "-nostdlib -static -Wl,--gc-sections -Wl,-T,../linker.lds -Wl,-z,max-page-size=0x1000 -Wl,-m,elf_x86_64"
|
|
CACHE STRING "Default LDFLAGS for KirkOS")
|
|
|
|
# ----------------------------------------
|
|
# Apply flags
|
|
# ----------------------------------------
|
|
separate_arguments(_cflags UNIX_COMMAND "${KIRKOS_CFLAGS}")
|
|
separate_arguments(_ldflags UNIX_COMMAND "${KIRKOS_LDFLAGS}")
|
|
|
|
target_compile_options(KirkOS PRIVATE ${_cflags})
|
|
target_link_options(KirkOS PRIVATE ${_ldflags}) |