146 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
#
 | 
						|
# Makefile fragment for JOS kernel.
 | 
						|
# This is NOT a complete makefile;
 | 
						|
# you must run GNU make in the top-level directory
 | 
						|
# where the GNUmakefile is located.
 | 
						|
#
 | 
						|
 | 
						|
OBJDIRS += kern
 | 
						|
 | 
						|
KERN_LDFLAGS := $(LDFLAGS) -T kern/kernel.ld -nostdlib
 | 
						|
 | 
						|
# entry.S must be first, so that it's the first code in the text segment!!!
 | 
						|
#
 | 
						|
# We also snatch the use of a couple handy source files
 | 
						|
# from the lib directory, to avoid gratuitous code duplication.
 | 
						|
KERN_SRCFILES :=	kern/entry.S \
 | 
						|
			kern/entrypgdir.c \
 | 
						|
			kern/init.c \
 | 
						|
			kern/console.c \
 | 
						|
			kern/monitor.c \
 | 
						|
			kern/pmap.c \
 | 
						|
			kern/env.c \
 | 
						|
			kern/kclock.c \
 | 
						|
			kern/picirq.c \
 | 
						|
			kern/printf.c \
 | 
						|
			kern/trap.c \
 | 
						|
			kern/trapentry.S \
 | 
						|
			kern/sched.c \
 | 
						|
			kern/syscall.c \
 | 
						|
			kern/kdebug.c \
 | 
						|
			lib/printfmt.c \
 | 
						|
			lib/readline.c \
 | 
						|
			lib/string.c
 | 
						|
 | 
						|
# Source files for LAB4
 | 
						|
KERN_SRCFILES +=	kern/mpentry.S \
 | 
						|
			kern/mpconfig.c \
 | 
						|
			kern/lapic.c \
 | 
						|
			kern/spinlock.c
 | 
						|
 | 
						|
# Only build files if they exist.
 | 
						|
KERN_SRCFILES := $(wildcard $(KERN_SRCFILES))
 | 
						|
 | 
						|
# Binary program images to embed within the kernel.
 | 
						|
# Binary files for LAB3
 | 
						|
KERN_BINFILES :=	user/hello \
 | 
						|
			user/buggyhello \
 | 
						|
			user/buggyhello2 \
 | 
						|
			user/evilhello \
 | 
						|
			user/testbss \
 | 
						|
			user/divzero \
 | 
						|
			user/breakpoint \
 | 
						|
			user/softint \
 | 
						|
			user/badsegment \
 | 
						|
			user/faultread \
 | 
						|
			user/faultreadkernel \
 | 
						|
			user/faultwrite \
 | 
						|
			user/faultwritekernel
 | 
						|
 | 
						|
# Binary files for LAB4
 | 
						|
KERN_BINFILES +=	user/idle \
 | 
						|
			user/yield \
 | 
						|
			user/dumbfork \
 | 
						|
			user/stresssched \
 | 
						|
			user/faultdie \
 | 
						|
			user/faultregs \
 | 
						|
			user/faultalloc \
 | 
						|
			user/faultallocbad \
 | 
						|
			user/faultnostack \
 | 
						|
			user/faultbadhandler \
 | 
						|
			user/faultevilhandler \
 | 
						|
			user/forktree \
 | 
						|
			user/sendpage \
 | 
						|
			user/spin \
 | 
						|
			user/fairness \
 | 
						|
			user/pingpong \
 | 
						|
			user/pingpongs \
 | 
						|
			user/primes
 | 
						|
# Binary files for LAB5
 | 
						|
KERN_BINFILES +=	user/faultio\
 | 
						|
	      		user/spawnfaultio\
 | 
						|
	      		user/testfile \
 | 
						|
			user/spawnhello \
 | 
						|
			user/icode \
 | 
						|
			fs/fs
 | 
						|
 | 
						|
# Binary files for LAB5
 | 
						|
KERN_BINFILES +=	user/testpteshare \
 | 
						|
			user/testfdsharing \
 | 
						|
			user/testpipe \
 | 
						|
			user/testpiperace \
 | 
						|
			user/testpiperace2 \
 | 
						|
			user/primespipe \
 | 
						|
			user/testkbd \
 | 
						|
			user/testshell
 | 
						|
 | 
						|
