feat: initial booting kernel, copy libc stuff from myke

This commit is contained in:
2023-03-22 21:02:22 +01:00
parent 591b6d61c5
commit 61fb439d72
26 changed files with 791 additions and 220 deletions

View File

@@ -1,27 +1,57 @@
project(yak-kernel)
set(CMAKE_C_FLAGS "
-ffreestanding \
-fno-stack-protector \
-fno-stack-check \
-fno-lto \
-fno-pie \
-fno-pic \
-m64 \
-march=x86-64 \
-mabi=sysv \
-mno-80387 \
-mno-mmx \
-mno-sse \
-mno-sse2 \
-mno-red-zone \
-mcmodel=kernel")
set(CMAKE_EXE_LINKER_FLAGS "
-nostdlib \
-static \
-z max-page-size=0x1000 \
-T ${CMAKE_CURRENT_SOURCE_DIR}/linker.lds")
set(CMAKE_SYSROOT "/does-not-exist")
include_directories(../limine/include)
option(USE_LIMINE "Enable support for the limine boot protocol" ON)
add_executable(yak.elf main.c)
add_compile_options(
-ffreestanding
-fno-lto
-fno-pie
-fno-pic
-m64
--target=x86_64-pc-none-eabi
-mno-80387
-mno-mmx
-mno-sse
-mno-sse2
-mno-red-zone
-mcmodel=kernel
)
add_link_options(
-nostdlib
-static
-z max-page-size=0x1000
-T ${CMAKE_CURRENT_SOURCE_DIR}/linker.lds
)
FetchContent_Declare(printf_library
GIT_REPOSITORY https://github.com/eyalroz/printf.git
GIT_TAG v6.1.0)
FetchContent_GetProperties(printf_library)
if (NOT printf_library_POPULATED)
FetchContent_Populate(printf_library)
endif ()
if (NOT ${USE_LIMINE})
message(FATAL_ERROR "At least one boot protocol is required")
endif ()
file(GLOB KERNEL_SOURCES src/rt/*.c src/ulibc/*.c)
file(GLOB PLATFORM_GENERIC_SOURCES src/platform/generic/*.c)
if (${USE_LIMINE})
file(GLOB LIMINE_KERNEL_SOURCES src/rt/limine/*.c)
endif ()
if (NOT IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/${CMAKE_SYSTEM_PROCESSOR})
message(FATAL_ERROR "Unknown architecture ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/${CMAKE_SYSTEM_PROCESSOR}")
endif ()
file(GLOB PLATFORM_SPECIFIC_SOURCES src/platform/x86_64/*.c)
set(KERNEL_SOURCE_FILES ${KERNEL_SOURCES} ${LIMINE_KERNEL_SOURCES} ${PLATFORM_GENERIC_SOURCES} ${PLATFORM_SPECIFIC_SOURCES})
add_executable(yak.elf ${KERNEL_SOURCE_FILES})
target_link_libraries(yak.elf PRIVATE /usr/lib/clang/15.0.7/lib/linux/libclang_rt.builtins-x86_64.a)
target_include_directories(yak.elf PRIVATE include ../limine/include ${printf_library_SOURCE_DIR}/src)# ${printf_library_SOURCE_DIR}/src)