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 thread.
cpp elf.
cpp id.
cpp log.
cpp context.
cpp page_allocator.
cpp process.
cpp scheduler.
cpp sharedMemoryManager.
cpp port_manager.
cpp syscall.
cpp kernel.
cpp \
16 $(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) \
17 $(patsubst %,libsupc
++/%, purevirtual.
cpp initialize.
cpp memory.
cpp)
19 SRC
+= $(patsubst %,x86
/%, context.
cpp elf.
cpp gdt.
cpp idt.
cpp processor.
cpp smp.
cpp thread.
cpp v86.
cpp v86m.
cpp vbe.
cpp)
20 SRC_ASM
= x86
/kernel.S x86
/_v86.S x86
/interrupt.S
23 ifeq ($(ARCH
), x86_64
)
24 SRC
+= $(patsubst %,x86_64
/%, context.
cpp elf.
cpp gdt.
cpp idt.
cpp processor.
cpp smp.
cpp thread.
cpp)
25 SRC_ASM
= x86_64
/kernel.S x86_64
/interrupt.S
26 SRC_YASM
= x86_64
/smp.S
28 SRC_C
= libc
/errno.c libc
/memory.c libc
/sbrk.c \
29 libc
/freestanding
/stdlib
/conversion.c libc
/freestanding
/ctype.c \
30 libarch
/$(ARCH
)/atomic.c \
31 $(patsubst %,libc
/freestanding
/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 INCLUDE
= -I
$(ROOT_DIR
)/kernel
/include $(LIBARCH_INCLUDE
) $(LIBC_INCLUDE
) $(LIBCPP_INCLUDE
) $(LIBLIGHTOSPP_INCLUDE
) $(LIBKERNEL_INCLUDE
) $(LIBSERVER_INCLUDE
)
36 @makedepend
-f
- -DNDEBUG
$(INCLUDE_MAKEDEPEND
) $(INCLUDE
) $(SRC
) $(SRC_C
) -p
$(TMP_KERNEL
)/ > $(DEP
)
37 @makedepend
-f
- $(INCLUDE_MAKEDEPEND
) $(INCLUDE
) $(SRC
) $(SRC_C
) -p
$(TMP_KERNEL
)/ -o-dbg.o
>> $(DEP
)
41 all: dep
$(BUILD
)/$(ARCH
)/system
/kernel
$(BUILD
)/$(ARCH
)/system
/kernel-dbg
43 $(BUILD
)/$(ARCH
)/system
/kernel
: $(OBJ
) $(OBJ_C
) $(OBJ_ASM
) $(OBJ_YASM
) $(LIBGCC
) $(ARCH
)/kernel.
ld
45 @
$(LD
) -s
-T
$(ARCH
)/kernel.
ld -o
$(@
) $(OBJ_ASM
) $(OBJ
) $(OBJ_C
) $(LIBGCC
)
47 $(BUILD
)/$(ARCH
)/system
/kernel-dbg
: $(OBJ_DBG
) $(OBJ_C_DBG
) $(OBJ_ASM
) $(OBJ_YASM
) $(LIBGCC
) $(ARCH
)/kernel.
ld
48 @echo
" LD (Debug) kernel"
49 @
$(LD
) -T
$(ARCH
)/kernel.
ld -o
$(@
) $(OBJ_ASM
) $(OBJ_DBG
) $(OBJ_C_DBG
) $(LIBGCC
)
51 $(TMP_KERNEL
)/%.o
: %.
cpp
52 @echo
" C++ kernel/$(@:$(TMP_KERNEL)/%.o=%.cpp)"
53 @
$(CPP
) -DNDEBUG
$(KERNEL_CPP_FLAGS
) $(INCLUDE
) -c
$(@
:$(TMP_KERNEL
)/%.o
=%.
cpp) -o
$(@
)
55 $(TMP_KERNEL
)/%-dbg.o
: %.
cpp
56 @echo
" C++ (Debug) kernel/$(@:$(TMP_KERNEL)/%-dbg.o=%.cpp)"
57 @
$(CPP
) $(KERNEL_CPP_FLAGS
) $(INCLUDE
) -c
$(@
:$(TMP_KERNEL
)/%-dbg.o
=%.
cpp) -o
$(@
)
59 $(TMP_KERNEL
)/%.o
: %.c
60 @echo
" C kernel/$(@:$(TMP_KERNEL)/%.o=%.c)"
61 @
$(CC
) -DNDEBUG
$(KERNEL_C_FLAGS
) $(INCLUDE
) -c
$(@
:$(TMP_KERNEL
)/%.o
=%.c
) -o
$(@
)
63 $(TMP_KERNEL
)/%-dbg.o
: %.c
64 @echo
" C (Debug) kernel/$(@:$(TMP_KERNEL)/%-dbg.o=%.c)"
65 @
$(CC
) $(KERNEL_C_FLAGS
) $(INCLUDE
) -c
$(@
:$(TMP_KERNEL
)/%-dbg.o
=%.c
) -o
$(@
)
67 $(OBJ_ASM
): $(SRC_ASM
)
68 @echo
" AS kernel/$(@:$(TMP_KERNEL)/%.o=%.S)"
69 @
$(CC
) $(AS_FLAGS
) -o
$(@
) $(@
:$(TMP_KERNEL
)/%.o
=%.S
)
71 $(OBJ_YASM
): $(SRC_YASM
)
72 @echo
" YASM kernel/$(@:%.bin=%.S)"
73 @yasm
-f bin
-o
$(@
) $(@
:%.bin
=%.S
)
76 @
rm -f
$(DEP
) $(OBJ
) $(OBJ_DBG
) $(OBJ_C
) $(OBJ_C_DBG
) $(OBJ_ASM
) $(OBJ_YASM
) $(BUILD
)/$(ARCH
)/system
/kernel
$(BUILD
)/$(ARCH
)/system
/kernel-dbg
78 # Additional dependencies:
79 $(TMP_KERNEL
)/$(ARCH
)/kernel.o
: $(ARCH
)/smp.bin