Makefile 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. # $@ = целевой файл
  2. # $< = первая зависимость
  3. # $^ = все зависимости
  4. BUILD = build/
  5. SOURCE = src/
  6. KERNEL_BIN = dist/x86_64/kernel.bin
  7. KERNEL_ISO = dist/x86_64/kernel.iso
  8. LINKER = targets/x86_64/linker.ld
  9. SAVE_ISO = targets/x86_64/iso
  10. c_source_files := $(shell find $(SOURCE) -name *.c)
  11. c_object_files := $(patsubst $(SOURCE)%.c, $(BUILD)%.o, $(c_source_files))
  12. asm_source_files := $(shell find $(SOURCE) -name *.asm)
  13. asm_object_files := $(patsubst $(SOURCE)%.asm, $(BUILD)%.o, $(asm_source_files))
  14. x86_64_object_files := $(c_object_files) $(asm_object_files)
  15. $(c_object_files): $(BUILD)%.o : $(SOURCE)%.c
  16. mkdir -p $(dir $@) && \
  17. x86_64-elf-gcc -masm=intel -c -I $(SOURCE)include -ffreestanding $(patsubst $(BUILD)%.o, $(SOURCE)%.c, $@) -o $@
  18. $(asm_object_files): $(BUILD)%.o : $(SOURCE)%.asm
  19. mkdir -p $(dir $@) && \
  20. nasm -f elf64 $(patsubst $(BUILD)%.o, $(SOURCE)%.asm, $@) -o $@
  21. .PHONY: build-x86_64
  22. build-x86_64: $(x86_64_object_files)
  23. mkdir -p dist/x86_64 && \
  24. x86_64-elf-ld -n -o $(KERNEL_BIN) -T $(LINKER) $(x86_64_object_files) && \
  25. cp $(KERNEL_BIN) $(SAVE_ISO)/boot/kernel.bin && \
  26. grub-mkrescue /usr/lib/grub/i386-pc -o $(KERNEL_ISO) $(SAVE_ISO)