| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 | SUBDIR_ROOTS := .DIRS := . $(shell find $(SUBDIR_ROOTS) -type d)GARBAGE_PATTERNS := *.o *.s~ *.s *.S~ *.c~ *.h~ kernelGARBAGE := $(foreach DIR,$(DIRS),$(addprefix $(DIR)/,$(GARBAGE_PATTERNS)))DIR_LIB=liblib_patterns := *.aLIB_FILES := $(foreach DIR,$(DIR_LIB),$(addprefix $(DIR)/,$(lib_patterns)))# 控制操作系统使用的中断控制器 _INTR_8259A_ _INTR_APIC_PIC := _INTR_APIC_CFLAGS = $(GLOBAL_CFLAGS) -D $(PIC) -I $(shell pwd)ASFLAGS := --64LD_LIST := head.oOBJ_LIST := head.okernel_subdirs := common driver	head.o: head.S	gcc -E head.S > head.s # 预处理	as $(ASFLAGS) -o head.o head.s#gcc -mcmodel=large -fno-builtin -m64 -c head.S -o head.oentry.o: exception/entry.S	gcc -E exception/entry.S > exception/entry.s	as $(ASFLAGS) -o exception/entry.o exception/entry.sprocs.o: process/proc.S	gcc -E process/proc.S > process/proc.s	as $(ASFLAGS) -o process/procs.o process/proc.smain.o: main.c # -fno-builtin: 不使用C语言内建函数# The -m64 option sets int to 32bits and long and pointer to 64 bits and generates code for AMD’s x86-64 architecture.	gcc $(CFLAGS) -c main.c  -o main.oprintk.o: common/printk.c	gcc $(CFLAGS) -c common/printk.c -o common/printk.otrap.o:	exception/trap.c	gcc $(CFLAGS) -c exception/trap.c -o exception/trap.oirq.o: exception/irq.c	gcc $(CFLAGS) -c exception/irq.c -o exception/irq.omm.o: mm/mm.c	gcc $(CFLAGS) -c mm/mm.c -o mm/mm.oslab.o: mm/slab.c	gcc $(CFLAGS) -c mm/slab.c -o mm/slab.oprocess.o: process/process.c	gcc $(CFLAGS) -c process/process.c -o process/process.osched.o: sched/sched.c	gcc $(CFLAGS) -c sched/sched.c -o sched/sched.osyscall.o: syscall/syscall.c	gcc $(CFLAGS) -c syscall/syscall.c -o syscall/syscall.osmp.o: smp/smp.c 	gcc $(CFLAGS) -c smp/smp.c  -o smp/smp.o apu_boot.o: smp/apu_boot.S	gcc -E smp/apu_boot.S > smp/apu_boot.s # 预处理	as $(ASFLAGS) -o smp/apu_boot.o smp/apu_boot.scpu.o: common/cpu.c 	gcc $(CFLAGS) -c common/cpu.c -o common/cpu.osoftirq.o: exception/softirq.c	gcc $(CFLAGS) -c exception/softirq.c -o exception/softirq.ofat32.o: filesystem/fat32/fat32.c	gcc $(CFLAGS) -c filesystem/fat32/fat32.c -o filesystem/fat32/fat32.oMBR.o: filesystem/MBR.c	gcc $(CFLAGS) -c filesystem/MBR.c -o filesystem/MBR.oVFS.o: filesystem/VFS/VFS.c	gcc $(CFLAGS) -c filesystem/VFS/VFS.c -o filesystem/VFS/VFS.o# IPI的代码ifeq ($(ARCH), __x86_64__)OBJ_LIST += ipi.oLD_LIST += arch/x86_64/x86_64_ipi.oipi.o: arch/x86_64/x86_64_ipi.c	gcc $(CFLAGS) -c arch/x86_64/x86_64_ipi.c -o arch/x86_64/x86_64_ipi.o	endif# 驱动程序# 中断处理芯片的驱动程序ifeq ($(PIC), _INTR_8259A_)pic.o: driver/interrupt/8259A/8259A.c	gcc $(CFLAGS) -c driver/interrupt/8259A/8259A.c -o driver/interrupt/pic.oelsepic.o: driver/interrupt/apic/apic.c	gcc $(CFLAGS) -c driver/interrupt/apic/apic.c -o driver/interrupt/pic.oendifmultiboot2.o: driver/multiboot2/multiboot2.c 	gcc $(CFLAGS) -c driver/multiboot2/multiboot2.c  -o driver/multiboot2/multiboot2.oacpi.o: driver/acpi/acpi.c 	gcc $(CFLAGS) -c driver/acpi/acpi.c  -o driver/acpi/acpi.ops2_keyboard.o: driver/keyboard/ps2_keyboard.c	gcc $(CFLAGS) -c driver/keyboard/ps2_keyboard.c  -o driver/keyboard/ps2_keyboard.ops2_mouse.o: driver/mouse/ps2_mouse.c	gcc $(CFLAGS) -c driver/mouse/ps2_mouse.c -o driver/mouse/ps2_mouse.oata.o: driver/disk/ata.c	gcc $(CFLAGS) -c driver/disk/ata.c -o driver/disk/ata.opci.o: driver/pci/pci.c	gcc $(CFLAGS) -c driver/pci/pci.c -o driver/pci/pci.oahci.o: driver/disk/ahci/ahci.c	gcc $(CFLAGS) -c driver/disk/ahci/ahci.c -o driver/disk/ahci/ahci.ortc.o: driver/timers/rtc/rtc.c	gcc $(CFLAGS) -c driver/timers/rtc/rtc.c -o driver/timers/rtc/rtc.oHPET.o: driver/timers/HPET/HPET.c	gcc $(CFLAGS) -c driver/timers/HPET/HPET.c -o driver/timers/HPET/HPET.otimer.o: driver/timers/timer.c	gcc $(CFLAGS) -c driver/timers/timer.c -o driver/timers/timer.oOBJ_LIST += uart.oLD_LIST += driver/uart/uart.ouart.o: driver/uart/uart.c	gcc $(CFLAGS) -c driver/uart/uart.c -o driver/uart/uart.oall: kernel	ld -b elf64-x86-64 -z muldefs -o kernel  head.o main.o $(shell find . -name "*.o") -T link.lds	objcopy -I elf64-x86-64 -O elf64-x86-64 -R ".comment" -R ".eh_frame" kernel ../bin/kernel/kernel.elfkernel: head.o entry.o procs.o main.o printk.o trap.o mm.o slab.o irq.o pic.o process.o sched.o syscall.o multiboot2.o cpu.o acpi.o ps2_keyboard.o ps2_mouse.o ata.o pci.o ahci.o smp.o apu_boot.o rtc.o HPET.o softirq.o timer.o fat32.o MBR.o VFS.o $(OBJ_LIST)		@list='$(kernel_subdirs)'; for subdir in $$list; do \    		echo "make all in $$subdir";\    		cd $$subdir;\    		 $(MAKE) all CFLAGS="$(CFLAGS)";\    		cd ..;\	done	clean: 	rm -rf $(GARBAGE)
 |