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)
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
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
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
)
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
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
)
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
$(@
)
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
$(@
)
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
$(@
)
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
)
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