* Makefiles: use gcc to generate the dependency files instead of makedepend
[lightOS.git] / kernel / Makefile
blob7bac56de06fcc9bc0a644b3d11ce27f2401fa491
1 ###############################################################################
2 ######### lightOS Makfile ##########
3 ###############################################################################
4 include ../Makefile.config
5 include ../Makefile.rules
7 OBJ= $(SRC:%.cpp=$(TMP_KERNEL)/%.o)
8 OBJ_C= $(SRC_C:%.c=$(TMP_KERNEL)/%.o)
9 OBJ_DBG= $(SRC:%.cpp=$(TMP_KERNEL)/%-dbg.o)
10 OBJ_C_DBG= $(SRC_C:%.c=$(TMP_KERNEL)/%-dbg.o)
11 OBJ_ASM= $(SRC_ASM:%.S=$(TMP_KERNEL)/%.o)
12 OBJ_YASM= $(SRC_YASM:%.S=%.bin)
14 SRC= libc/abort.cpp libc/allocpages.cpp \
15 cmdline.cpp vfs.cpp io_port_manager.cpp spinlock.cpp event_manager.cpp range_allocator.cpp \
16 thread.cpp elf.cpp id.cpp log.cpp context.cpp page_allocator.cpp process.cpp scheduler.cpp \
17 sharedMemoryManager.cpp port_manager.cpp syscall.cpp kernel.cpp \
18 $(patsubst %,x86_shared/%, cmdline.cpp console.cpp elf.cpp acpi.cpp apic.cpp pic.cpp interrupt.cpp interrupt_controller.cpp idt.cpp gdt.cpp multiboot.cpp processor.cpp smp.cpp serial.cpp cmos.cpp dma.cpp) \
19 $(patsubst %,libsupc++/%, purevirtual.cpp initialize.cpp memory.cpp)
20 ifeq ($(ARCH), x86)
21 SRC+= $(patsubst %,x86/%, context.cpp elf.cpp gdt.cpp idt.cpp processor.cpp smp.cpp thread.cpp v86.cpp v86m.cpp vbe.cpp)
22 SRC_ASM= x86/kernel.S x86/_v86.S x86/interrupt.S
23 SRC_YASM= x86/smp.S
24 endif
25 ifeq ($(ARCH), x86_64)
26 SRC+= $(patsubst %,x86_64/%, context.cpp elf.cpp gdt.cpp idt.cpp processor.cpp smp.cpp thread.cpp)
27 SRC_ASM= x86_64/kernel.S x86_64/interrupt.S
28 SRC_YASM= x86_64/smp.S
29 endif
30 SRC_C= libc/errno.c libc/memory.c libc/sbrk.c libc/ctype.c libc/conversion.c \
31 libarch/$(ARCH)/atomic.c \
32 $(patsubst %,libc/string/%, memchr.c memcmp.c memcpy.c memmove.c memset.c strcat.c strchr.c strcmp.c strcpy.c strcspn.c strlen.c strncat.c strncmp.c strncpy.c strpbrk.c strrchr.c strspn.c strstr.c strtok.c)
33 DEPS:= $(SRC:%.cpp=%:dep) $(SRC_C:%.c=%.dep) $(SRC:%.cpp=%:dbg.dep) $(SRC_C:%.c=%.dbg.dep)
35 INCLUDE= -I $(ROOT_DIR)/kernel/include $(LIBARCH_INCLUDE) $(LIBC_INCLUDE) $(LIBCPP_INCLUDE) $(LIBLIGHTOSPP_INCLUDE) $(LIBKERNEL_INCLUDE) $(LIBSERVER_INCLUDE)
37 -include $(DEPS)
39 all: $(BUILD)/$(ARCH)/system/kernel $(BUILD)/$(ARCH)/system/kernel-dbg
41 $(BUILD)/$(ARCH)/system/kernel: $(OBJ) $(OBJ_C) $(OBJ_ASM) $(OBJ_YASM) $(LIBGCC) $(ARCH)/kernel.ld
42 @echo " LD kernel"
43 @$(LD) -s -T $(ARCH)/kernel.ld -o $(@) $(OBJ_ASM) $(OBJ) $(OBJ_C) $(LIBGCC)
45 $(BUILD)/$(ARCH)/system/kernel-dbg: $(OBJ_DBG) $(OBJ_C_DBG) $(OBJ_ASM) $(OBJ_YASM) $(LIBGCC) $(ARCH)/kernel.ld
46 @echo " LD (Debug) kernel"
47 @$(LD) -T $(ARCH)/kernel.ld -o $(@) $(OBJ_ASM) $(OBJ_DBG) $(OBJ_C_DBG) $(LIBGCC)
49 $(OBJ):
50 @echo " C++ kernel/$(@:$(TMP_KERNEL)/%.o=%.cpp)"
51 @$(CPP) -DNDEBUG $(KERNEL_CPP_FLAGS) $(INCLUDE) -MD -MF $(@:$(TMP_KERNEL)/%.o=%.dep) -MT $@ -c $(@:$(TMP_KERNEL)/%.o=%.cpp) -o $(@)
53 $(OBJ_DBG):
54 @echo " C++ (Debug) kernel/$(@:$(TMP_KERNEL)/%-dbg.o=%.cpp)"
55 @$(CPP) $(KERNEL_CPP_FLAGS) $(INCLUDE) -MD -MF $(@:$(TMP_KERNEL)/%.o=%.dbg.dep) -MT $@ -c $(@:$(TMP_KERNEL)/%-dbg.o=%.cpp) -o $(@)
57 $(OBJ_C):
58 @echo " C kernel/$(@:$(TMP_KERNEL)/%.o=%.c)"
59 @$(CC) -DNDEBUG $(KERNEL_C_FLAGS) $(INCLUDE) -MD -MF $(@:$(TMP_KERNEL)/%.o=%.dep) -MT $@ -c $(@:$(TMP_KERNEL)/%.o=%.c) -o $(@)
61 $(OBJ_C_DBG):
62 @echo " C (Debug) kernel/$(@:$(TMP_KERNEL)/%-dbg.o=%.c)"
63 @$(CC) $(KERNEL_C_FLAGS) $(INCLUDE) -MD -MF $(@:$(TMP_KERNEL)/%.o=%.dbg.dep) -MT $@ -c $(@:$(TMP_KERNEL)/%-dbg.o=%.c) -o $(@)
65 $(OBJ_ASM): $(SRC_ASM)
66 @echo " AS kernel/$(@:$(TMP_KERNEL)/%.o=%.S)"
67 @$(CC) $(AS_FLAGS) -o $(@) $(@:$(TMP_KERNEL)/%.o=%.S)
69 $(OBJ_YASM): $(SRC_YASM)
70 @echo " YASM kernel/$(@:%.bin=%.S)"
71 @yasm -f bin -o $(@) $(@:%.bin=%.S)
73 clean:
74 @rm -f $(DEPS) $(OBJ) $(OBJ_DBG) $(OBJ_C) $(OBJ_C_DBG) $(OBJ_ASM) $(OBJ_YASM) $(BUILD)/$(ARCH)/system/kernel $(BUILD)/$(ARCH)/system/kernel-dbg
76 # Additional dependencies:
77 $(TMP_KERNEL)/$(ARCH)/kernel.o: $(ARCH)/smp.bin