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_entry.asm', output: 'kernel_entry.o', command: [nasm, '-f', 'elf64', '@INPUT@', '-o', '@OUTPUT@'], ) cc = meson.get_compiler('c') kernel_sources = files( 'src/ata.c', 'src/fat16.c', 'src/fs.c', 'src/idt.c', 'src/kernel.c', 'src/keyboard.c', 'src/memory.c', 'src/panic.c', 'src/pic.c', 'src/string.c', 'src/terminal.c', 'src/vga.c', ) kernel_elf = executable( 'kernel.elf', sources: [kernel_entry_o, kernel_sources], c_args: [ '-ffreestanding', '-nostdlib', '-nostartfiles', '-mno-red-zone', '-mgeneral-regs-only', '-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, )