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@'], ) 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/process.c', 'src/kernel/syscall.c', 'src/kernel/tss.c', 'src/kernel/vga.c', ]) kernel_elf = executable( 'kernel.elf', sources: [kernel_entry_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, ) 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, )