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, ) 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', output: 'kernel_entry.o', command: [nasm, '-f', 'elf64', '@INPUT@', '-o', '@OUTPUT@'], ) syscall_o = custom_target('syscall', input: 'src/syscall.asm', output: 'syscall.o', command: [nasm, '-f', 'elf64', '@INPUT@', '-o', '@OUTPUT@'], ) 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', ) kernel_elf = executable( 'kernel.elf', sources: [kernel_entry_o, syscall_o, kernel_sources], c_args: [ '-ffreestanding', '-nostdlib', '-nostartfiles', '-mno-red-zone', '-mgeneral-regs-only', '-mcmodel=kernel', '-Wno-unused-command-line-argument', '-Wconversion', '-DVERSION="' + meson.project_version() + '"', ], link_args: [ '-T', meson.project_source_root() / 'src/linker.ld', '-nostdlib', ], link_depends: 'src/linker.ld', ) custom_target( 'kernel_bin', input: kernel_elf, output: 'kernel.bin', command: ['objcopy', '-O', 'binary', '@INPUT@', '@OUTPUT@'], build_by_default: true, )