-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
65 lines (54 loc) · 1.52 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
OBJS_DIR = objs
BUILD_DIR = build
INCLUDE_DIR = include
KERNEL_DIR = kernel
ISO_DIR = isodir
BOOT_DIR = $(KERNEL_DIR)/boot
CPU_DIR = $(KERNEL_DIR)/cpu
DRIVERS_DIR = $(KERNEL_DIR)/drivers
MM_DIR = $(KERNEL_DIR)/mm
LIBK_DIR = $(KERNEL_DIR)/libk
KERNEL_LIB = $(LIBK_DIR)/libk.a
KSH_DIR = $(KERNEL_DIR)/shell
NAME = $(BUILD_DIR)/simple_os.elf
NAME_ISO = simple_os.iso
LFLAGS = -z noexecstack -m elf_i386 -T
OBJS = $(KERNEL_DIR)/_kernel.o \
$(BOOT_DIR)/_boot.o \
$(CPU_DIR)/_cpu.o \
$(DRIVERS_DIR)/_drivers.o \
$(MM_DIR)/_mm.o \
$(KSH_DIR)/_ksh.o
$(OBJS):
$(MAKE) -C $(BOOT_DIR) all
$(MAKE) -C $(KERNEL_DIR) all
$(MAKE) -C $(LIBK_DIR) all
$(MAKE) -C $(CPU_DIR) all
$(MAKE) -C $(DRIVERS_DIR) all
$(MAKE) -C $(MM_DIR) all
$(MAKE) -C $(KSH_DIR) all
$(NAME): $(OBJS)
mkdir -p $(BUILD_DIR)
ld $(LFLAGS) $(KERNEL_DIR)/linker.ld -o $(NAME) $(OBJS) $(KERNEL_LIB)
all: $(NAME) build-iso
clean:
$(MAKE) -C $(KERNEL_DIR) fclean
$(MAKE) -C $(BOOT_DIR) fclean
$(MAKE) -C $(LIBK_DIR) fclean
$(MAKE) -C $(CPU_DIR) fclean
$(MAKE) -C $(DRIVERS_DIR) fclean
$(MAKE) -C $(MM_DIR) fclean
$(MAKE) -C $(KSH_DIR) fclean
fclean: clean
rm -f $(NAME)
rm -rf $(ISO_DIR) $(NAME_ISO)
rm -f $(NAME_ISO)
re: clean all
build-iso: $(NAME)
mkdir -p $(ISO_DIR) $(ISO_DIR)/boot/ $(ISO_DIR)/boot/grub/
cp $(NAME) $(ISO_DIR)/boot/kernel.elf
cp grub/grub.cfg $(ISO_DIR)/boot/grub/grub.cfg
grub-mkrescue -o $(NAME_ISO) $(ISO_DIR)
init-iso:
qemu-system-i386 -m 2024 -cdrom $(NAME_ISO)
init: init-iso