Primitive path_lookup()
[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 KERN_CPIO = initramfs.cpio
10
11 # entry.S must be first, so that it's the first code in the text segment!!!
12 #
13 # We also snatch the use of a couple handy source files
14 # from the lib directory, to avoid gratuitous code duplication.
15 KERN_SRCFILES := $(KERN_ARCH_SRCFILES) \
16                  $(KERN_SRC_DIR)/init.c \
17                  $(KERN_SRC_DIR)/monitor.c \
18                  $(KERN_SRC_DIR)/printf.c \
19                  $(KERN_SRC_DIR)/sched.c \
20                  $(KERN_SRC_DIR)/printfmt.c \
21                  $(KERN_SRC_DIR)/smp.c \
22                  $(KERN_SRC_DIR)/multiboot.c \
23                  $(KERN_SRC_DIR)/readline.c \
24                  $(KERN_SRC_DIR)/string.c \
25                  $(KERN_SRC_DIR)/atomic.c \
26                  $(KERN_SRC_DIR)/colored_caches.c \
27                  $(KERN_SRC_DIR)/page_alloc.c \
28                  $(KERN_SRC_DIR)/pmap.c \
29                  $(KERN_SRC_DIR)/env.c \
30                  $(KERN_SRC_DIR)/manager.c \
31                  $(KERN_SRC_DIR)/syscall.c \
32                  $(KERN_SRC_DIR)/timer.c \
33                  $(KERN_SRC_DIR)/kfs.c \
34                  $(KERN_SRC_DIR)/process.c \
35                  $(KERN_SRC_DIR)/kmalloc.c \
36                  $(KERN_SRC_DIR)/hashtable.c \
37                  $(KERN_SRC_DIR)/schedule.c \
38                  $(KERN_SRC_DIR)/mm.c \
39                  $(KERN_SRC_DIR)/resource.c \
40                  $(KERN_SRC_DIR)/slab.c \
41                  $(KERN_SRC_DIR)/elf.c \
42                  $(KERN_SRC_DIR)/frontend.c \
43                  $(KERN_SRC_DIR)/vfs.c \
44                  $(KERN_SRC_DIR)/radix.c \
45                  $(KERN_SRC_DIR)/testing.c
46
47 # Only build files if they exist.
48 KERN_SRCFILES := $(wildcard $(KERN_SRCFILES))
49
50 KERN_APPFILES := \
51
52
53 ifneq ($(findstring CONFIG_KFS,$(KERN_CFLAGS)),)
54 all: tests
55 $(OBJDIR)/$(KERN_DIR)/kernel: tests
56
57 KERN_APPFILES += \
58                  $(TESTS_DIR)/tlstest \
59                  $(TESTS_DIR)/fp_test \
60                  $(TESTS_DIR)/mproctests \
61                  $(TESTS_DIR)/hello \
62                  $(TESTS_DIR)/mhello \
63                  $(TESTS_DIR)/pthread_test \
64                  $(TESTS_DIR)/pthread_barrier_test \
65                  $(TESTS_DIR)/idle \
66                  $(TESTS_DIR)/tsc_spitter \
67                  $(TESTS_DIR)/msr_get_cores \
68                  $(TESTS_DIR)/msr_get_singlecore \
69                  $(TESTS_DIR)/msr_dumb_while \
70                  $(TESTS_DIR)/msr_nice_while \
71                  $(TESTS_DIR)/msr_single_while \
72                  $(TESTS_DIR)/msr_cycling_vcores
73 endif
74
75 KERN_LDFLAGS   := $(KERN_LDFLAGS) -L$(OBJDIR)/$(KERN_DIR) \
76                   -T $(KERN_ARCH_SRC_DIR)/kernel.ld
77
78 KERN_OBJFILES  := $(patsubst $(KERN_DIR)/%.c, \
79                              $(OBJDIR)/$(KERN_DIR)/%.o, \
80                              $(KERN_SRCFILES))
81 KERN_OBJFILES  := $(patsubst $(KERN_DIR)/%.S, \
82                              $(OBJDIR)/$(KERN_DIR)/%.o, \
83                              $(KERN_OBJFILES))
84
85 KERN_APPFILES  := $(patsubst %, $(OBJDIR)/%, $(KERN_APPFILES))
86
87 KERN_LDDEPENDS := $(KERN_OBJFILES) $(KERN_APPFILES) $(ARCH_DIR)/$(TARGET_ARCH)/kernel.ld \
88                   $(OBJDIR)/$(KERN_DIR)/libivykern.a $(OBJDIR)/$(KERN_DIR)/$(KERN_CPIO)
89
90 KERN_LDLIBS    := -livykern
91
92 KERN_GCC_LIB   ?= $(GCC_LIB)
93
94 KERN_INITRAMFS_FILES := $(shell mkdir -p $(INITRAMFS_PATHS); find $(INITRAMFS_PATHS))
95
96 $(OBJDIR)/$(KERN_DIR)/$(KERN_CPIO) initramfs: $(KERN_INITRAMFS_FILES)
97         @echo Building initramfs:
98         @if [ "$(INITRAMFS_BIN)" != "" ]; then \
99         sh $(INITRAMFS_BIN); \
100     fi
101         $(V)for i in $(INITRAMFS_PATHS); do cd $$i; \
102         echo Adding $$i to initramfs...; \
103         find -L . | cpio --quiet -oH newc > \
104              $(TOP_DIR)/$(OBJDIR)/$(KERN_DIR)/$(KERN_CPIO); \
105         cd $$OLDPWD; \
106     done;
107
108 $(OBJDIR)/$(KERN_DIR)/%.o: $(KERN_DIR)/%.c
109         @echo + cc [KERN] $<
110         @mkdir -p $(@D)
111         $(V)$(CC) $(KERN_CFLAGS) -c -o $@ $<
112
113 $(OBJDIR)/$(KERN_DIR)/%.o: $(KERN_DIR)/%.S
114         @echo + as [KERN] $<
115         @mkdir -p $(@D)
116         $(V)$(CC) $(KERN_CFLAGS) -D__ASSEMBLER__ -c -o $@ $<
117
118 UDEBUG := $(findstring -g,$(USER_CFLAGS))
119 $(OBJDIR)/$(KERN_DIR)/kernel: $(KERN_LDDEPENDS)
120         @echo + ld [KERN] $@
121         @if [ "$(UDEBUG)" != "-g" ] && [ "$(KERN_APPFILES)" != "" ]; then \
122                 $(STRIP) -s $(KERN_APPFILES) ; \
123         fi
124         $(V)$(LD) -o $@ $(KERN_LDFLAGS) $(KERN_OBJFILES) $(KERN_LDLIBS) \
125                         $(KERN_GCC_LIB) -b binary $(KERN_APPFILES) \
126                         $(OBJDIR)/$(KERN_DIR)/$(KERN_CPIO)
127         $(V)$(OBJDUMP) -S $@ > $@.asm
128         $(V)$(NM) -n $@ > $@.sym
129
130 all: $(OBJDIR)/$(KERN_DIR)/kernel
131