I added some work on a keyboard driver here also changed the emulation system, since bochs was giving me headaches when it came to keyboard input added some todo stuff.. probably some cleanup, idk
75 lines
2.4 KiB
Makefile
75 lines
2.4 KiB
Makefile
#TODO: add a rule to setup the cross compiler
|
|
# or maybe add it to a bash script instead? im not sure
|
|
|
|
CC = i686-elf-gcc
|
|
CFLAGS = -m32 -ffreestanding -Wall -Wextra -Werror -Wpedantic --sysroot=$(PWD)/sysroot -isystem=/usr/include -Iinclude -MD -D__TESTING__
|
|
|
|
AS = nasm
|
|
ASFLAGS = -f elf
|
|
|
|
LD = i686-elf-ld
|
|
LDFLAGS = -T $(shell find . -name "link.ld") -melf_i386 --sysroot=$(PWD)/sysroot -nostdlib -lk -lgcc
|
|
|
|
AR = i686-elf-ar
|
|
|
|
c_kern_objects := $(patsubst %.c,%.o,$(shell find kernel/ -name "*.c"))
|
|
asm_kern_objects := $(patsubst %.s,%.o,$(shell find kernel/ -name "*.s"))
|
|
|
|
|
|
|
|
free_objs = $(patsubst %.c,%.o, $(shell find libc/ -path "libc/arch" -prune -o -type f | grep "\.c"))
|
|
|
|
hosted_objs = $(patsubst, %.c,%.o,$(shell find libc/arch/ -name "*.c"))
|
|
|
|
libc_objs = $(free_objs) $(hosted_objs)
|
|
libk_objs = $(free_objs)
|
|
|
|
# binaries = libk.a libc.a # Not ready for libc yet
|
|
binaries = libk.a
|
|
|
|
.PHONY: clean all run install-headers install-libs env
|
|
|
|
all: kernel.elf
|
|
|
|
env: install-headers install-libs # TODO: change this to a file specific target, so it doesnt recompile everytime, and so we can move as a prereq on kernel.elf
|
|
util/./gen-clangd.sh
|
|
|
|
kernel.elf: install-headers install-libs $(c_kern_objects) $(asm_kern_objects)
|
|
$(CC) $(CFLAGS) -T $(shell find . -name "link.ld") -o $@ $(c_kern_objects) $(asm_kern_objects) -nostdlib -lk -lgcc
|
|
|
|
os.iso: kernel.elf
|
|
mkdir -p iso/boot/grub
|
|
cp $< iso/boot/kernel.elf
|
|
cp util/grub.cfg iso/boot/grub/grub.cfg
|
|
grub-mkrescue -o $@ iso
|
|
|
|
run: os.iso
|
|
kitty --hold sh -c "gdb kernel.elf -x util/gdbcmds" &
|
|
qemu-system-i386 -s -cdrom os.iso
|
|
|
|
#TODO: when i inevitably do add libc, this is going to fail because they have the same name as the libk objects
|
|
#TODO: so we'll need to do a batch rename on one of the two object files,
|
|
libc.a: CFLAGS:=$(CFLAGS) -D__is_libc # Target rule to define __is_libc
|
|
libc.a: $(libc_objs)
|
|
$(AR) rcs $@ $(libc_objs)
|
|
|
|
libk.a: CFLAGS:=$(CFLAGS) -D__is_libk # Target rule to define __is_libk
|
|
libk.a: $(libk_objs)
|
|
$(AR) rcs $@ $(libk_objs)
|
|
|
|
install-headers:
|
|
mkdir -p sysroot/usr/include
|
|
cp -r --preserve=timestamps kernel/include/. sysroot/usr/include/.
|
|
cp -r --preserve=timestamps libc/include/. sysroot/usr/include/.
|
|
|
|
install-libs: $(binaries)
|
|
mkdir -p sysroot/usr/lib
|
|
cp -r --preserve=timestamps $(binaries) sysroot/usr/lib/.
|
|
|
|
clean:
|
|
-rm -rf iso/ sysroot/
|
|
-rm $(shell find . -name "*.o")
|
|
-rm $(shell find . -name "*.d")
|
|
-rm *.iso *.elf *.a com1.out bochslog.txt
|
|
-rm .clangd
|