fix(kernel): make sure crystal kernel is built properly@@ -1,40 +0,0 @@
-ASMCC = nasm
-CC = gcc
-LD = ld
-CFLAGS = -m64 -ffreestanding -fno-stack-protector -nostdlib -nostartfiles -O2
-LDFLAGS = -T kernel/linker.ld -nostdlib
-
-SRCS = kernel/main.c kernel/vga.c kernel/pmm.c kernel/idt.c kernel/ps2.c kernel/timer.c
-OBJS = $(SRCS:.c=.o) kernel/idt_asm.o kernel/multiboot.o kernel/entry.o modules/example_mod.o
-
-all: kernel.bin
-
-kernel/entry.o: kernel/entry.asm
- $(ASMCC) -f elf64 kernel/entry.asm -o kernel/entry.o
-
-kernel/multiboot.o: kernel/multiboot.asm
- $(ASMCC) -f elf64 kernel/multiboot.asm -o kernel/multiboot.o
-
-kernel/idt_asm.o: kernel/idt.S
- $(CC) -c kernel/idt.S -o kernel/idt_asm.o
-
-kernel/%.o: kernel/%.c
- $(CC) $(CFLAGS) -c $< -o $@
-
-modules/example_mod.o: modules/example_mod.c
- $(CC) $(CFLAGS) -c modules/example_mod.c -o modules/example_mod.o
-
-kernel.bin: $(OBJS)
- $(LD) $(LDFLAGS) -o kernel.bin $(OBJS)
-
-iso:
- mkdir -p iso/boot/grub
- cp kernel.bin iso/boot/kernel.bin
- printf 'set timeout=0\nset default=0\nmenuentry "CrystalOS" { multiboot2 /boot/kernel.bin }\n' > iso/boot/grub/grub.cfg
- grub-mkrescue -o crystalos.iso iso
-
-start:
- qemu-system-x86_64 -cdrom crystalos.iso -m 512 -serial stdio -display sdl
-
-clean:
- rm -f $(OBJS) kernel.bin crystalos.iso
@@ -31,8 +31,9 @@ then
--prelude=../prelude.cr \
-o ./build/kernel ./kernel/kernel.cr
- # The object file should be at ./build/kernel.o, now link it with the entry point
- ld -m elf_i386 -nostdlib -T ./kernel/linker.ld -o ./bin/kernel.bin ./build/kernelEntryPoint.o ./build/kernel.o || exit 1
+ # Link the kernel into an ELF executable, then convert it to a flat binary for the bootloader.
+ ld -m elf_i386 -nostdlib -T ./kernel/linker.ld -o ./bin/kernel.elf ./build/kernelEntryPoint.o ./build/kernel.o || exit 1
+ objcopy -O binary ./bin/kernel.elf ./bin/kernel.bin || exit 1
else
clang++ $CC_FLAGS $LD_FLAGS $CPP_FILES || exit 1
fi