Skip to content

Commit a2fde71

Browse files
committed
Fix
1 parent bcc5bbc commit a2fde71

2 files changed

Lines changed: 66 additions & 52 deletions

File tree

CMakeLists.txt

Lines changed: 34 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -36,60 +36,57 @@ include_directories(include)
3636
file(GLOB_RECURSE ASM_SOURCES "src/*.asm")
3737
file(GLOB_RECURSE C_SOURCES "src/*.c")
3838

39-
# Ensure boot.asm is ALWAYS FIRST in the link order to keep Multiboot header at the top
40-
set(BOOT_ASM "${CMAKE_CURRENT_SOURCE_DIR}/src/boot.asm")
41-
list(REMOVE_ITEM ASM_SOURCES "${BOOT_ASM}")
42-
set(ASM_SOURCES "${BOOT_ASM}" ${ASM_SOURCES})
43-
44-
# Exclude specific files if needed
45-
list(FILTER C_SOURCES EXCLUDE REGEX "src/drivers/vga.c")
46-
47-
# Handle AI Model Blob
48-
set(ASSETS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets")
49-
set(MODEL_BLOB "")
50-
51-
# Check for model candidates
52-
set(CANDIDATES
53-
"${ASSETS_DIR}/smollm2.gguf"
54-
"${ASSETS_DIR}/smollm-135m.gguf"
55-
"${ASSETS_DIR}/SmolLM2-135M-Instruct-Q4_K_M.gguf"
56-
)
57-
58-
foreach(CANDIDATE ${CANDIDATES})
59-
if(EXISTS "${CANDIDATE}")
60-
set(MODEL_BLOB "${CANDIDATE}")
61-
message(STATUS "Found AI model blob: ${MODEL_BLOB}")
62-
break()
63-
endif()
64-
endforeach()
65-
66-
if(MODEL_BLOB)
67-
set(MODEL_OBJ "${CMAKE_CURRENT_BINARY_DIR}/model.o")
39+
# AI model blob handling
40+
set(MODEL_BLOB "${CMAKE_CURRENT_SOURCE_DIR}/model.bin")
41+
if(EXISTS "${MODEL_BLOB}")
42+
set(MODEL_OBJ "model.o")
6843
add_custom_command(
6944
OUTPUT ${MODEL_OBJ}
7045
COMMAND i686-linux-gnu-objcopy -I binary -O elf32-i386 -B i386
7146
--rename-section .data=.ai_model,alloc,load,readonly,data,contents
7247
"${MODEL_BLOB}" "${MODEL_OBJ}"
7348
DEPENDS "${MODEL_BLOB}"
7449
COMMENT "Converting AI model blob to object file"
50+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
7551
)
76-
# Add the object file to the sources
77-
list(APPEND ASM_SOURCES ${MODEL_OBJ})
52+
# Use the generated object file in the link step
53+
set(MODEL_OBJ_PATH "${CMAKE_CURRENT_BINARY_DIR}/${MODEL_OBJ}")
7854
else()
7955
message(WARNING "AI model blob not found. Kernel will be built without AI support.")
56+
set(MODEL_OBJ_PATH "")
8057
endif()
8158

59+
# Ensure boot.asm is ALWAYS FIRST in the link order to keep Multiboot header at the top
60+
set(BOOT_ASM "${CMAKE_CURRENT_SOURCE_DIR}/src/boot.asm")
61+
list(REMOVE_ITEM ASM_SOURCES "${BOOT_ASM}")
62+
set(ASM_SOURCES "${BOOT_ASM}" ${ASM_SOURCES})
63+
64+
# Exclude specific files if needed
65+
list(FILTER C_SOURCES EXCLUDE REGEX "src/drivers/vga.c")
66+
8267
# Build Kernel Binary
8368
set(LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/linker.ld")
8469

85-
# We use add_executable but we need to control the linking process
86-
add_executable(kernel.bin ${ASM_SOURCES} ${C_SOURCES})
70+
add_executable(kernel.bin ${ASM_SOURCES} ${C_SOURCES} ${MODEL_OBJ_PATH})
71+
72+
target_link_options(kernel.bin PRIVATE
73+
"-T${LINKER_SCRIPT}"
74+
"-nostdlib"
75+
"-m32"
76+
"-no-pie"
77+
"-Wl,-z,noexecstack"
78+
)
79+
80+
# Find libgcc
81+
execute_process(
82+
COMMAND ${CMAKE_C_COMPILER} -m32 -print-libgcc-file-name
83+
OUTPUT_VARIABLE LIBGCC_PATH
84+
OUTPUT_STRIP_TRAILING_WHITESPACE
85+
)
86+
87+
target_link_libraries(kernel.bin PRIVATE "${LIBGCC_PATH}")
8788

8889
set_target_properties(kernel.bin PROPERTIES
89-
LINK_FLAGS "-T \"${LINKER_SCRIPT}\" -nostdlib -m32 -no-pie -Wl,-z,noexecstack"
9090
SUFFIX ""
9191
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
9292
)
93-
94-
# Link with libgcc for arithmetic operations
95-
target_link_libraries(kernel.bin gcc)

linker.ld

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,59 @@
11
ENTRY(_start)
22

3+
PHDRS
4+
{
5+
multiboot PT_LOAD FLAGS(5); /* Read + Execute */
6+
text PT_LOAD FLAGS(5); /* Read + Execute */
7+
data PT_LOAD FLAGS(6); /* Read + Write */
8+
}
9+
310
SECTIONS
411
{
512
/* The kernel starts at 1MB */
613
. = 1M;
714

8-
.multiboot BLOCK(4K) : ALIGN(4K)
15+
.multiboot : AT(ADDR(.multiboot))
916
{
1017
KEEP(*(.multiboot))
11-
}
18+
} : multiboot
1219

13-
.text BLOCK(4K) : ALIGN(4K)
20+
.text : AT(ADDR(.text))
1421
{
1522
*(.text)
16-
}
23+
*(.text.*)
24+
} : text
1725

18-
.rodata BLOCK(4K) : ALIGN(4K)
26+
.rodata : AT(ADDR(.rodata))
1927
{
20-
*(.rodata*)
21-
}
28+
*(.rodata)
29+
*(.rodata.*)
30+
} : data
2231

23-
.ai_model BLOCK(4K) : ALIGN(4K)
32+
.ai_model : AT(ADDR(.ai_model))
2433
{
2534
_ai_model_start = .;
2635
KEEP(*(.ai_model*))
2736
_ai_model_end = .;
28-
}
37+
} : data
2938

30-
.data BLOCK(4K) : ALIGN(4K)
39+
.data : AT(ADDR(.data))
3140
{
32-
*(.data*)
33-
}
41+
*(.data)
42+
*(.data.*)
43+
} : data
3444

35-
.bss BLOCK(4K) : ALIGN(4K)
45+
.bss : AT(ADDR(.bss))
3646
{
47+
*(.bss)
48+
*(.bss.*)
3749
*(COMMON)
38-
*(.bss*)
39-
}
50+
} : data
4051

4152
kernel_end = .;
53+
54+
/DISCARD/ :
55+
{
56+
*(.comment)
57+
*(.note*)
58+
}
4259
}

0 commit comments

Comments
 (0)