Another round at reorganization
[akaros.git] / kern / src / Makefrag
1 # Makefile fragment for ROS kernel.
2 # This is NOT a complete makefile;
3 # you must run GNU make in the top-level directory
4 # where the GNUmakefile is located.
5 #
6
7 KERN_SRC_DIR = $(KERN_DIR)/src
8 OBJDIRS += $(KERN_SRC_DIR)
9
10 # entry.S must be first, so that it's the first code in the text segment!!!
11 #
12 # We also snatch the use of a couple handy source files
13 # from the lib directory, to avoid gratuitous code duplication.
14 KERN_SRCFILES := $(KERN_SRC_DIR)/entry.S \
15                  $(KERN_SRC_DIR)/smp_entry.S \
16                  $(KERN_SRC_DIR)/init.c \
17                  $(KERN_SRC_DIR)/console.c \
18                  $(KERN_SRC_DIR)/monitor.c \
19                  $(KERN_SRC_DIR)/pmap.c \
20                  $(KERN_SRC_DIR)/env.c \
21                  $(KERN_SRC_DIR)/kclock.c \
22                  $(KERN_SRC_DIR)/picirq.c \
23                  $(KERN_SRC_DIR)/printf.c \
24                  $(KERN_SRC_DIR)/trap.c \
25                  $(KERN_SRC_DIR)/trapentry.S \
26                  $(KERN_SRC_DIR)/sched.c \
27                  $(KERN_SRC_DIR)/syscall.c \
28                  $(KERN_SRC_DIR)/kdebug.c \
29                  $(KERN_SRC_DIR)/apic.c \
30                  $(KERN_SRC_DIR)/testing.c \
31                  $(KERN_SRC_DIR)/atomic.c \
32                  $(KERN_SRC_DIR)/smp.c \
33                  $(KERN_SRC_DIR)/printfmt.c \
34                  $(KERN_SRC_DIR)/readline.c \
35                  $(KERN_SRC_DIR)/string.c \
36                  $(KERN_SRC_DIR)/timer.c
37 # Only build files if they exist.
38 KERN_SRCFILES := $(wildcard $(KERN_SRCFILES))
39
40 KERN_APPFILES :=        $(USER_APPS_ROSLIB_DIR)/hello \
41                     $(USER_APPS_PARLIB_DIR)/hello
42 #                                       apps/null \
43 #                                       apps/hello \
44 #                                       apps_newlib/null \
45 #                               apps/hello \
46 #                               apps/buggyhello \
47 #                               apps/evilhello \
48 #                               apps/testbss \
49 #                               apps/divzero \
50 #                               apps/breakpoint \
51 #                               apps/softint \
52 #                               apps/badsegment \
53 #                               apps/faultread \
54 #                               apps/faultreadkernel \
55 #                               apps/faultwrite \
56 #                               apps/faultwritekernel \
57 #                               apps_newlib/null \
58
59 KERN_LDFLAGS   := $(KERN_LDFLAGS) -L$(OBJDIR)/$(KERN_DIR) \
60                   -T $(KERN_DIR)/kernel.ld
61
62 KERN_OBJFILES  := $(patsubst $(KERN_SRC_DIR)/%.c, \
63                              $(OBJDIR)/$(KERN_DIR)/%.o, \
64                              $(KERN_SRCFILES))
65 KERN_OBJFILES  := $(patsubst $(KERN_SRC_DIR)/%.S, \
66                              $(OBJDIR)/$(KERN_DIR)/%.o, \
67                              $(KERN_OBJFILES))
68
69 KERN_APPFILES  := $(patsubst %, $(OBJDIR)/%, $(KERN_APPFILES))
70
71 KERN_LDDEPENDS := $(KERN_OBJFILES) $(KERN_APPFILES) $(KERN_DIR)/kernel.ld \
72                   $(OBJDIR)/$(KERN_DIR)/libivykern.a
73
74 KERN_LDLIBS    := -livykern
75
76 KERN_GCC_LIB   := $(GCC_LIB)
77
78 $(OBJDIR)/$(KERN_DIR)/%.o: $(KERN_SRC_DIR)/%.c
79         @echo + cc [KERN] $<
80         @mkdir -p $(@D)
81         $(V)$(CC) $(KERN_CFLAGS) -c -o $@ $<
82
83 $(OBJDIR)/$(KERN_DIR)/%.o: $(KERN_SRC_DIR)/%.S
84         @echo + as [KERN] $<
85         @mkdir -p $(@D)
86         $(V)$(CC) $(KERN_CFLAGS) -c -o $@ $<
87
88 $(OBJDIR)/$(KERN_DIR)/kernel: $(KERN_LDDEPENDS)
89         @echo + ld [KERN] $@
90         $(V)$(LD) -o $@ $(KERN_LDFLAGS) $(KERN_OBJFILES) $(KERN_LDLIBS) \
91                         $(KERN_GCC_LIB) -b binary $(KERN_APPFILES)
92         $(V)$(OBJDUMP) -S $@ > $@.asm
93         $(V)$(NM) -n $@ > $@.sym
94
95 $(OBJDIR)/$(KERN_DIR)/bochs.img: $(OBJDIR)/$(KERN_DIR)/kernel $(OBJDIR)/$(KERN_DIR)/boot
96         @echo + mk [KERN] $@
97         $(V)dd if=/dev/zero of=$(OBJDIR)/$(KERN_DIR)/bochs.img~ count=10000 2>/dev/null
98         $(V)dd if=$(OBJDIR)/$(KERN_DIR)/boot of=$(OBJDIR)/$(KERN_DIR)/bochs.img~ conv=notrunc 2>/dev/null
99         $(V)dd if=$(OBJDIR)/$(KERN_DIR)/kernel of=$(OBJDIR)/$(KERN_DIR)/bochs.img~ seek=1 conv=notrunc 2>/dev/null
100         $(V)mv $(OBJDIR)/kern/bochs.img~ $(OBJDIR)/kern/bochs.img
101
102 all: $(OBJDIR)/$(KERN_DIR)/bochs.img
103