KERN_OBJFILES := $(patsubst %.c, $(OBJDIR)/%.o, $(KERN_SRCFILES))
 | 
						|
KERN_OBJFILES := $(patsubst %.S, $(OBJDIR)/%.o, $(KERN_OBJFILES))
 | 
						|
KERN_OBJFILES := $(patsubst $(OBJDIR)/lib/%, $(OBJDIR)/kern/%, $(KERN_OBJFILES))
 | 
						|
 | 
						|
KERN_BINFILES := $(patsubst %, $(OBJDIR)/%, $(KERN_BINFILES))
 | 
						|
 | 
						|
# How to build kernel object files
 | 
						|
$(OBJDIR)/kern/%.o: kern/%.c $(OBJDIR)/.vars.KERN_CFLAGS
 | 
						|
	@echo + cc $<
 | 
						|
	@mkdir -p $(@D)
 | 
						|
	$(V)$(CC) -nostdinc $(KERN_CFLAGS) -c -o $@ $<
 | 
						|
 | 
						|
$(OBJDIR)/kern/%.o: kern/%.S $(OBJDIR)/.vars.KERN_CFLAGS
 | 
						|
	@echo + as $<
 | 
						|
	@mkdir -p $(@D)
 | 
						|
	$(V)$(CC) -nostdinc $(KERN_CFLAGS) -c -o $@ $<
 | 
						|
 | 
						|
$(OBJDIR)/kern/%.o: lib/%.c $(OBJDIR)/.vars.KERN_CFLAGS
 | 
						|
	@echo + cc $<
 | 
						|
	@mkdir -p $(@D)
 | 
						|
	$(V)$(CC) -nostdinc $(KERN_CFLAGS) -c -o $@ $<
 | 
						|
 | 
						|
# Special flags for kern/init
 | 
						|
$(OBJDIR)/kern/init.o: override KERN_CFLAGS+=$(INIT_CFLAGS)
 | 
						|
$(OBJDIR)/kern/init.o: $(OBJDIR)/.vars.INIT_CFLAGS
 | 
						|
 | 
						|
# How to build the kernel itself
 | 
						|
$(OBJDIR)/kern/kernel: $(KERN_OBJFILES) $(KERN_BINFILES) kern/kernel.ld \
 | 
						|
	  $(OBJDIR)/.vars.KERN_LDFLAGS
 | 
						|
	@echo + ld $@
 | 
						|
	$(V)$(LD) -o $@ $(KERN_LDFLAGS) $(KERN_OBJFILES) $(GCC_LIB) -b binary $(KERN_BINFILES)
 | 
						|
	$(V)$(OBJDUMP) -S $@ > $@.asm
 | 
						|
	$(V)$(NM) -n $@ > $@.sym
 | 
						|
 | 
						|
# How to build the kernel disk image
 | 
						|
$(OBJDIR)/kern/kernel.img: $(OBJDIR)/kern/kernel $(OBJDIR)/boot/boot
 | 
						|
	@echo + mk $@
 | 
						|
	$(V)dd if=/dev/zero of=$(OBJDIR)/kern/kernel.img~ count=10000 2>/dev/null
 | 
						|
	$(V)dd if=$(OBJDIR)/boot/boot of=$(OBJDIR)/kern/kernel.img~ conv=notrunc 2>/dev/null
 | 
						|
	$(V)dd if=$(OBJDIR)/kern/kernel of=$(OBJDIR)/kern/kernel.img~ seek=1 conv=notrunc 2>/dev/null
 | 
						|
	$(V)mv $(OBJDIR)/kern/kernel.img~ $(OBJDIR)/kern/kernel.img
 | 
						|
 | 
						|
all: $(OBJDIR)/kern/kernel.img
 | 
						|
 | 
						|
grub: $(OBJDIR)/jos-grub
 | 
						|
 | 
						|
$(OBJDIR)/jos-grub: $(OBJDIR)/kern/kernel
 | 
						|
	@echo + oc $@
 | 
						|
	$(V)$(OBJCOPY) --adjust-vma=0x10000000 $^ $@
 |