diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 97c754d..f2e5bf5 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -17,3 +17,5 @@ jobs: run: sudo apt install gcc build-essential grub2-common qemu-system-x86 xorriso mtools - name: make run: make + - name: run and test + run: make test diff --git a/Makefile b/Makefile index 302421f..036d7af 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,8 @@ $(shell mkdir -p $(dir $(OBJS))) CFLAGS = -m64 -Wall -Werror -std=gnu11 -Ikernel/include -ffreestanding -O0 -fno-stack-protector ASFLAGS = -64 +.PHONY: all run test clean + all: cis-os.iso cis-os.iso: kernel/kernel.elf boot/grub.cfg @@ -22,10 +24,18 @@ kernel/kernel.elf: $(OBJS) %.o: %.s as $(ASFLAGS) -o $@ $< +serial.log: cis-os.iso + timeout 10s qemu-system-x86_64 -m 256 -cdrom $< -d guest_errors -serial file:$@ || true + +test: serial.log + cat $< + grep -q '\[OK\]' $< && echo "Test passed." || (echo "Test failed." && exit 1) + +run: cis-os.iso + qemu-system-x86_64 -m 256 -cdrom $< -d guest_errors -serial file:serial.log + clean: rm -rf isodir rm -rf kernel/kernel.elf cis-os.iso find kernel/ -name "*.o" -delete - -run: - qemu-system-x86_64 -m 256 -cdrom cis-os.iso -d guest_errors -serial file:serial.log + rm -f serial.log diff --git a/kernel/kernel.c b/kernel/kernel.c index e57ca3f..fd873ea 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -19,7 +19,10 @@ void puts(char *str) { } void kernel_main64() { - hal_write_byte_manual('C'); + hal_write_byte_manual('['); + hal_write_byte_manual('O'); + hal_write_byte_manual('K'); + hal_write_byte_manual(']'); puts("Hello, World from CIS! "); for(;;) {} } \ No newline at end of file