Added bridging header for swift

c structures are now exposed to swift using a bridging header.
it is possible to access bootinfo using the structure (as oppossed to doing bytesfifts blind)
tested on aarch64 apple.
please test on other systems
This commit is contained in:
2026-04-20 16:33:41 +09:00
parent d9110ddce9
commit f3819a5450
3 changed files with 10 additions and 9 deletions
+2
View File
@@ -70,6 +70,8 @@ add_custom_command(
-wmo -wmo
-O -O
-Xcc -fno-stack-protector -Xcc -fno-stack-protector
-Xcc -I${CMAKE_CURRENT_SOURCE_DIR}/../Common
-import-bridging-header ${CMAKE_CURRENT_SOURCE_DIR}/Source/BridgingHeader.h
-resource-dir ${SWIFT_RESOURCE_DIR} -resource-dir ${SWIFT_RESOURCE_DIR}
-c ${SWIFT_SOURCES} -c ${SWIFT_SOURCES}
-o ${SWIFT_OBJ} -o ${SWIFT_OBJ}
+1
View File
@@ -0,0 +1 @@
#include "bootinfo.h"
+7 -9
View File
@@ -1,12 +1,10 @@
@_cdecl("kmain") @_cdecl("kmain")
public func kernelMain(_ bootInfo: UInt) { public func kernelMain(_ bootInfo: UnsafeMutablePointer<Bootinfo>) {
// Bootinfo offsets: fb starts at 64, then base(8), baseSize(8), width(8), height(8) let fb = bootInfo.pointee.framebuffer
let fbBase = UnsafePointer<UInt>(bitPattern: bootInfo &+ 64)!.pointee let pixels = fb.base!
let width = UnsafePointer<UInt64>(bitPattern: bootInfo &+ 80)!.pointee let width = Int(fb.width)
let height = UnsafePointer<UInt64>(bitPattern: bootInfo &+ 88)!.pointee let height = Int(fb.height)
let total = width * height
let pixels = UnsafeMutablePointer<UInt32>(bitPattern: fbBase)!
let total = Int(width) &* Int(height)
let stripe = total / 5 let stripe = total / 5
var i = 0 var i = 0
@@ -15,7 +13,7 @@ public func kernelMain(_ bootInfo: UInt) {
let color: UInt32 let color: UInt32
if s == 0 || s >= 4 { color = 0x5BCEFA } if s == 0 || s >= 4 { color = 0x5BCEFA }
else if s == 2 { color = 0xFFFFFF } else if s == 2 { color = 0xFFFFFF }
else { color = 0xF5A7B8 } else { color = 0xF5A7B8 }
pixels[i] = color pixels[i] = color
i &+= 1 i &+= 1
} }