feat: added UART support with a basic kprint in kernel
wip: DTB
This commit is contained in:
+44
-9
@@ -1,5 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
project(ksOSKernel LANGUAGES ASM C)
|
||||
set(KERNEL_MODULE_NAME "Kernel")
|
||||
|
||||
# --- Locate Swift toolchain with Embedded Swift stdlib ---
|
||||
# Priority: cmake var > env var > auto-detect
|
||||
@@ -62,7 +63,11 @@ add_link_options(
|
||||
-Wl,-T,${LINKER_SCRIPT}
|
||||
)
|
||||
|
||||
set(SWIFT_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Source/kernel.swift)
|
||||
set(SWIFT_SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Source/kernel.swift
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Source/Arch/dtb.swift
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Source/IO/uart.swift
|
||||
)
|
||||
set(SWIFT_OBJ ${CMAKE_CURRENT_BINARY_DIR}/kernel_swift.o)
|
||||
|
||||
add_custom_command(
|
||||
@@ -75,7 +80,7 @@ add_custom_command(
|
||||
-O
|
||||
-Xcc -fno-stack-protector
|
||||
-Xcc -I${CMAKE_CURRENT_SOURCE_DIR}/../Common
|
||||
-import-bridging-header ${CMAKE_CURRENT_SOURCE_DIR}/Source/BridgingHeader.h
|
||||
-import-bridging-header ${CMAKE_CURRENT_SOURCE_DIR}/Source/Support/BridgingHeader.h
|
||||
-resource-dir ${SWIFT_RESOURCE_DIR}
|
||||
-c ${SWIFT_SOURCES}
|
||||
-o ${SWIFT_OBJ}
|
||||
@@ -89,17 +94,47 @@ set_source_files_properties(${SWIFT_OBJ} PROPERTIES
|
||||
GENERATED TRUE
|
||||
)
|
||||
|
||||
add_executable(kernel.elf Source/entry.S Source/stubs.c ${SWIFT_OBJ})
|
||||
add_executable(kernel.elf Source/Arch/entry.S Source/Support/stubs.c ${SWIFT_OBJ})
|
||||
|
||||
add_custom_command(TARGET kernel.elf POST_BUILD
|
||||
COMMAND ${LLVM_OBJCOPY} -O binary kernel.elf kernel.bin
|
||||
COMMENT "kernel.elf -> kernel.bin"
|
||||
)
|
||||
|
||||
# --- SourceKit-LSP: generate compile_commands.json for Swift ---
|
||||
set(_COMMON_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../Common")
|
||||
set(_BRIDGING_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/Source/BridgingHeader.h")
|
||||
# --- SourceKit-LSP: generate compile_commands.json for Swift (Dynamic) ---
|
||||
set(_BRIDGING_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/Source/Support/BridgingHeader.h")
|
||||
|
||||
set(SWIFT_ARGS
|
||||
"\"${SWIFTC}\""
|
||||
"\"-target\"" "\"aarch64-none-none-elf\""
|
||||
"\"-enable-experimental-feature\"" "\"Embedded\""
|
||||
"\"-module-name\"" "\"${KERNEL_MODULE_NAME}\""
|
||||
"\"-parse-as-library\""
|
||||
"\"-import-bridging-header\"" "\"${_BRIDGING_HEADER}\""
|
||||
)
|
||||
foreach(_src IN LISTS SWIFT_SOURCES)
|
||||
list(APPEND SWIFT_ARGS "\"${_src}\"")
|
||||
endforeach()
|
||||
|
||||
string(JOIN ", " SWIFT_ARGS_JSON ${SWIFT_ARGS})
|
||||
|
||||
set(COMPDB_ENTRIES "")
|
||||
list(LENGTH SWIFT_SOURCES _src_count)
|
||||
math(EXPR _last_idx "${_src_count} - 1")
|
||||
set(_idx 0)
|
||||
|
||||
foreach(_src IN LISTS SWIFT_SOURCES)
|
||||
set(_entry " {\n \"file\": \"${_src}\",\n \"directory\": \"${CMAKE_CURRENT_BINARY_DIR}\",\n \"arguments\": [${SWIFT_ARGS_JSON}]\n }")
|
||||
|
||||
if(_idx LESS _last_idx)
|
||||
string(APPEND _entry ",\n")
|
||||
else()
|
||||
string(APPEND _entry "\n")
|
||||
endif()
|
||||
|
||||
string(APPEND COMPDB_ENTRIES "${_entry}")
|
||||
math(EXPR _idx "${_idx} + 1")
|
||||
endforeach()
|
||||
|
||||
file(GENERATE OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/compile_commands.json"
|
||||
CONTENT "[\n {\n \"file\": \"${SWIFT_SOURCES}\",\n \"directory\": \"${CMAKE_CURRENT_BINARY_DIR}\",\n \"arguments\": [\n \"${SWIFTC}\",\n \"-target\", \"aarch64-none-none-elf\",\n \"-enable-experimental-feature\", \"Embedded\",\n \"-parse-as-library\",\n \"-wmo\",\n \"-O\",\n \"-Xcc\", \"-fno-stack-protector\",\n \"-Xcc\", \"-I${_COMMON_DIR}\",\n \"-import-bridging-header\", \"${_BRIDGING_HEADER}\",\n \"-resource-dir\", \"${SWIFT_RESOURCE_DIR}\",\n \"${SWIFT_SOURCES}\"\n ]\n }\n]\n"
|
||||
)
|
||||
CONTENT "[\n${COMPDB_ENTRIES}]\n"
|
||||
)
|
||||
Reference in New Issue
Block a user