Advertisement
MichaelPetch

SO 79530130 - Makefile

Mar 24th, 2025
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. # Compiler settings
  2. CC = x86_64-elf-gcc
  3. CFLAGS = -m32 -nostdlib -nostdinc -fno-builtin -fno-stack-protector -nostartfiles -nodefaultlibs -Wall -Wextra -c
  4. ASM = nasm
  5. ASMFLAGS = -f elf32
  6. LD = x86_64-elf-ld
  7. LDFLAGS = -T src/kernel/linker.ld -m elf_i386
  8. OBJCOPY = x86_64-elf-objcopy
  9.  
  10. # Directories
  11. SRC_DIR = src
  12. BUILD_DIR = build
  13.  
  14. # Files
  15. BOOT_SRC = $(SRC_DIR)/boot/boot.asm
  16. KERNEL_ENTRY = $(SRC_DIR)/kernel/entry.asm
  17. KERNEL_SRC = $(SRC_DIR)/kernel/kernel.c
  18. BOOT_BIN = $(BUILD_DIR)/boot.bin
  19. KERNEL_OBJ = $(BUILD_DIR)/kernel.o
  20. ENTRY_OBJ = $(BUILD_DIR)/entry.o
  21. KERNEL_BIN = $(BUILD_DIR)/kernel.bin
  22. KERNEL_ELF = $(BUILD_DIR)/kernel.elf
  23. OS_IMAGE = $(BUILD_DIR)/nox-os.img
  24.  
  25. # Build rules
  26. all: $(OS_IMAGE)
  27.  
  28. $(BOOT_BIN): $(BOOT_SRC)
  29. $(ASM) -f bin $< -o $@
  30.  
  31. $(ENTRY_OBJ): $(KERNEL_ENTRY)
  32. $(ASM) $(ASMFLAGS) $< -o $@
  33.  
  34. $(KERNEL_OBJ): $(KERNEL_SRC)
  35. $(CC) $(CFLAGS) $< -o $@
  36.  
  37. $(KERNEL_ELF): $(ENTRY_OBJ) $(KERNEL_OBJ)
  38. $(LD) $(LDFLAGS) -o $@ $^
  39.  
  40. $(KERNEL_BIN): $(KERNEL_ELF)
  41. $(OBJCOPY) -O binary $^ $@
  42.  
  43. $(OS_IMAGE): $(BOOT_BIN) $(KERNEL_BIN)
  44. dd if=/dev/zero of=$@ bs=512 count=2880
  45. dd if=$(BOOT_BIN) of=$@ conv=notrunc
  46. # Ensure the kernel is properly aligned at sector 2
  47. dd if=$(KERNEL_BIN) of=$(OS_IMAGE) seek=1 conv=notrunc bs=512
  48.  
  49. run: $(OS_IMAGE)
  50. qemu-system-i386 -fda $(OS_IMAGE) -boot a -monitor stdio -d int -no-reboot
  51.  
  52. clean:
  53. rm -rf $(BUILD_DIR)/*
  54. mkdir -p $(BUILD_DIR)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement