summaryrefslogtreecommitdiff
path: root/Makefile
blob: 1084c201f39e317c0888c6d963a3a09e351dff31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
OBJS = \
	console.o\
	fd.o\
	ide.o\
	kalloc.o\
	lapic.o\
	ioapic.o\
	main.o\
	mp.o\
	picirq.o\
	pipe.o\
	proc.o\
	setjmp.o\
	spinlock.o\
	string.o\
	syscall.o\
	trapasm.o\
	trap.o\
	vectors.o\
	bio.o\
	fs.o\

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

# Using native tools (e.g., on X86 Linux)
# TOOLPREFIX = 

CC = $(TOOLPREFIX)gcc
LD = $(TOOLPREFIX)ld
OBJCOPY = $(TOOLPREFIX)objcopy
OBJDUMP = $(TOOLPREFIX)objdump
CFLAGS = -fno-builtin -O2 -Wall -MD
AS = $(TOOLPREFIX)gas

xv6.img : bootblock kernel fs.img
	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

kernel : $(OBJS) bootother.S init
	$(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
	$(LD) -Ttext 0x100000 -e main0 -o kernel $(OBJS) -b binary bootother init
	$(OBJDUMP) -S kernel > kernel.asm

tags: $(OBJS) bootother.S init
	etags *.S *.c

PRINT =	\
	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\
	proc.h proc.c setjmp.S kalloc.c\
	syscall.h trapasm.S traps.h trap.c vectors.pl syscall.c\
	buf.h dev.h fcntl.h stat.h fd.h fs.h fsvar.h fd.c fs.c bio.c ide.c\
	pipe.c\
	mp.h ioapic.h mp.c lapic.c ioapic.c picirq.c\
	console.c\
	string.c\

print: $(PRINT)
//	~/src/lgrind/source/lgrind -d ~/src/lgrind/lgrindef $(PRINT) > xv6.tex
	lgrind $(PRINT) > xv6.tex
	latex xv6.tex
	dvips -o xv61.ps xv6.dvi
	psnup -2 xv61.ps > xv6.ps
	rm -f xv61.ps
//	a2ps --line-numbers=1 -M Letter $(PRINT) -o xv6.ps
//	a2ps --line-numbers=1 -M Letter $(PRINT) --toc -atoc -o xv6toc.ps

vectors.S : vectors.pl
	perl vectors.pl > vectors.S

ULIB = ulib.o usys.o printf.o umalloc.o

user1 : user1.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o user1 user1.o $(ULIB)
	$(OBJDUMP) -S user1 > user1.asm

usertests : usertests.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o usertests usertests.o $(ULIB)
	$(OBJDUMP) -S usertests > usertests.asm

fstests : fstests.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o fstests fstests.o $(ULIB)
	$(OBJDUMP) -S fstests > fstests.asm

echo : echo.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o echo echo.o $(ULIB)
	$(OBJDUMP) -S echo > echo.asm

cat : cat.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o cat cat.o $(ULIB)
	$(OBJDUMP) -S cat > cat.asm

userfs : userfs.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o userfs userfs.o $(ULIB)
	$(OBJDUMP) -S userfs > userfs.asm

init : init.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o init init.o $(ULIB)
	$(OBJDUMP) -S init > init.asm

sh : sh.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o sh sh.o $(ULIB)
	$(OBJDUMP) -S sh > sh.asm

ls : ls.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o ls ls.o $(ULIB)
	$(OBJDUMP) -S ls > ls.asm

mkdir : mkdir.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o mkdir mkdir.o $(ULIB)
	$(OBJDUMP) -S mkdir > mkdir.asm

rm : rm.o $(ULIB)
	$(LD) -N -e main -Ttext 0 -o rm rm.o $(ULIB)
	$(OBJDUMP) -S rm > rm.asm

mkfs : mkfs.c fs.h
	cc -o mkfs mkfs.c

fs.img : mkfs userfs usertests echo cat readme init sh ls mkdir rm fstests
	./mkfs fs.img userfs usertests echo cat readme init sh ls mkdir rm fstests

-include *.d

clean : 
	rm -f *.ps *.tex *.dvi *.idx *.aux .log \
	*.o *.d *.asm vectors.S parport.out \
	bootblock kernel xv6.img user1 userfs usertests \
	fs.img mkfs echo init fstests