clean up the linker script for the kernel to keep a lot more sections.
[newos.git] / kernel / kernel.mk
blobe8c2210d6859914db3eea3b93464b4c194745e5d
1 ifneq ($(_KERNEL_MAKE),1)
2 _KERNEL_MAKE = 1
4 # include targets we depend on
5 include lib/lib.mk
6 include bus/bus.mk
7 include dev/dev.mk
9 KERNEL_DIR = kernel
10 KERNEL_OBJ_DIR = kernel/$(OBJ_DIR)
11 KERNEL_OBJS = \
12 $(KERNEL_OBJ_DIR)/main.o \
13 $(KERNEL_OBJ_DIR)/elf.o \
14 $(KERNEL_OBJ_DIR)/faults.o \
15 $(KERNEL_OBJ_DIR)/khash.o \
16 $(KERNEL_OBJ_DIR)/lock.o \
17 $(KERNEL_OBJ_DIR)/heap.o \
18 $(KERNEL_OBJ_DIR)/int.o \
19 $(KERNEL_OBJ_DIR)/console.o \
20 $(KERNEL_OBJ_DIR)/debug.o \
21 $(KERNEL_OBJ_DIR)/dev.o \
22 $(KERNEL_OBJ_DIR)/queue.o \
23 $(KERNEL_OBJ_DIR)/timer.o \
24 $(KERNEL_OBJ_DIR)/sem.o \
25 $(KERNEL_OBJ_DIR)/smp.o \
26 $(KERNEL_OBJ_DIR)/syscalls.o \
27 $(KERNEL_OBJ_DIR)/thread.o \
28 $(KERNEL_OBJ_DIR)/cbuf.o \
29 $(KERNEL_OBJ_DIR)/vfs.o
31 KERNEL_INCLUDES = -Iinclude
33 include $(KERNEL_DIR)/fs/fs_kernel.mk
34 include $(KERNEL_DIR)/vm/vm_kernel.mk
35 include $(KERNEL_DIR)/net/net_kernel.mk
37 KERNEL_ARCH_DIR = kernel/arch/$(ARCH)
38 include $(KERNEL_ARCH_DIR)/arch_kernel.mk
40 DEPS += $(KERNEL_OBJS:.o=.d)
42 KERNEL = $(KERNEL_OBJ_DIR)/system
44 kernel: $(KERNEL)
46 $(KERNEL): $(KERNEL_OBJS) $(KLIBS) $(DEV) $(BUS)
47 $(LD) --script=$(KERNEL_ARCH_DIR)/kernel.ld -L $(LIBGCC_PATH) -o $@ $(KERNEL_OBJS) $(DEV) $(BUS) $(LINK_KLIBS) $(LIBGCC)
49 kernelclean:
50 rm -f $(KERNEL_OBJS)
52 CLEAN += kernelclean
54 # build prototypes - this covers architecture dependant subdirs
56 $(KERNEL_OBJ_DIR)/%.o: $(KERNEL_DIR)/%.c
57 @if [ ! -d $(KERNEL_OBJ_DIR) ]; then mkdir -p $(KERNEL_OBJ_DIR); fi
58 $(CC) -c $< $(GLOBAL_CFLAGS) $(KERNEL_INCLUDES) -o $@
60 $(KERNEL_OBJ_DIR)/%.d: $(KERNEL_DIR)/%.c
61 @if [ ! -d $(KERNEL_OBJ_DIR) ]; then mkdir -p $(KERNEL_OBJ_DIR); fi
62 @echo "making deps for $<..."
63 @($(ECHO) -n $(dir $@); $(CC) $(GLOBAL_CFLAGS) $(KERNEL_INCLUDES) -M -MG $<) > $@
65 endif