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, ) cp_start = custom_target( 'cp_start', input: 'src/user/start.asm', output: 'cp_start.o', command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'], ) cp_syscall = custom_target( 'cp_syscall', input: 'src/user/syscall.asm', output: 'cp_syscall.o', command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'], ) cp_elf = executable( 'cp.elf', sources: [cp_start, cp_syscall, lib_sources, 'src/user/app/cp/cp.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( 'cp', input: cp_elf, output: 'cp', command: ['objcopy', '-O', 'binary', '@INPUT@', '@OUTPUT@'], build_by_default: true, ) mkdir_start = custom_target( 'mkdir_start', input: 'src/user/start.asm', output: 'mkdir_start.o', command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'], ) mkdir_syscall = custom_target( 'mkdir_syscall', input: 'src/user/syscall.asm', output: 'mkdir_syscall.o', command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'], ) mkdir_elf = executable( 'mkdir.elf', sources: [mkdir_start, mkdir_syscall, lib_sources, 'src/user/app/mkdir/mkdir.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( 'mkdir', input: mkdir_elf, output: 'mkdir', command: ['objcopy', '-O', 'binary', '@INPUT@', '@OUTPUT@'], build_by_default: true, ) rm_start = custom_target( 'rm_start', input: 'src/user/start.asm', output: 'rm_start.o', command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'], ) rm_syscall = custom_target( 'rm_syscall', input: 'src/user/syscall.asm', output: 'rm_syscall.o', command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'], ) rm_elf = executable( 'rm.elf', sources: [rm_start, rm_syscall, lib_sources, 'src/user/app/rm/rm.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( 'rm', input: rm_elf, output: 'rm', command: ['objcopy', '-O', 'binary', '@INPUT@', '@OUTPUT@'], build_by_default: true, ) wc_start = custom_target( 'wc_start', input: 'src/user/start.asm', output: 'wc_start.o', command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'], ) wc_syscall = custom_target( 'wc_syscall', input: 'src/user/syscall.asm', output: 'wc_syscall.o', command: [nasm, '-f', 'elf64', '-o', '@OUTPUT@', '@INPUT@'], ) wc_elf = executable( 'wc.elf', sources: [wc_start, wc_syscall, lib_sources, 'src/user/app/wc/wc.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( 'wc', input: wc_elf, output: 'wc', command: ['objcopy', '-O', 'binary', '@INPUT@', '@OUTPUT@'], build_by_default: true, )