You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
312 lines
7.0 KiB
312 lines
7.0 KiB
project(
|
|
'freywaros',
|
|
'c',
|
|
default_options: [
|
|
'warning_level=2',
|
|
'c_std=c11',
|
|
],
|
|
version: '0.1.0',
|
|
)
|
|
|
|
run_target(
|
|
'compdb',
|
|
command: ['ninja', '-C', meson.project_build_root(), '-t', 'compdb'],
|
|
)
|
|
|
|
nasm = find_program('nasm')
|
|
|
|
custom_target(
|
|
'boot',
|
|
input: 'src/mbr.asm',
|
|
output: 'mbr.bin',
|
|
command: [nasm, '-f', 'bin', '-l', 'mbr.lst', '@INPUT@', '-o', '@OUTPUT@'],
|
|
build_by_default: true,
|
|
)
|
|
|
|
custom_target(
|
|
'bootloader',
|
|
input: 'src/bootloader.asm',
|
|
output: 'bootloader.bin',
|
|
command: [nasm, '-f', 'bin', '-l', 'bootloader.lst', '@INPUT@', '-o', '@OUTPUT@'],
|
|
build_by_default: true,
|
|
)
|
|
|
|
kernel_entry_o = custom_target(
|
|
'kernel_entry',
|
|
input: 'src/kernel/kernel_entry.asm',
|
|
output: 'kernel_entry.o',
|
|
command: [nasm, '-f', 'elf64', '@INPUT@', '-o', '@OUTPUT@'],
|
|
)
|
|
|
|
timer_o = custom_target(
|
|
'timer',
|
|
input: 'src/kernel/timer.asm',
|
|
output: 'timer.o',
|
|
command: [nasm, '-f', 'elf64', '@INPUT@', '-o', '@OUTPUT@'],
|
|
)
|
|
|
|
process_o = custom_target(
|
|
'process',
|
|
input: 'src/kernel/process.asm',
|
|
output: 'process.o',
|
|
command: [nasm, '-f', 'elf64', '@INPUT@', '-o', '@OUTPUT@'],
|
|
)
|
|
|
|
syscall_o = custom_target(
|
|
'syscall',
|
|
input: 'src/kernel/syscall.asm',
|
|
output: 'syscall.o',
|
|
command: [nasm, '-f', 'elf64', '@INPUT@', '-o', '@OUTPUT@'],
|
|
)
|
|
|
|
cc = meson.get_compiler('c')
|
|
|
|
lib_sources = files([
|
|
'src/lib/memory.c',
|
|
'src/lib/string.c',
|
|
])
|
|
|
|
kernel_sources = files([
|
|
'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/pipe.c',
|
|
'src/kernel/process.c',
|
|
'src/kernel/syscall.c',
|
|
'src/kernel/timer.c',
|
|
'src/kernel/tss.c',
|
|
'src/kernel/vga.c',
|
|
])
|
|
|
|
kernel_elf = executable(
|
|
'kernel.elf',
|
|
sources: [kernel_entry_o, timer_o, process_o, syscall_o, lib_sources, kernel_sources],
|
|
c_args: [
|
|
'-ffreestanding',
|
|
'-nostdlib',
|
|
'-nostartfiles',
|
|
'-mno-red-zone',
|
|
'-mgeneral-regs-only',
|
|
'-mcmodel=kernel',
|
|
'-Wno-unused-command-line-argument',
|
|
'-Wconversion',
|
|
'-DKERNEL="yes"',
|
|
'-DVERSION="' + meson.project_version() + '"',
|
|
],
|
|
link_args: [
|
|
'-T', meson.project_source_root() / 'src/kernel/linker.ld',
|
|
'-nostdlib',
|
|
],
|
|
link_depends: 'src/kernel/linker.ld',
|
|
)
|
|
|
|
custom_target(
|
|
'kernel_bin',
|
|
input: kernel_elf,
|
|
output: 'kernel.bin',
|
|
command: ['objcopy', '-O', 'binary', '@INPUT@', '@OUTPUT@'],
|
|
build_by_default: true,
|
|
)
|
|
|
|
terminal_start = custom_target(
|
|
'terminal_start',
|
|
input: 'src/user/start.asm',
|
|
output: 'terminal_start.o',
|
|
command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'],
|
|
)
|
|
|
|
terminal_syscall = custom_target(
|
|
'terminal_syscall',
|
|
input: 'src/user/syscall.asm',
|
|
output: 'terminal_syscall.o',
|
|
command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'],
|
|
)
|
|
|
|
terminal_elf = executable(
|
|
'terminal.elf',
|
|
sources: [terminal_start, terminal_syscall, lib_sources, 'src/user/app/terminal/terminal.c'],
|
|
c_args: [
|
|
'-ffreestanding',
|
|
'-nostdlib',
|
|
'-fno-stack-protector',
|
|
'-mcmodel=large',
|
|
'-DVERSION="' + meson.project_version() + '"',
|
|
],
|
|
link_args: [
|
|
'-T', meson.project_source_root() / 'src/user/linker.ld',
|
|
'-nostdlib',
|
|
],
|
|
link_depends: 'src/user/linker.ld',
|
|
)
|
|
|
|
custom_target(
|
|
'terminal',
|
|
input: terminal_elf,
|
|
output: 'terminal',
|
|
command: ['objcopy', '-O', 'binary', '@INPUT@', '@OUTPUT@'],
|
|
build_by_default: true,
|
|
)
|
|
|
|
shell_start = custom_target(
|
|
'shell_start',
|
|
input: 'src/user/start.asm',
|
|
output: 'shell_start.o',
|
|
command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'],
|
|
)
|
|
|
|
shell_syscall = custom_target(
|
|
'shell_syscall',
|
|
input: 'src/user/syscall.asm',
|
|
output: 'shell_syscall.o',
|
|
command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'],
|
|
)
|
|
|
|
shell_elf = executable(
|
|
'shell.elf',
|
|
sources: [shell_start, shell_syscall, lib_sources, 'src/user/app/shell/shell.c'],
|
|
c_args: [
|
|
'-ffreestanding',
|
|
'-nostdlib',
|
|
'-fno-stack-protector',
|
|
'-mcmodel=large',
|
|
'-DVERSION="' + meson.project_version() + '"',
|
|
],
|
|
link_args: [
|
|
'-T', meson.project_source_root() / 'src/user/linker.ld',
|
|
'-nostdlib',
|
|
],
|
|
link_depends: 'src/user/linker.ld',
|
|
)
|
|
|
|
custom_target(
|
|
'shell',
|
|
input: shell_elf,
|
|
output: 'shell',
|
|
command: ['objcopy', '-O', 'binary', '@INPUT@', '@OUTPUT@'],
|
|
build_by_default: true,
|
|
)
|
|
|
|
echo_start = custom_target(
|
|
'echo_start',
|
|
input: 'src/user/start.asm',
|
|
output: 'echo_start.o',
|
|
command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'],
|
|
)
|
|
|
|
echo_syscall = custom_target(
|
|
'echo_syscall',
|
|
input: 'src/user/syscall.asm',
|
|
output: 'echo_syscall.o',
|
|
command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'],
|
|
)
|
|
|
|
echo_elf = executable(
|
|
'echo.elf',
|
|
sources: [echo_start, echo_syscall, lib_sources, 'src/user/app/echo/echo.c'],
|
|
c_args: [
|
|
'-ffreestanding',
|
|
'-nostdlib',
|
|
'-fno-stack-protector',
|
|
'-mcmodel=large',
|
|
'-DVERSION="' + meson.project_version() + '"',
|
|
],
|
|
link_args: [
|
|
'-T', meson.project_source_root() / 'src/user/linker.ld',
|
|
'-nostdlib',
|
|
],
|
|
link_depends: 'src/user/linker.ld',
|
|
)
|
|
|
|
custom_target(
|
|
'echo',
|
|
input: echo_elf,
|
|
output: 'echo',
|
|
command: ['objcopy', '-O', 'binary', '@INPUT@', '@OUTPUT@'],
|
|
build_by_default: true,
|
|
)
|
|
|
|
ls_start = custom_target(
|
|
'ls_start',
|
|
input: 'src/user/start.asm',
|
|
output: 'ls_start.o',
|
|
command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'],
|
|
)
|
|
|
|
ls_syscall = custom_target(
|
|
'ls_syscall',
|
|
input: 'src/user/syscall.asm',
|
|
output: 'ls_syscall.o',
|
|
command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'],
|
|
)
|
|
|
|
ls_elf = executable(
|
|
'ls.elf',
|
|
sources: [ls_start, ls_syscall, lib_sources, 'src/user/app/ls/ls.c'],
|
|
c_args: [
|
|
'-ffreestanding',
|
|
'-nostdlib',
|
|
'-fno-stack-protector',
|
|
'-mcmodel=large',
|
|
'-DVERSION="' + meson.project_version() + '"',
|
|
],
|
|
link_args: [
|
|
'-T', meson.project_source_root() / 'src/user/linker.ld',
|
|
'-nostdlib',
|
|
],
|
|
link_depends: 'src/user/linker.ld',
|
|
)
|
|
|
|
custom_target(
|
|
'ls',
|
|
input: ls_elf,
|
|
output: 'ls',
|
|
command: ['objcopy', '-O', 'binary', '@INPUT@', '@OUTPUT@'],
|
|
build_by_default: true,
|
|
)
|
|
|
|
cat_start = custom_target(
|
|
'cat_start',
|
|
input: 'src/user/start.asm',
|
|
output: 'cat_start.o',
|
|
command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'],
|
|
)
|
|
|
|
cat_syscall = custom_target(
|
|
'cat_syscall',
|
|
input: 'src/user/syscall.asm',
|
|
output: 'cat_syscall.o',
|
|
command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'],
|
|
)
|
|
|
|
cat_elf = executable(
|
|
'cat.elf',
|
|
sources: [cat_start, cat_syscall, lib_sources, 'src/user/app/cat/cat.c'],
|
|
c_args: [
|
|
'-ffreestanding',
|
|
'-nostdlib',
|
|
'-fno-stack-protector',
|
|
'-mcmodel=large',
|
|
'-DVERSION="' + meson.project_version() + '"',
|
|
],
|
|
link_args: [
|
|
'-T', meson.project_source_root() / 'src/user/linker.ld',
|
|
'-nostdlib',
|
|
],
|
|
link_depends: 'src/user/linker.ld',
|
|
)
|
|
|
|
custom_target(
|
|
'cat',
|
|
input: cat_elf,
|
|
output: 'cat',
|
|
command: ['objcopy', '-O', 'binary', '@INPUT@', '@OUTPUT@'],
|
|
build_by_default: true,
|
|
)
|
|
|