Working kernel written on C and userspace-ready #1
@@ -0,0 +1,2 @@
|
|||||||
|
CompileFlags:
|
||||||
|
CompilationDatabase: ../.build/temp/Kernel
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.20)
|
cmake_minimum_required(VERSION 3.20)
|
||||||
project(ksOSKernel LANGUAGES ASM C)
|
project(ksOSKernel LANGUAGES ASM C)
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
file(GLOB_RECURSE KERNEL_SOURCES CMAKE_CONFIGURE_DEPENDS
|
file(GLOB_RECURSE KERNEL_SOURCES CMAKE_CONFIGURE_DEPENDS
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/Source/KernelMain.c
|
${CMAKE_CURRENT_SOURCE_DIR}/Source/KernelMain.c
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
// Copyright (c) 2026 0xKarinyash
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
typedef unsigned char UInt8;
|
||||||
|
typedef unsigned short UInt16;
|
||||||
|
typedef unsigned int UInt32;
|
||||||
|
typedef unsigned long long UInt64;
|
||||||
|
|
||||||
|
typedef signed char Int8;
|
||||||
|
typedef signed short Int16;
|
||||||
|
typedef signed int Int32;
|
||||||
|
typedef signed long long Int64;
|
||||||
|
|
||||||
|
typedef UInt64 Size;
|
||||||
|
|
||||||
|
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#include "types.h"
|
||||||
|
|
||||||
void KernelMain(void) {
|
void KernelMain(void) {
|
||||||
|
volatile UInt64 meow = 0x12345;
|
||||||
}
|
}
|
||||||
@@ -3,25 +3,35 @@ set(CMAKE_SYSTEM_PROCESSOR aarch64)
|
|||||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||||
|
|
||||||
if(NOT LLVM_BIN)
|
if(NOT LLVM_BIN)
|
||||||
if(APPLE)
|
find_program(_CLANG
|
||||||
|
NAMES clang
|
||||||
|
HINTS
|
||||||
|
/opt/homebrew/opt/llvm/bin
|
||||||
|
/usr/local/opt/llvm/bin
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT _CLANG AND APPLE)
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND brew --prefix llvm
|
COMMAND brew --prefix llvm
|
||||||
OUTPUT_VARIABLE LLVM_PREFIX
|
OUTPUT_VARIABLE LLVM_PREFIX
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
ERROR_QUIET
|
||||||
|
RESULT_VARIABLE BREW_PREFIX_RESULT
|
||||||
)
|
)
|
||||||
set(LLVM_BIN "${LLVM_PREFIX}/bin")
|
if(BREW_PREFIX_RESULT EQUAL 0 AND EXISTS "${LLVM_PREFIX}/bin/clang")
|
||||||
else()
|
set(_CLANG "${LLVM_PREFIX}/bin/clang")
|
||||||
find_program(_CLANG clang)
|
|
||||||
if(NOT _CLANG)
|
|
||||||
message(FATAL_ERROR "clang not found.")
|
|
||||||
endif()
|
endif()
|
||||||
get_filename_component(LLVM_BIN "${_CLANG}" DIRECTORY)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT _CLANG)
|
||||||
|
message(FATAL_ERROR "clang not found. Set LLVM_BIN or add clang to PATH.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_filename_component(LLVM_BIN "${_CLANG}" DIRECTORY)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CMAKE_C_COMPILER "${LLVM_BIN}/clang")
|
set(CMAKE_C_COMPILER "${LLVM_BIN}/clang")
|
||||||
set(CMAKE_ASM_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(TARGET_TRIPLE aarch64-none-elf)
|
||||||
set(CMAKE_C_COMPILER_TARGET ${TARGET_TRIPLE})
|
set(CMAKE_C_COMPILER_TARGET ${TARGET_TRIPLE})
|
||||||
@@ -29,10 +39,17 @@ set(CMAKE_ASM_COMPILER_TARGET ${TARGET_TRIPLE})
|
|||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
find_program(TERMOS_LD_LLD NAMES ld.lld HINTS /usr/local/bin /opt/homebrew/bin REQUIRED)
|
find_program(TERMOS_LD_LLD NAMES ld.lld HINTS /usr/local/bin /opt/homebrew/bin REQUIRED)
|
||||||
find_program(LLVM_OBJCOPY NAMES llvm-objcopy objcopy
|
|
||||||
HINTS /usr/local/opt/llvm/bin /opt/homebrew/opt/llvm/bin /usr/local/bin /opt/homebrew/bin
|
|
||||||
REQUIRED)
|
|
||||||
set(CMAKE_C_LINK_FLAGS "")
|
set(CMAKE_C_LINK_FLAGS "")
|
||||||
set(CMAKE_C_LINK_EXECUTABLE
|
set(CMAKE_C_LINK_EXECUTABLE
|
||||||
"${TERMOS_LD_LLD} <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
|
"${TERMOS_LD_LLD} <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
find_program(LLVM_OBJCOPY NAMES llvm-objcopy objcopy
|
||||||
|
HINTS
|
||||||
|
"${LLVM_BIN}"
|
||||||
|
/usr/local/opt/llvm/bin
|
||||||
|
/opt/homebrew/opt/llvm/bin
|
||||||
|
/usr/local/bin
|
||||||
|
/opt/homebrew/bin
|
||||||
|
REQUIRED
|
||||||
|
)
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@ build:
|
|||||||
|
|
||||||
cmake --build {{TEMP_DIR}}/Kernel
|
cmake --build {{TEMP_DIR}}/Kernel
|
||||||
|
|
||||||
cp {{TEMP_DIR}}/Kernel/kernel.bin {{BUILD_DIR}}/Kernel/ksOSKernel.bin
|
cp {{TEMP_DIR}}/Kernel/Kernel.bin {{BUILD_DIR}}/Kernel/ksOSKernel.bin
|
||||||
@echo "✅ Kernel ready at: {{BUILD_DIR}}/Kernel/ksOSKernel.bin"
|
@echo "✅ Kernel ready at: {{BUILD_DIR}}/Kernel/ksOSKernel.bin"
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|||||||
Reference in New Issue
Block a user