makefile 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. BUILD_O_DIR = ./build
  2. BUILD_BIN_DIR = $(BUILD_O_DIR)/bin
  3. ENTRY_POINT = 0xc0001500
  4. DIS_IMG = ./hd30M.img
  5. AS = nasm
  6. CC = i386-elf-gcc
  7. LD = i386-elf-ld
  8. LIB = -I lib/ -I lib/kernel -I lib/user/ -I kernel/ -I device/ -I thread/
  9. BOOTLIB = -I boot/include/
  10. ASFLAGS = -f elf
  11. CFLAGS = -Wall $(LIB) -c -fno-builtin -W -Wstrict-prototypes -Wmissing-prototypes
  12. LDFLAGS = -Ttext $(ENTRY_POINT) -e main -Map $(BUILD_BIN_DIR)/kernel.map
  13. OBJS = $(BUILD_O_DIR)/main.o $(BUILD_O_DIR)/init.o $(BUILD_O_DIR)/interrupt.o \
  14. $(BUILD_O_DIR)/timer.o $(BUILD_O_DIR)/kernel.o $(BUILD_O_DIR)/print.o \
  15. $(BUILD_O_DIR)/debug.o $(BUILD_O_DIR)/string.o $(BUILD_O_DIR)/bitmap.o \
  16. $(BUILD_O_DIR)/memory.o $(BUILD_O_DIR)/thread.o $(BUILD_O_DIR)/list.o $(BUILD_O_DIR)/switch.o
  17. ################################ C 代码编译 ################################
  18. $(BUILD_O_DIR)/main.o: kernel/main.c lib/kernel/print.h lib/stdint.h kernel/init.h
  19. $(CC) $(CFLAGS) $< -o $@
  20. $(BUILD_O_DIR)/init.o: kernel/init.c kernel/init.h lib/kernel/print.h lib/stdint.h kernel/interrupt.h device/timer.h
  21. $(CC) $(CFLAGS) $< -o $@
  22. $(BUILD_O_DIR)/interrupt.o: kernel/interrupt.c lib/stdint.h kernel/interrupt.h kernel/global.h lib/kernel/print.h
  23. $(CC) $(CFLAGS) $< -o $@
  24. $(BUILD_O_DIR)/timer.o: device/timer.c lib/stdint.h device/timer.h kernel/interrupt.h lib/kernel/io.h lib/kernel/print.h
  25. $(CC) $(CFLAGS) $< -o $@
  26. $(BUILD_O_DIR)/debug.o: kernel/debug.c kernel/debug.h lib/kernel/print.h lib/stdint.h kernel/interrupt.h
  27. $(CC) $(CFLAGS) $< -o $@
  28. $(BUILD_O_DIR)/string.o: lib/string.c lib/string.h lib/stdint.h
  29. $(CC) $(CFLAGS) $< -o $@
  30. $(BUILD_O_DIR)/bitmap.o: lib/kernel/bitmap.c lib/kernel/bitmap.h lib/stdint.h lib/string.h
  31. $(CC) $(CFLAGS) $< -o $@
  32. $(BUILD_O_DIR)/memory.o: kernel/memory.c kernel/memory.h lib/stdint.h lib/kernel/bitmap.h lib/string.h lib/kernel/print.h
  33. $(CC) $(CFLAGS) $< -o $@
  34. $(BUILD_O_DIR)/thread.o: thread/thread.c thread/thread.h
  35. $(CC) $(CFLAGS) $< -o $@
  36. $(BUILD_O_DIR)/list.o: lib/kernel/list.c lib/kernel/list.h lib/stdint.h kernel/interrupt.h
  37. $(CC) $(CFLAGS) $< -o $@
  38. ################################ 汇编代码编译 ################################
  39. $(BUILD_O_DIR)/kernel.o: kernel/kernel.S
  40. $(AS) $(ASFLAGS) $< -o $@
  41. $(BUILD_O_DIR)/switch.o: thread/switch.S
  42. $(AS) $(ASFLAGS) $< -o $@
  43. $(BUILD_O_DIR)/print.o: lib/kernel/print.S
  44. $(AS) $(ASFLAGS) $< -o $@
  45. $(BUILD_BIN_DIR)/mbr.bin: boot/mbr.S
  46. $(AS) $(BOOTLIB) $< -o $@
  47. $(BUILD_BIN_DIR)/loader.bin: boot/loader.S
  48. $(AS) $(BOOTLIB) $< -o $@
  49. ################################ 链接所有目标文件 ################################
  50. $(BUILD_BIN_DIR)/kernel.bin: $(OBJS)
  51. $(LD) $(LDFLAGS) $^ -o $@
  52. .PHONY:clean mk_dir mbr loader K create_img hd run build all
  53. mk_dir:
  54. @if [ ! -d $(BUILD_O_DIR) ]; then mkdir $(BUILD_O_DIR); fi
  55. @if [ ! -d $(BUILD_BIN_DIR) ]; then mkdir $(BUILD_BIN_DIR); fi
  56. ################################ 创建 DIS_IMG ################################
  57. create_img:
  58. @if [ ! -f $(DIS_IMG) ]; then bximage -q -func=create -hd=30M $(DIS_IMG); fi
  59. @echo "创建 $(DIS_IMG) 成功"
  60. hd: mbr loader K create_img
  61. dd if=$(BUILD_BIN_DIR)/mbr.bin of=$(DIS_IMG) bs=512 count=1 conv=notrunc
  62. dd if=$(BUILD_BIN_DIR)/loader.bin of=$(DIS_IMG) bs=512 count=4 seek=2 conv=notrunc
  63. dd if=$(BUILD_BIN_DIR)/kernel.bin of=$(DIS_IMG) bs=512 count=200 seek=9 conv=notrunc
  64. clean: mk_dir
  65. cd $(BUILD_O_DIR) && rm -rf ./*
  66. rm -rf $(BUILD_O_DIR)
  67. rm -rf $(DIS_IMG)
  68. rm -rf bochs_log.txt
  69. K: mk_dir $(BUILD_BIN_DIR)/kernel.bin
  70. mbr: mk_dir $(BUILD_BIN_DIR)/mbr.bin
  71. loader: mk_dir $(BUILD_BIN_DIR)/loader.bin
  72. run: hd
  73. bochs -f bochsrc -q
  74. build: mk_dir mbr loader K mk_dir
  75. @echo "编译完成"
  76. all: mk_dir create_img mbr loader K hd