Skip to content
Snippets Groups Projects
Makefile 4.71 KiB
Newer Older
rsc's avatar
rsc committed
OBJS = \
	console.o\
rsc's avatar
rsc committed
	file.o\
rsc's avatar
rsc committed
	ide.o\
	kalloc.o\
	lapic.o\
rsc's avatar
rsc committed
	main.o\
	mp.o\
	picirq.o\
	pipe.o\
	proc.o\
	setjmp.o\
	spinlock.o\
	string.o\
	syscall.o\
rsc's avatar
rsc committed
	sysfile.o\
	sysproc.o\
rsc's avatar
rsc committed
	trapasm.o\
	trap.o\
	vectors.o\
rtm's avatar
rtm committed
	bio.o\
	fs.o\
rsc's avatar
 
rsc committed
	exec.o\
rtm's avatar
rtm committed

# Cross-compiling (e.g., on Mac OS X)
#TOOLPREFIX = i386-jos-elf-

# Using native tools (e.g., on X86 Linux)
rsc's avatar
rsc committed
TOOLPREFIX = 

CC = $(TOOLPREFIX)gcc
LD = $(TOOLPREFIX)ld
OBJCOPY = $(TOOLPREFIX)objcopy
OBJDUMP = $(TOOLPREFIX)objdump
rsc's avatar
rsc committed
# On newer gcc you may need to add -fno-stack-protector to $(CFLAGS)
rsc's avatar
 
rsc committed
CFLAGS = -fno-builtin -O2 -Wall -MD -ggdb -fno-stack-protector
AS = $(TOOLPREFIX)gas
rtm's avatar
rtm committed

rtm's avatar
rtm committed
xv6.img : bootblock kernel fs.img
rtm's avatar
rtm committed
	dd if=/dev/zero of=xv6.img count=10000
	dd if=bootblock of=xv6.img conv=notrunc
	dd if=kernel of=xv6.img seek=1 conv=notrunc

bootblock : bootasm.S bootmain.c
	$(CC) -O -nostdinc -I. -c bootmain.c
	$(CC) -nostdinc -I. -c bootasm.S
	$(LD) -N -e start -Ttext 0x7C00 -o bootblock.o bootasm.o bootmain.o
	$(OBJDUMP) -S bootblock.o > bootblock.asm
	$(OBJCOPY) -S -O binary bootblock.o bootblock
	./sign.pl bootblock

rsc's avatar
 
rsc committed
kernel : $(OBJS) bootother.S initcode.S
	$(CC) -nostdinc -I. -c bootother.S
	$(LD) -N -e start -Ttext 0x7000 -o bootother.out bootother.o
	$(OBJCOPY) -S -O binary bootother.out bootother
	$(OBJDUMP) -S bootother.o > bootother.asm
rsc's avatar
 
rsc committed
	$(CC) -nostdinc -I. -c initcode.S
	$(LD) -N -e start -Ttext 0 -o initcode.out initcode.o
	$(OBJCOPY) -S -O binary initcode.out initcode
	$(OBJDUMP) -S initcode.o > initcode.asm
	$(LD) -Ttext 0x100000 -e main0 -o kernel $(OBJS) -b binary initcode bootother
rtm's avatar
rtm committed
	$(OBJDUMP) -S kernel > kernel.asm
rsc's avatar
 
rsc committed
	$(OBJDUMP) -t kernel | awk '/SYMBOL TABLE/ { go=1; next } go {print $$1, $$NF}' >kernel.sym
rtm's avatar
rtm committed

rsc's avatar
rsc committed
tags: $(OBJS) bootother.S _init
kaashoek's avatar
kaashoek committed
	etags *.S *.c

rtm's avatar
rtm committed
vectors.S : vectors.pl
	perl vectors.pl > vectors.S

kaashoek's avatar
kaashoek committed
ULIB = ulib.o usys.o printf.o umalloc.o
rsc's avatar
rsc committed
usertests : usertests.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o usertests usertests.o $(ULIB)
rtm's avatar
rtm committed
	$(OBJDUMP) -S usertests > usertests.asm

rsc's avatar
rsc committed
_echo : echo.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o _echo echo.o $(ULIB)
	$(OBJDUMP) -S _echo > echo.asm
rtm's avatar
rtm committed

rsc's avatar
rsc committed
_cat : cat.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o _cat cat.o $(ULIB)
	$(OBJDUMP) -S _cat > cat.asm
