fix(kernel): make sure crystal kernel is built properly
+ 3
- 42
@@ -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