From 0ae489f49dc8752398f79cadf8212996178f08e7 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Sun, 28 Feb 2021 01:16:27 -0800 Subject: [PATCH] [build] Update to using pb 3 Updating the build to the new version of bonnibel. This also includes some updates to make sure things keep working with LLVM 11. --- configs/custom.ninja | 65 +++++ configs/debug.toml | 136 ++++++++++ modules.yaml | 334 ------------------------ project.toml | 39 +++ scripts/parse_syms.py | 10 - scripts/psf_to_cpp.py | 27 -- src/arch/x86_64/kernel.ld | 11 +- src/boot/module.toml | 17 ++ src/{kernel => drivers/ahci}/fs/gpt.cpp | 0 src/{kernel => drivers/ahci}/fs/gpt.h | 0 src/drivers/fb/module.toml | 10 + src/drivers/nulldrv/module.toml | 8 + src/include/elf.h | 48 ---- src/kernel/module.toml | 56 ++++ src/libraries/cpu/module.toml | 4 + src/libraries/j6/module.toml | 4 + src/libraries/kutil/module.toml | 12 + src/libraries/libc/module.toml | 178 +++++++++++++ 18 files changed, 535 insertions(+), 424 deletions(-) create mode 100644 configs/custom.ninja create mode 100644 configs/debug.toml delete mode 100644 modules.yaml create mode 100644 project.toml delete mode 100755 scripts/parse_syms.py delete mode 100755 scripts/psf_to_cpp.py create mode 100644 src/boot/module.toml rename src/{kernel => drivers/ahci}/fs/gpt.cpp (100%) rename src/{kernel => drivers/ahci}/fs/gpt.h (100%) create mode 100644 src/drivers/fb/module.toml create mode 100644 src/drivers/nulldrv/module.toml delete mode 100644 src/include/elf.h create mode 100644 src/kernel/module.toml create mode 100644 src/libraries/cpu/module.toml create mode 100644 src/libraries/j6/module.toml create mode 100644 src/libraries/kutil/module.toml create mode 100644 src/libraries/libc/module.toml diff --git a/configs/custom.ninja b/configs/custom.ninja new file mode 100644 index 0000000..22b128d --- /dev/null +++ b/configs/custom.ninja @@ -0,0 +1,65 @@ + +rule makest + description = Making symbol table + command = nm $in | ${source_root}/scripts/build_symbol_table.py $out + +rule makefat + description = Creating $name + command = $ + cp ${source_root}/assets/diskbase.img $out; $ + mcopy -s -D o -i $out@@1M ${build_root}/fatroot/* ::/ + +rule strip + description = Stripping $name + command = $ + cp $in $out; $ + objcopy --only-keep-debug $out $out.debug; $ + strip -g $out; $ + objcopy --add-gnu-debuglink=$out.debug $out + + +build ${build_root}/ovmf_vars.fd : cp ${source_root}/assets/ovmf/x64/ovmf_vars.fd + name = ovmf_vars.fd + +build ${build_root}/ovmf_vars_d.fd : cp ${source_root}/assets/ovmf/x64/ovmf_vars_d.fd + name = ovmf_vars_d.fd + +build ${build_root}/jsix.elf | ${build_root}/jsix.elf.debug : strip ${build_root}/kernel/jsix.elf + name = kernel + +build ${build_root}/jsix.dump : dump ${build_root}/kernel/jsix.elf + name = kernel + +build ${build_root}/jsix.elf-gdb.py : cp ${source_root}/assets/debugging/jsix.elf-gdb.py + name = kernel debug python scripts + +build ${build_root}/fatroot/jsix.elf : cp ${build_root}/jsix.elf + name = kernel to FAT image + +build ${build_root}/fatroot/efi/boot/bootx64.efi : cp ${build_root}/boot/boot.efi + name = bootloader to FAT image + +build ${build_root}/fatroot/nulldrv.elf : cp ${build_root}/user/nulldrv.elf + name = null driver to FAT image + +build ${build_root}/fatroot/fb.elf : cp ${build_root}/user/fb.elf + name = fb driver to FAT image + +build ${build_root}/fatroot/symbol_table.dat : makest ${build_root}/jsix.elf + +build ${build_root}/jsix.img : makefat | $ + ${build_root}/fatroot/symbol_table.dat $ + ${build_root}/fatroot/nulldrv.elf $ + ${build_root}/fatroot/fb.elf $ + ${build_root}/fatroot/jsix.elf $ + ${build_root}/fatroot/efi/boot/bootx64.efi + name = jsix.img + +default $ + ${build_root}/ovmf_vars.fd $ + ${build_root}/ovmf_vars_d.fd $ + ${build_root}/jsix.dump $ + ${build_root}/jsix.elf-gdb.py $ + ${build_root}/jsix.img + +# vim: ft=ninja et ts=4 sts=4 sw=4 diff --git a/configs/debug.toml b/configs/debug.toml new file mode 100644 index 0000000..d07c05c --- /dev/null +++ b/configs/debug.toml @@ -0,0 +1,136 @@ +[targets.boot] +cc = "clang" +cxx = "clang++" +ld = "clang++" +ar = "ar" +nasm = "nasm" +objcopy = "objcopy" + +ccflags = [ + "${ccflags}", + "-I${source_root}/external", + "--target=x86_64-unknown-windows", + "-ffreestanding", + "-mno-red-zone", + "-fshort-wchar", + "-fno-omit-frame-pointer", + "-ggdb", + "-g3", + '-DKERNEL_FILENAME=L"jsix.elf"', +] + +cxxflags = [ + "${cxxflags}", + "-fno-exceptions", + "-fno-rtti", +] + +ldflags = [ + "${ldflags}", + "--target=x86_64-unknown-windows", + "-nostdlib", + "-Wl,-entry:efi_main", + "-Wl,-subsystem:efi_application", + "-fuse-ld=lld-link", + "-g" +] + + +[targets.kernel] +cc = "clang" +cxx = "clang++" +ld = "ld.lld" +ar = "ar" +nasm = "nasm" +objcopy = "objcopy" + +asflags = [ + "${asflags}", + "-I${source_root}/src/kernel/", +] + +ccflags = [ + "${ccflags}", + "--target=x86_64-unknown-elf", + "-I${source_root}/external", + "-nostdlib", + "-ffreestanding", + "-nodefaultlibs", + "-fno-builtin", + "-mno-sse", + "-fno-omit-frame-pointer", + "-mno-red-zone", + "-g", + "-mcmodel=large", + "-D__ELF__", + "-D__JSIX__", + "-isystem${source_root}/sysroot/include", + "-isystem${source_root}/src/libraries/libc/include", + "--sysroot='${source_root}/sysroot'" +] + +cxxflags = [ + "${cxxflags}", + "-fno-exceptions", + "-fno-rtti", + "-isystem${source_root}/sysroot/include/c++/v1" +] + +ldflags = [ + "${ldflags}", + "-T", "${source_root}/src/arch/x86_64/kernel.ld", + "-g", + "-nostdlib", + "-Bstatic", + "-z", "norelro", + "-z", "separate-code", +] + + +[targets.user] +cc = "clang" +cxx = "clang++" +ld = "ld.lld" +ar = "ar" +nasm = "nasm" +objcopy = "objcopy" + +asflags = [ + "${asflags}", + "-I${source_root}/src/kernel/", +] + +ccflags = [ + "${ccflags}", + "-nostdlib", + "-ffreestanding", + "-nodefaultlibs", + "-fno-builtin", + "-mno-sse", + "-fno-omit-frame-pointer", + "-mno-red-zone", + "-g", + "-mcmodel=large", + "-D__ELF__", + "-D__JSIX__", + "-isystem${source_root}/sysroot/include", + "-isystem${source_root}/src/libraries/libc/include", + "--sysroot='${source_root}/sysroot'" +] + +cxxflags = [ + "${cxxflags}", + "-fno-exceptions", + "-fno-rtti", + "-isystem${source_root}/sysroot/include/c++/v1" +] + +ldflags = [ + "${ldflags}", + "-g", + "-nostdlib", + "-Bstatic", + "--sysroot='${source_root}/sysroot'", + "-L", "${source_root}/sysroot/lib", + "-z", "separate-code", +] diff --git a/modules.yaml b/modules.yaml deleted file mode 100644 index c7430f0..0000000 --- a/modules.yaml +++ /dev/null @@ -1,334 +0,0 @@ -name: jsix -templates: scripts/templates -modules: - kernel: - kind: exe - output: jsix.elf - target: host - deps: - - cpu - - kutil - includes: - - src/kernel - source: - - src/kernel/apic.cpp - - src/kernel/ap_startup.s - - src/kernel/assert.cpp - - src/kernel/boot.s - - src/kernel/clock.cpp - - src/kernel/console.cpp - - src/kernel/cpprt.cpp - - src/kernel/cpu.cpp - - src/kernel/debug.cpp - - src/kernel/debug.s - - src/kernel/device_manager.cpp - - src/kernel/frame_allocator.cpp - - src/kernel/fs/gpt.cpp - - src/kernel/gdt.cpp - - src/kernel/gdtidt.s - - src/kernel/hpet.cpp - - src/kernel/idt.cpp - - src/kernel/interrupts.cpp - - src/kernel/interrupts.s - - src/kernel/io.cpp - - src/kernel/log.cpp - - src/kernel/main.cpp - - src/kernel/memory_bootstrap.cpp - - src/kernel/msr.cpp - - src/kernel/objects/channel.cpp - - src/kernel/objects/endpoint.cpp - - src/kernel/objects/kobject.cpp - - src/kernel/objects/thread.cpp - - src/kernel/objects/process.cpp - - src/kernel/objects/system.cpp - - src/kernel/objects/vm_area.cpp - - src/kernel/page_table.cpp - - src/kernel/page_tree.cpp - - src/kernel/pci.cpp - - src/kernel/scheduler.cpp - - src/kernel/serial.cpp - - src/kernel/symbol_table.cpp - - src/kernel/syscall.cpp - - src/kernel/syscall.s - - src/kernel/syscalls/channel.cpp - - src/kernel/syscalls/endpoint.cpp - - src/kernel/syscalls/object.cpp - - src/kernel/syscalls/process.cpp - - src/kernel/syscalls/system.cpp - - src/kernel/syscalls/thread.cpp - - src/kernel/syscalls/vm_area.cpp - - src/kernel/task.s - - src/kernel/tss.cpp - - src/kernel/vm_space.cpp - - boot: - kind: exe - target: boot - output: boot.efi - deps: - - cpu - source: - - src/boot/main.cpp - - src/boot/console.cpp - - src/boot/error.cpp - - src/boot/fs.cpp - - src/boot/hardware.cpp - - src/boot/loader.cpp - - src/boot/memory.cpp - - src/boot/paging.cpp - - src/boot/status.cpp - - src/boot/support.cpp - - nulldrv: - kind: exe - target: user - output: nulldrv.elf - deps: - - libc - source: - - src/drivers/nulldrv/io.cpp - - src/drivers/nulldrv/main.cpp - - src/drivers/nulldrv/serial.cpp - - fb: - kind: exe - target: user - output: fb.elf - deps: - - libc - source: - - src/drivers/fb/font.cpp - - src/drivers/fb/main.cpp - - src/drivers/fb/screen.cpp - - src/drivers/fb/scrollback.cpp - - kutil: - kind: lib - output: libkutil.a - includes: - - src/libraries/kutil/include - source: - - src/libraries/kutil/assert.cpp - - src/libraries/kutil/bip_buffer.cpp - - src/libraries/kutil/heap_allocator.cpp - - src/libraries/kutil/logger.cpp - - src/libraries/kutil/memory.cpp - - src/libraries/kutil/printf.c - - src/libraries/kutil/spinlock.cpp - - cpu: - kind: lib - output: libcpu.a - includes: - - src/libraries/cpu/include - source: - - src/libraries/cpu/cpu_id.cpp - - j6: - kind: lib - output: libj6.a - includes: - - src/libraries/j6/include - target: user - source: - - src/libraries/j6/syscalls.s - - libc: - kind: lib - output: libc.a - includes: - - src/libraries/libc/include - deps: - - j6 - target: user - defines: - - DISABLE_SSE - - LACKS_UNISTD_H - - LACKS_FCNTL_H - - LACKS_SYS_PARAM_H - - LACKS_SYS_MMAN_H - - LACKS_SCHED_H - - LACKS_STRINGS_H - - HAVE_MMAP=0 - #- LACKS_STRING_H - #- LACKS_ERRNO_H - #- LACKS_STDLIB_H - #- LACKS_TIME_H - source: - - src/libraries/libc/arch/x86_64/_Exit.s - - src/libraries/libc/arch/x86_64/crt0.s - - src/libraries/libc/arch/x86_64/init_libc.c - - src/libraries/libc/ctype/isalnum.c - - src/libraries/libc/ctype/isalpha.c - - src/libraries/libc/ctype/isblank.c - - src/libraries/libc/ctype/iscntrl.c - - src/libraries/libc/ctype/isdigit.c - - src/libraries/libc/ctype/isgraph.c - - src/libraries/libc/ctype/islower.c - - src/libraries/libc/ctype/isprint.c - - src/libraries/libc/ctype/ispunct.c - - src/libraries/libc/ctype/isspace.c - - src/libraries/libc/ctype/isupper.c - - src/libraries/libc/ctype/isxdigit.c - - src/libraries/libc/ctype/tolower.c - - src/libraries/libc/ctype/toupper.c - - src/libraries/libc/inttypes/imaxabs.c - - src/libraries/libc/inttypes/imaxdiv.c - - src/libraries/libc/inttypes/strtoimax.c - - src/libraries/libc/inttypes/strtoumax.c - - src/libraries/libc/locale/localeconv.c - - src/libraries/libc/locale/setlocale.c - - src/libraries/libc/j6libc/assert.c - - src/libraries/libc/j6libc/errno.c - - src/libraries/libc/j6libc/allocpages.c - - src/libraries/libc/j6libc/atomax.c - - src/libraries/libc/j6libc/closeall.c - - src/libraries/libc/j6libc/close.c - - src/libraries/libc/j6libc/digits.c - - src/libraries/libc/j6libc/filemode.c - - src/libraries/libc/j6libc/fillbuffer.c - - src/libraries/libc/j6libc/flushbuffer.c - - src/libraries/libc/j6libc/is_leap.c - - src/libraries/libc/j6libc/load_lc_collate.c - - src/libraries/libc/j6libc/load_lc_ctype.c - - src/libraries/libc/j6libc/load_lc_messages.c - - src/libraries/libc/j6libc/load_lc_monetary.c - - src/libraries/libc/j6libc/load_lc_numeric.c - - src/libraries/libc/j6libc/load_lc_time.c - - src/libraries/libc/j6libc/load_lines.c - - src/libraries/libc/j6libc/open.c - - src/libraries/libc/j6libc/prepread.c - - src/libraries/libc/j6libc/prepwrite.c - - src/libraries/libc/j6libc/print.c - - src/libraries/libc/j6libc/rename.c - - src/libraries/libc/j6libc/scan.c - - src/libraries/libc/j6libc/seed.c - - src/libraries/libc/j6libc/seek.c - - src/libraries/libc/j6libc/stdinit.c - - src/libraries/libc/j6libc/strtox_main.c - - src/libraries/libc/j6libc/strtox_prelim.c - - src/libraries/libc/j6libc/sbrk.c - - src/libraries/libc/signal/raise.c - - src/libraries/libc/signal/signal.c - - src/libraries/libc/stdio/clearerr.c - - src/libraries/libc/stdio/fclose.c - - src/libraries/libc/stdio/feof.c - - src/libraries/libc/stdio/ferror.c - - src/libraries/libc/stdio/fflush.c - - src/libraries/libc/stdio/fgetc.c - - src/libraries/libc/stdio/fgetpos.c - - src/libraries/libc/stdio/fgets.c - - src/libraries/libc/stdio/fopen.c - - src/libraries/libc/stdio/fprintf.c - - src/libraries/libc/stdio/fputc.c - - src/libraries/libc/stdio/fputs.c - - src/libraries/libc/stdio/fread.c - - src/libraries/libc/stdio/freopen.c - - src/libraries/libc/stdio/fscanf.c - - src/libraries/libc/stdio/fseek.c - - src/libraries/libc/stdio/fsetpos.c - - src/libraries/libc/stdio/ftell.c - - src/libraries/libc/stdio/fwrite.c - - src/libraries/libc/stdio/getc.c - - src/libraries/libc/stdio/getchar.c - - src/libraries/libc/stdio/perror.c - - src/libraries/libc/stdio/printf.c - - src/libraries/libc/stdio/putc.c - - src/libraries/libc/stdio/putchar.c - - src/libraries/libc/stdio/puts.c - - src/libraries/libc/stdio/remove.c - - src/libraries/libc/stdio/rename.c - - src/libraries/libc/stdio/rewind.c - - src/libraries/libc/stdio/scanf.c - - src/libraries/libc/stdio/setbuf.c - - src/libraries/libc/stdio/setvbuf.c - - src/libraries/libc/stdio/snprintf.c - - src/libraries/libc/stdio/sprintf.c - - src/libraries/libc/stdio/sscanf.c - - src/libraries/libc/stdio/tmpfile.c - - src/libraries/libc/stdio/tmpnam.c - - src/libraries/libc/stdio/ungetc.c - - src/libraries/libc/stdio/vfprintf.c - - src/libraries/libc/stdio/vfscanf.c - - src/libraries/libc/stdio/vprintf.c - - src/libraries/libc/stdio/vscanf.c - - src/libraries/libc/stdio/vsnprintf.c - - src/libraries/libc/stdio/vsprintf.c - - src/libraries/libc/stdio/vsscanf.c - - src/libraries/libc/stdlib/abort.c - - src/libraries/libc/stdlib/abs.c - - src/libraries/libc/stdlib/atexit.c - - src/libraries/libc/stdlib/atoi.c - - src/libraries/libc/stdlib/atol.c - - src/libraries/libc/stdlib/atoll.c - - src/libraries/libc/stdlib/bsearch.c - - src/libraries/libc/stdlib/div.c - - src/libraries/libc/stdlib/exit.c - - src/libraries/libc/stdlib/_Exit.c - - src/libraries/libc/stdlib/getenv.c - - src/libraries/libc/stdlib/labs.c - - src/libraries/libc/stdlib/ldiv.c - - src/libraries/libc/stdlib/llabs.c - - src/libraries/libc/stdlib/lldiv.c - - src/libraries/libc/stdlib/malloc.c - - src/libraries/libc/stdlib/qsort.c - - src/libraries/libc/stdlib/rand.c - - src/libraries/libc/stdlib/srand.c - - src/libraries/libc/stdlib/strtol.c - - src/libraries/libc/stdlib/strtoll.c - - src/libraries/libc/stdlib/strtoul.c - - src/libraries/libc/stdlib/strtoull.c - - src/libraries/libc/stdlib/system.c - - src/libraries/libc/string/memchr.c - - src/libraries/libc/string/memcmp.c - - src/libraries/libc/string/memcpy.c - - src/libraries/libc/string/memmove.c - - src/libraries/libc/string/memset.c - - src/libraries/libc/string/strcat.c - - src/libraries/libc/string/strchr.c - - src/libraries/libc/string/strcmp.c - - src/libraries/libc/string/strcoll.c - - src/libraries/libc/string/strcpy.c - - src/libraries/libc/string/strcspn.c - - src/libraries/libc/string/strerror.c - - src/libraries/libc/string/strlen.c - - src/libraries/libc/string/strncat.c - - src/libraries/libc/string/strncmp.c - - src/libraries/libc/string/strncpy.c - - src/libraries/libc/string/strpbrk.c - - src/libraries/libc/string/strrchr.c - - src/libraries/libc/string/strspn.c - - src/libraries/libc/string/strstr.c - - src/libraries/libc/string/strtok.c - - src/libraries/libc/string/strxfrm.c - - src/libraries/libc/time/asctime.c - - src/libraries/libc/time/clock.c - - src/libraries/libc/time/ctime.c - - src/libraries/libc/time/difftime.c - - src/libraries/libc/time/gmtime.c - - src/libraries/libc/time/localtime.c - - src/libraries/libc/time/mktime.c - - src/libraries/libc/time/strftime.c - - src/libraries/libc/time/time.c - - src/libraries/libc/time/timespec_get.c - - tests: - kind: exe - target: native - output: tests - deps: - - kutil - source: - - src/tests/constexpr_hash.cpp - - src/tests/linked_list.cpp - - src/tests/logger.cpp - - src/tests/heap_allocator.cpp - - src/tests/main.cpp - - src/tests/map.cpp - - src/tests/vector.cpp - -overlays: - - url: https://f000.backblazeb2.com/file/jsix-os/sysroot-llvm8-20190706.tar.bz2 - path: sysroot - - url: https://f000.backblazeb2.com/file/jsix-os/sysroot-j6libc-8cb8ce7.tar.bz2 - path: sysroot diff --git a/project.toml b/project.toml new file mode 100644 index 0000000..ceee12a --- /dev/null +++ b/project.toml @@ -0,0 +1,39 @@ +# Bonnibel project configuration +name = "jsix" +custom-rules = "configs/custom.ninja" +default-config = "configs/debug.toml" + +[variables] +warnflags = [ + "-Wformat=2", "-Winit-self", "-Wfloat-equal", "-Winline", "-Wmissing-format-attribute", + "-Wmissing-include-dirs", "-Wswitch", "-Wundef", "-Wdisabled-optimization", + "-Wpointer-arith", "-Wno-attributes", "-Wno-sign-compare", "-Wno-multichar", + "-Wno-div-by-zero", "-Wno-endif-labels", "-Wno-pragmas", "-Wno-format-extra-args", + "-Wno-unused-result", "-Wno-deprecated-declarations", "-Wno-unused-function", + "-Wno-address-of-packed-member", "-Wno-invalid-offsetof", "-Werror", +] + +ccflags = [ + "-I${source_root}/src/include", + "-I${source_root}/src/include/x86_64", + "-fcolor-diagnostics", + "-DVERSION_MAJOR=${version_major}", + "-DVERSION_MINOR=${version_minor}", + "-DVERSION_PATCH=${version_patch}", + "-DVERSION_GITSHA=0x${version_sha}", + '-DGIT_VERSION=\"${version_major}.${version_minor}.${version_patch}+${version_sha}\"', + '-DGIT_VERSION_WIDE=L\"${version_major}.${version_minor}.${version_patch}+${version_sha}\"', + "${warnflags}", +] + +asflags = [ + "-DVERSION_MAJOR=${version_major}", + "-DVERSION_MINOR=${version_minor}", + "-DVERSION_PATCH=${version_patch}", + "-DVERSION_GITSHA=0x${version_sha}", + "-I${source_root}/src/include", +] + +cflags = "-std=c11" +cxxflags = "-std=c++17" + diff --git a/scripts/parse_syms.py b/scripts/parse_syms.py deleted file mode 100755 index 7f19f55..0000000 --- a/scripts/parse_syms.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python3 - -def parse_elf(filename): - import struct - with open(filename, 'rb') as elf: - -if __name__ == "__main__": - import sys - for arg in sys.argv[1:]: - parse_elf(arg) diff --git a/scripts/psf_to_cpp.py b/scripts/psf_to_cpp.py deleted file mode 100755 index 6e49a48..0000000 --- a/scripts/psf_to_cpp.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env python3 - -from fontpsf import PSF2 - -def print_header(filename): - font = PSF2.load(filename) - - print("#pragma once") - print(f"// This file was autogenerated by psf_to_cpp.py from {font.filename}\n") - - print(f"const uint8_t font_glyph_size = {font.charsize};") - print(f"const uint8_t font_glyph_width = {font.dimension[0]};") - print(f"const uint8_t font_glyph_height = {font.dimension[1]};") - print(f"const uint16_t font_glyph_count = {font.count};\n") - - print('const uint8_t font_glyph_data[] = {') - - for glyph in font: - print(" ", "".join([f"0x{b:02x}," for b in glyph.data]), end="") - print(" // {}".format(glyph.description())) - - print("};") - -if __name__ == "__main__": - import sys - for filename in sys.argv[1:]: - print_header(filename) diff --git a/src/arch/x86_64/kernel.ld b/src/arch/x86_64/kernel.ld index 5e7be16..025ac17 100755 --- a/src/arch/x86_64/kernel.ld +++ b/src/arch/x86_64/kernel.ld @@ -10,24 +10,25 @@ SECTIONS } .text ALIGN(4096) : { - *(.text) - *(.isrs) + *(.text*) + KEEP(*(.isrs)) } .data ALIGN(4096) : { - *(.data) - *(.rodata) + *(.data*) + *(.rodata*) } .ctors : ALIGN(8) { __ctors = .; KEEP(*(.ctors)) + KEEP(*(.init_array)) __ctors_end = .; } .bss ALIGN(4096) : { __bss_start = .; - *(.bss) + *(.bss*) __bss_end = .; } diff --git a/src/boot/module.toml b/src/boot/module.toml new file mode 100644 index 0000000..fa34412 --- /dev/null +++ b/src/boot/module.toml @@ -0,0 +1,17 @@ +name = "boot" +kind = "exe" +output = "boot.efi" +targets = ["boot"] +deps = ["cpu"] +sources = [ + "main.cpp", + "console.cpp", + "error.cpp", + "fs.cpp", + "hardware.cpp", + "loader.cpp", + "memory.cpp", + "paging.cpp", + "status.cpp", + "support.cpp", +] diff --git a/src/kernel/fs/gpt.cpp b/src/drivers/ahci/fs/gpt.cpp similarity index 100% rename from src/kernel/fs/gpt.cpp rename to src/drivers/ahci/fs/gpt.cpp diff --git a/src/kernel/fs/gpt.h b/src/drivers/ahci/fs/gpt.h similarity index 100% rename from src/kernel/fs/gpt.h rename to src/drivers/ahci/fs/gpt.h diff --git a/src/drivers/fb/module.toml b/src/drivers/fb/module.toml new file mode 100644 index 0000000..5bf2aef --- /dev/null +++ b/src/drivers/fb/module.toml @@ -0,0 +1,10 @@ +name = "fb" +targets = ["user"] +deps = ["libc"] +sources = [ + "font.cpp", + "main.cpp", + "screen.cpp", + "scrollback.cpp", +] + diff --git a/src/drivers/nulldrv/module.toml b/src/drivers/nulldrv/module.toml new file mode 100644 index 0000000..8bd4bba --- /dev/null +++ b/src/drivers/nulldrv/module.toml @@ -0,0 +1,8 @@ +name = "nulldrv" +targets = ["user"] +deps = ["libc"] +sources = [ + "io.cpp", + "main.cpp", + "serial.cpp", +] diff --git a/src/include/elf.h b/src/include/elf.h deleted file mode 100644 index 7041132..0000000 --- a/src/include/elf.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - -/* elf.h - basic defines for external code written assuming works. Only - * Elf64 values are included. - */ - -typedef uint16_t Elf64_Half; -typedef uint32_t Elf64_Word; -typedef int32_t Elf64_Sword; -typedef uint64_t Elf64_Xword; -typedef int64_t Elf64_Sxword; -typedef uint64_t Elf64_Addr; -typedef uint64_t Elf64_Off; -typedef uint16_t Elf64_Section; -typedef Elf64_Half Elf64_Versym; - -typedef struct { - Elf64_Addr r_offset; - Elf64_Xword r_info; -} Elf64_Rel; - -typedef struct { - Elf64_Addr r_offset; - Elf64_Word r_info; - Elf64_Sword r_addend; -} Elf64_Rela; - -typedef struct { - Elf64_Sxword d_tag; - union { - Elf64_Xword d_val; - Elf64_Addr d_ptr; - } d_un; -} Elf64_Dyn; - -#define ELF64_R_TYPE(x) ((x) & 0xffffffff) - -typedef enum { - DT_NULL = 0, - DT_RELA = 7, - DT_RELASZ = 8, - DT_RELAENT = 9 -} ElfDynTag; - -typedef enum { - R_X86_64_NONE = 0, - R_X86_64_RELATIVE = 8 -} Elf_x86_64_RelType; diff --git a/src/kernel/module.toml b/src/kernel/module.toml new file mode 100644 index 0000000..a944b51 --- /dev/null +++ b/src/kernel/module.toml @@ -0,0 +1,56 @@ +name = "kernel" +kind = "exe" +output = "jsix.elf" +targets = ["kernel"] +deps = ["kutil", "cpu"] +includes = ["src/kernel"] +sources = [ + "apic.cpp", + "ap_startup.s", + "assert.cpp", + "boot.s", + "clock.cpp", + "console.cpp", + "cpprt.cpp", + "cpu.cpp", + "debug.cpp", + "debug.s", + "device_manager.cpp", + "frame_allocator.cpp", + "gdt.cpp", + "gdtidt.s", + "hpet.cpp", + "idt.cpp", + "interrupts.cpp", + "interrupts.s", + "io.cpp", + "log.cpp", + "main.cpp", + "memory_bootstrap.cpp", + "msr.cpp", + "objects/channel.cpp", + "objects/endpoint.cpp", + "objects/kobject.cpp", + "objects/thread.cpp", + "objects/process.cpp", + "objects/system.cpp", + "objects/vm_area.cpp", + "page_table.cpp", + "page_tree.cpp", + "pci.cpp", + "scheduler.cpp", + "serial.cpp", + "symbol_table.cpp", + "syscall.cpp", + "syscall.s", + "syscalls/channel.cpp", + "syscalls/endpoint.cpp", + "syscalls/object.cpp", + "syscalls/process.cpp", + "syscalls/system.cpp", + "syscalls/thread.cpp", + "syscalls/vm_area.cpp", + "task.s", + "tss.cpp", + "vm_space.cpp", +] diff --git a/src/libraries/cpu/module.toml b/src/libraries/cpu/module.toml new file mode 100644 index 0000000..2de0174 --- /dev/null +++ b/src/libraries/cpu/module.toml @@ -0,0 +1,4 @@ +name = "cpu" +kind = "lib" +includes = ["src/libraries/cpu/include"] +sources = ["cpu_id.cpp"] diff --git a/src/libraries/j6/module.toml b/src/libraries/j6/module.toml new file mode 100644 index 0000000..5435d35 --- /dev/null +++ b/src/libraries/j6/module.toml @@ -0,0 +1,4 @@ +name = "j6" +kind = "lib" +includes = ["src/libraries/j6/include"] +sources = ["syscalls.s"] diff --git a/src/libraries/kutil/module.toml b/src/libraries/kutil/module.toml new file mode 100644 index 0000000..6fd9ed2 --- /dev/null +++ b/src/libraries/kutil/module.toml @@ -0,0 +1,12 @@ +name = "kutil" +kind = "lib" +includes = [ "src/libraries/kutil/include" ] +sources = [ + "assert.cpp", + "bip_buffer.cpp", + "heap_allocator.cpp", + "logger.cpp", + "memory.cpp", + "printf.c", + "spinlock.cpp", +] diff --git a/src/libraries/libc/module.toml b/src/libraries/libc/module.toml new file mode 100644 index 0000000..a0c8d70 --- /dev/null +++ b/src/libraries/libc/module.toml @@ -0,0 +1,178 @@ +name = "libc" +kind = "lib" +output = "libc.a" +includes = "src/libraries/libc/include" +deps = ["j6"] + +sources = [ + "arch/x86_64/_Exit.s", + "arch/x86_64/crt0.s", + "arch/x86_64/init_libc.c", + "ctype/isalnum.c", + "ctype/isalpha.c", + "ctype/isblank.c", + "ctype/iscntrl.c", + "ctype/isdigit.c", + "ctype/isgraph.c", + "ctype/islower.c", + "ctype/isprint.c", + "ctype/ispunct.c", + "ctype/isspace.c", + "ctype/isupper.c", + "ctype/isxdigit.c", + "ctype/tolower.c", + "ctype/toupper.c", + "inttypes/imaxabs.c", + "inttypes/imaxdiv.c", + "inttypes/strtoimax.c", + "inttypes/strtoumax.c", + "locale/localeconv.c", + "locale/setlocale.c", + "j6libc/assert.c", + "j6libc/errno.c", + "j6libc/allocpages.c", + "j6libc/atomax.c", + "j6libc/closeall.c", + "j6libc/close.c", + "j6libc/digits.c", + "j6libc/filemode.c", + "j6libc/fillbuffer.c", + "j6libc/flushbuffer.c", + "j6libc/is_leap.c", + "j6libc/load_lc_collate.c", + "j6libc/load_lc_ctype.c", + "j6libc/load_lc_messages.c", + "j6libc/load_lc_monetary.c", + "j6libc/load_lc_numeric.c", + "j6libc/load_lc_time.c", + "j6libc/load_lines.c", + "j6libc/open.c", + "j6libc/prepread.c", + "j6libc/prepwrite.c", + "j6libc/print.c", + "j6libc/rename.c", + "j6libc/scan.c", + "j6libc/seed.c", + "j6libc/seek.c", + "j6libc/stdinit.c", + "j6libc/strtox_main.c", + "j6libc/strtox_prelim.c", + "j6libc/sbrk.c", + "signal/raise.c", + "signal/signal.c", + "stdio/clearerr.c", + "stdio/fclose.c", + "stdio/feof.c", + "stdio/ferror.c", + "stdio/fflush.c", + "stdio/fgetc.c", + "stdio/fgetpos.c", + "stdio/fgets.c", + "stdio/fopen.c", + "stdio/fprintf.c", + "stdio/fputc.c", + "stdio/fputs.c", + "stdio/fread.c", + "stdio/freopen.c", + "stdio/fscanf.c", + "stdio/fseek.c", + "stdio/fsetpos.c", + "stdio/ftell.c", + "stdio/fwrite.c", + "stdio/getc.c", + "stdio/getchar.c", + "stdio/perror.c", + "stdio/printf.c", + "stdio/putc.c", + "stdio/putchar.c", + "stdio/puts.c", + "stdio/remove.c", + "stdio/rename.c", + "stdio/rewind.c", + "stdio/scanf.c", + "stdio/setbuf.c", + "stdio/setvbuf.c", + "stdio/snprintf.c", + "stdio/sprintf.c", + "stdio/sscanf.c", + "stdio/tmpfile.c", + "stdio/tmpnam.c", + "stdio/ungetc.c", + "stdio/vfprintf.c", + "stdio/vfscanf.c", + "stdio/vprintf.c", + "stdio/vscanf.c", + "stdio/vsnprintf.c", + "stdio/vsprintf.c", + "stdio/vsscanf.c", + "stdlib/abort.c", + "stdlib/abs.c", + "stdlib/atexit.c", + "stdlib/atoi.c", + "stdlib/atol.c", + "stdlib/atoll.c", + "stdlib/bsearch.c", + "stdlib/div.c", + "stdlib/exit.c", + "stdlib/_Exit.c", + "stdlib/getenv.c", + "stdlib/labs.c", + "stdlib/ldiv.c", + "stdlib/llabs.c", + "stdlib/lldiv.c", + "stdlib/malloc.c", + "stdlib/qsort.c", + "stdlib/rand.c", + "stdlib/srand.c", + "stdlib/strtol.c", + "stdlib/strtoll.c", + "stdlib/strtoul.c", + "stdlib/strtoull.c", + "stdlib/system.c", + "string/memchr.c", + "string/memcmp.c", + "string/memcpy.c", + "string/memmove.c", + "string/memset.c", + "string/strcat.c", + "string/strchr.c", + "string/strcmp.c", + "string/strcoll.c", + "string/strcpy.c", + "string/strcspn.c", + "string/strerror.c", + "string/strlen.c", + "string/strncat.c", + "string/strncmp.c", + "string/strncpy.c", + "string/strpbrk.c", + "string/strrchr.c", + "string/strspn.c", + "string/strstr.c", + "string/strtok.c", + "string/strxfrm.c", + "time/asctime.c", + "time/clock.c", + "time/ctime.c", + "time/difftime.c", + "time/gmtime.c", + "time/localtime.c", + "time/mktime.c", + "time/strftime.c", + "time/time.c", + "time/timespec_get.c", +] + + +[variables] +ccflags = [ + "${ccflags}", + "-DDISABLE_SSE", + "-DLACKS_UNISTD_H", + "-DLACKS_FCNTL_H", + "-DLACKS_SYS_PARAM_H", + "-DLACKS_SYS_MMAN_H", + "-DLACKS_SCHED_H", + "-DLACKS_STRINGS_H", + "-DHAVE_MMAP=0", +]