From b33f63635b1e36a64441d52433ff37e7cc955070 Mon Sep 17 00:00:00 2001 From: karina Date: Mon, 20 Apr 2026 09:38:27 +0400 Subject: [PATCH] build: CMake toolchain for Kernel build: moved CMake toolchain for Bootloader from Source folder to root of Bootloader --- .../{Source => }/cmake/aarch64-uefi.cmake | 0 Bootloader/justfile | 2 +- Kernel/CMakeLists.txt | 16 +----- Kernel/Source/entry.S | 50 ++++++++++++++++--- Kernel/cmake/aarch64-bare.cmake | 16 ++++++ Kernel/justfile | 3 +- 6 files changed, 65 insertions(+), 22 deletions(-) rename Bootloader/{Source => }/cmake/aarch64-uefi.cmake (100%) create mode 100644 Kernel/cmake/aarch64-bare.cmake diff --git a/Bootloader/Source/cmake/aarch64-uefi.cmake b/Bootloader/cmake/aarch64-uefi.cmake similarity index 100% rename from Bootloader/Source/cmake/aarch64-uefi.cmake rename to Bootloader/cmake/aarch64-uefi.cmake diff --git a/Bootloader/justfile b/Bootloader/justfile index 0925817..f960253 100644 --- a/Bootloader/justfile +++ b/Bootloader/justfile @@ -2,7 +2,7 @@ BUILD_DIR := env_var_or_default("BUILD_DIR", justfile_directory() + "/.build") TEMP_DIR := env_var_or_default("TEMP_DIR", BUILD_DIR + "/temp") build: cmake -B {{TEMP_DIR}}/Bootloader -S . \ - -DCMAKE_TOOLCHAIN_FILE=Source/cmake/aarch64-uefi.cmake \ + -DCMAKE_TOOLCHAIN_FILE=cmake/aarch64-uefi.cmake \ -DCMAKE_BUILD_TYPE=Release cmake --build {{TEMP_DIR}}/Bootloader diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 396055d..7d0c196 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -1,21 +1,10 @@ cmake_minimum_required(VERSION 3.10) -project(MyShittyKernel LANGUAGES ASM C) +project(ksOSKernel LANGUAGES ASM C) -if(NOT LLVM_BIN) - execute_process(COMMAND brew --prefix llvm OUTPUT_VARIABLE LLVM_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE) - set(LLVM_BIN "${LLVM_PREFIX}/bin") -endif() - -set(CMAKE_C_COMPILER "${LLVM_BIN}/clang") -set(CMAKE_ASM_COMPILER "${LLVM_BIN}/clang") -set(LLVM_OBJCOPY "${LLVM_BIN}/llvm-objcopy") - -set(TARGET_TRIPLE aarch64-none-elf) -add_compile_options(--target=${TARGET_TRIPLE} -ffreestanding -nostdlib -O0 -g) +add_compile_options(-ffreestanding -nostdlib -O0 -g) set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld) add_link_options( - --target=${TARGET_TRIPLE} -fuse-ld=lld -nostdlib -static @@ -23,7 +12,6 @@ add_link_options( ) add_executable(kernel.elf Source/entry.S) - add_custom_command(TARGET kernel.elf POST_BUILD COMMAND ${LLVM_OBJCOPY} -O binary kernel.elf kernel.bin COMMENT "kernel.elf -> kernel.bin" diff --git a/Kernel/Source/entry.S b/Kernel/Source/entry.S index ec602e7..c1179ce 100644 --- a/Kernel/Source/entry.S +++ b/Kernel/Source/entry.S @@ -2,20 +2,58 @@ .global _start _start: - add x1, x0, #64 // x1 = BIFramebuffer - ldr x2, [x1] // x2 = base - ldr x3, [x1, #16] // x3 = width - ldr x4, [x1, #24] // x4 = height + add x1, x0, #64 + ldr x2, [x1] // base + ldr x3, [x1, #16] // width + ldr x4, [x1, #24] // height mul x5, x3, x4 + mov x7, #5 + udiv x10, x5, x7 // stripe size + + // 0x00RRGGBB + // lblue: 5B CE FA + mov w11, #0xCEFA + movk w11, #0x5B, lsl #16 - mov w6, #0x00FF00 - movk w6, #0x0000, lsl #16 + // pink: F5 A7 B8 + mov w12, #0xA7B8 + movk w12, #0xF5, lsl #16 + + // white: FF FF FF + mov w13, #0xFFFF + movk w13, #0xFF, lsl #16 + + mov x14, #0 // pixels in curr stripe + mov x15, #0 // stripe index fill_loop: cbz x5, done + + cmp x15, #0 + b.eq set_blue + cmp x15, #1 + b.eq set_pink + cmp x15, #2 + b.eq set_white + cmp x15, #3 + b.eq set_pink + b set_blue + +set_blue: mov w6, w11; b draw +set_pink: mov w6, w12; b draw +set_white: mov w6, w13 + +draw: str w6, [x2], #4 sub x5, x5, #1 + add x14, x14, #1 + + cmp x14, x10 + b.lt fill_loop + + mov x14, #0 + add x15, x15, #1 b fill_loop done: diff --git a/Kernel/cmake/aarch64-bare.cmake b/Kernel/cmake/aarch64-bare.cmake new file mode 100644 index 0000000..4494c10 --- /dev/null +++ b/Kernel/cmake/aarch64-bare.cmake @@ -0,0 +1,16 @@ +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR aarch64) +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +if(NOT LLVM_BIN) + execute_process(COMMAND brew --prefix llvm OUTPUT_VARIABLE LLVM_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE) + set(LLVM_BIN "${LLVM_PREFIX}/bin") +endif() + +set(CMAKE_C_COMPILER "${LLVM_BIN}/clang") +set(CMAKE_ASM_COMPILER "${LLVM_BIN}/clang") +set(LLVM_OBJCOPY "${LLVM_BIN}/llvm-objcopy") + +set(TARGET_TRIPLE aarch64-none-elf) +set(CMAKE_C_COMPILER_TARGET ${TARGET_TRIPLE}) +set(CMAKE_ASM_COMPILER_TARGET ${TARGET_TRIPLE}) \ No newline at end of file diff --git a/Kernel/justfile b/Kernel/justfile index 3c01cea..55e521c 100644 --- a/Kernel/justfile +++ b/Kernel/justfile @@ -1,7 +1,8 @@ BUILD_DIR := env_var_or_default("BUILD_DIR", justfile_directory() + "/.build") TEMP_DIR := env_var_or_default("TEMP_DIR", BUILD_DIR + "/temp") build: - cmake -B {{TEMP_DIR}}/Kernel -S . + cmake -B {{TEMP_DIR}}/Kernel -S . \ + -DCMAKE_TOOLCHAIN_FILE=cmake/aarch64-bare.cmake cmake --build {{TEMP_DIR}}/Kernel