rsc's avatar
rsc committed
_init : init.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o _init init.o $(ULIB)
	$(OBJDUMP) -S _init > init.asm
rsc's avatar
rsc committed
	$(OBJDUMP) -t _init | awk '/SYMBOL TABLE/ { go=1; next } go {print $$1, $$NF}' >init.sym
rsc's avatar
rsc committed
_kill : kill.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o _kill kill.o $(ULIB)
	$(OBJDUMP) -S _kill > kill.asm
rsc's avatar
rsc committed
_ls : ls.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o _ls ls.o $(ULIB)
	$(OBJDUMP) -S _ls > ls.asm
kaashoek's avatar
kaashoek committed

rsc's avatar
rsc committed
_mkdir : mkdir.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o _mkdir mkdir.o $(ULIB)
	$(OBJDUMP) -S _mkdir > mkdir.asm
rsc's avatar
rsc committed
_rm : rm.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o _rm rm.o $(ULIB)
	$(OBJDUMP) -S _rm > rm.asm
rsc's avatar
rsc committed
_ln : ln.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o _ln ln.o $(ULIB)
	$(OBJDUMP) -S _ln > ln.asm

rsc's avatar
rsc committed
_sh : sh.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o _sh sh.o $(ULIB)
	$(OBJDUMP) -S _sh > sh.asm

rsc's avatar
rsc committed
_zombie: zombie.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o _zombie zombie.o $(ULIB)
	$(OBJDUMP) -S _zombie > zombie.asm

rtm's avatar
rtm committed
mkfs : mkfs.c fs.h
	cc -o mkfs mkfs.c

rsc's avatar
rsc committed
UPROGS=usertests _echo _cat _init _kill _ln _ls _mkdir _rm _sh _zombie
rsc's avatar
rsc committed
fs.img : mkfs README $(UPROGS)
	./mkfs fs.img README $(UPROGS)
rtm's avatar
rtm committed

rtm's avatar
rtm committed
-include *.d

rtm's avatar
rtm committed
clean : 
kaashoek's avatar
kaashoek committed
	rm -f *.ps *.tex *.dvi *.idx *.aux *.log *.ind *.ilg \
kaashoek's avatar
kaashoek committed
	*.o *.d *.asm vectors.S parport.out \
rsc's avatar
rsc committed
	bootblock kernel xv6.img fs.img mkfs \
	$(UPROGS)
rsc's avatar
rsc committed

# make a printout
PRINT =	\
	runoff.list \
	README\
	types.h param.h defs.h x86.h asm.h elf.h mmu.h spinlock.h\
	bootasm.S bootother.S main.c init.c spinlock.c\
rsc's avatar
rsc committed
	proc.h proc.c setjmp.S kalloc.c\
	syscall.h trapasm.S traps.h trap.c vectors.pl syscall.c sysproc.c\
	buf.h dev.h fcntl.h stat.h file.h fs.h fsvar.h file.c fs.c bio.c ide.c sysfile.c\
rsc's avatar
 
rsc committed
	pipe.c exec.c\
rsc's avatar
rsc committed
	mp.h ioapic.h mp.c lapic.c ioapic.c picirq.c\
	console.c\
	string.c\

xv6.pdf : $(PRINT)
	./runoff

print : xv6.pdf

# run in emulators

bochs : fs.img xv6.img
	if [ ! -e .bochsrc ]; then ln -s dot-bochsrc .bochsrc; fi
	bochs -q

qemu : fs.img xv6.img
	qemu -parallel stdio -hdb fs.img xv6.img

rsc's avatar
rsc committed
# CUT HERE
# prepare dist for students
# after running make dist, probably want to
# rename it to rev0 or rev1 or so on and then
# check in that version.
dist :
	rm -rf dist
	mkdir dist
	for i in *.c *.h *.S; \
	do \
		grep -v PAGEBREAK $$i >dist/$$i; \
	done
	sed '/CUT HERE/,$$d' Makefile >dist/Makefile
	cp README dot-bochsrc *.pl toc.* runoff runoff1 runoff.list dist

dist-test :
	rm -rf dist-test
	mkdir dist-test
	cp dist/* dist-test
	cd dist-test; ../m print
	cd dist-test; ../m bochs || true
	cd dist-test; ../m qemu

# update this rule (change rev0) when it is time to
# make a new revision.
tar :
	rm -rf /tmp/xv6
	mkdir -p /tmp/xv6
	cp dist/* /tmp/xv6
	(cd /tmp; tar cf - xv6) | gzip >xv6-rev0.tar.gz