Add first C user program

This commit is contained in:
2026-06-11 20:19:24 +03:00
parent b32c12b311
commit 1c935cf154
55 changed files with 365 additions and 276 deletions
+63 -31
View File
@@ -31,23 +31,15 @@ custom_target(
build_by_default: true,
)
custom_target(
'hello',
input: 'src/app/hello.asm',
output: 'hello.bin',
command: [nasm, '-f', 'bin', '-l', 'hello.lst', '@INPUT@', '-o', '@OUTPUT@'],
build_by_default: true,
)
kernel_entry_o = custom_target(
'kernel_entry',
input: 'src/kernel_entry.asm',
input: 'src/kernel/kernel_entry.asm',
output: 'kernel_entry.o',
command: [nasm, '-f', 'elf64', '@INPUT@', '-o', '@OUTPUT@'],
)
syscall_o = custom_target('syscall',
input: 'src/syscall.asm',
input: 'src/kernel/syscall.asm',
output: 'syscall.o',
command: [nasm, '-f', 'elf64', '@INPUT@', '-o', '@OUTPUT@'],
)
@@ -55,25 +47,26 @@ syscall_o = custom_target('syscall',
cc = meson.get_compiler('c')
kernel_sources = files(
'src/app/cat.c',
'src/app/ls.c',
'src/app/terminal.c',
'src/ata.c',
'src/fat16.c',
'src/fs.c',
'src/gdt.c',
'src/idt.c',
'src/kernel.c',
'src/keyboard.c',
'src/memory.c',
'src/panic.c',
'src/path.c',
'src/pic.c',
'src/process.c',
'src/string.c',
'src/syscall.c',
'src/tss.c',
'src/vga.c',
'src/kernel/app/cat.c',
'src/kernel/app/ls.c',
'src/kernel/app/terminal.c',
'src/kernel/ata.c',
'src/kernel/fat16.c',
'src/kernel/fs.c',
'src/kernel/gdt.c',
'src/kernel/idt.c',
'src/kernel/kernel.c',
'src/kernel/keyboard.c',
'src/kernel/memory.c',
'src/kernel/panic.c',
'src/kernel/path.c',
'src/kernel/pic.c',
'src/kernel/process.c',
'src/kernel/syscall.c',
'src/kernel/tss.c',
'src/kernel/vga.c',
'src/lib/memory.c',
'src/lib/string.c',
)
kernel_elf = executable(
@@ -88,13 +81,14 @@ kernel_elf = executable(
'-mcmodel=kernel',
'-Wno-unused-command-line-argument',
'-Wconversion',
'-DKERNEL="yes"',
'-DVERSION="' + meson.project_version() + '"',
],
link_args: [
'-T', meson.project_source_root() / 'src/linker.ld',
'-T', meson.project_source_root() / 'src/kernel/linker.ld',
'-nostdlib',
],
link_depends: 'src/linker.ld',
link_depends: 'src/kernel/linker.ld',
)
custom_target(
@@ -104,3 +98,41 @@ custom_target(
command: ['objcopy', '-O', 'binary', '@INPUT@', '@OUTPUT@'],
build_by_default: true,
)
hello_start = custom_target(
'hello_start',
input: 'src/user/start.asm',
output: 'hello_start.o',
command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'],
)
hello_syscall = custom_target(
'hello_syscall',
input: 'src/user/syscall.asm',
output: 'hello_syscall.o',
command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'],
)
hello_elf = executable(
'hello.elf',
sources: [hello_start, hello_syscall, 'src/user/app/hello/hello.c'],
c_args: [
'-ffreestanding',
'-nostdlib',
'-fno-stack-protector',
'-mcmodel=large',
],
link_args: [
'-T', meson.project_source_root() / 'src/user/linker.ld',
'-nostdlib',
],
link_depends: 'src/user/linker.ld',
)
custom_target(
'hello_bin',
input: hello_elf,
output: 'hello.bin',
command: ['objcopy', '-O', 'binary', '@INPUT@', '@OUTPUT@'],
build_by_default: true,
)