spawn implemented.
[mit-jos.git] / kern / Makefrag
blob497dbda1f9fdedcf508a92a731cdde8e097b98f0
2 # Makefile fragment for JOS kernel.
3 # This is NOT a complete makefile;
4 # you must run GNU make in the top-level directory
5 # where the GNUmakefile is located.
8 OBJDIRS += kern
10 KERN_LDFLAGS := $(LDFLAGS) -T kern/kernel.ld -nostdlib
12 # entry.S must be first, so that it's the first code in the text segment!!!
14 # We also snatch the use of a couple handy source files
15 # from the lib directory, to avoid gratuitous code duplication.
16 KERN_SRCFILES :=        kern/entry.S \
17                         kern/init.c \
18                         kern/console.c \
19                         kern/monitor.c \
20                         kern/pmap.c \
21                         kern/env.c \
22                         kern/kclock.c \
23                         kern/picirq.c \
24                         kern/printf.c \
25                         kern/trap.c \
26                         kern/trapentry.S \
27                         kern/sched.c \
28                         kern/syscall.c \
29                         kern/kdebug.c \
30                         lib/printfmt.c \
31                         lib/readline.c \
32                         lib/string.c
34 # Only build files if they exist.
35 KERN_SRCFILES := $(wildcard $(KERN_SRCFILES))
37 # Binary program images to embed within the kernel.
38 KERN_BINFILES :=        user/idle \
39                         user/forktree \
40                         user/pingpong \
41                         user/primes \
42                         user/testfsipc \
43                         user/writemotd \
44                         user/icode \
45                         fs/fs
47 KERN_OBJFILES := $(patsubst %.c, $(OBJDIR)/%.o, $(KERN_SRCFILES))
48 KERN_OBJFILES := $(patsubst %.S, $(OBJDIR)/%.o, $(KERN_OBJFILES))
49 KERN_OBJFILES := $(patsubst $(OBJDIR)/lib/%, $(OBJDIR)/kern/%, $(KERN_OBJFILES))
51 KERN_BINFILES := $(patsubst %, $(OBJDIR)/%, $(KERN_BINFILES))
53 # How to build kernel object files
54 $(OBJDIR)/kern/%.o: kern/%.c
55         @echo + cc $<
56         @mkdir -p $(@D)
57         $(V)$(CC) -nostdinc $(KERN_CFLAGS) -c -o $@ $<
59 $(OBJDIR)/kern/%.o: kern/%.S
60         @echo + as $<
61         @mkdir -p $(@D)
62         $(V)$(CC) -nostdinc $(KERN_CFLAGS) -c -o $@ $<
64 $(OBJDIR)/kern/%.o: lib/%.c
65         @echo + cc $<
66         @mkdir -p $(@D)
67         $(V)$(CC) -nostdinc $(KERN_CFLAGS) -c -o $@ $<
69 # How to build the kernel itself
70 $(OBJDIR)/kern/kernel: $(KERN_OBJFILES) $(KERN_BINFILES) kern/kernel.ld
71         @echo + ld $@
72         $(V)$(LD) -o $@ $(KERN_LDFLAGS) $(KERN_OBJFILES) $(GCC_LIB) -b binary $(KERN_BINFILES)
73         $(V)$(OBJDUMP) -S $@ > $@.asm
74         $(V)$(NM) -n $@ > $@.sym
76 # How to build the Bochs disk image
77 $(OBJDIR)/kern/bochs.img: $(OBJDIR)/kern/kernel $(OBJDIR)/boot/boot
78         @echo + mk $@
79         $(V)dd if=/dev/zero of=$(OBJDIR)/kern/bochs.img~ count=10000 2>/dev/null
80         $(V)dd if=$(OBJDIR)/boot/boot of=$(OBJDIR)/kern/bochs.img~ conv=notrunc 2>/dev/null
81         $(V)dd if=$(OBJDIR)/kern/kernel of=$(OBJDIR)/kern/bochs.img~ seek=1 conv=notrunc 2>/dev/null
82         $(V)mv $(OBJDIR)/kern/bochs.img~ $(OBJDIR)/kern/bochs.img
84 all: $(OBJDIR)/kern/bochs.img
86 grub: $(OBJDIR)/jos-grub
88 $(OBJDIR)/jos-grub: $(OBJDIR)/kern/kernel
89         @echo + oc $@
90         $(V)$(OBJCOPY) --adjust-vma=0x10000000 $^ $@