-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
79 lines (70 loc) · 3.06 KB
/
Copy pathMakefile
File metadata and controls
79 lines (70 loc) · 3.06 KB
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# Compiler & linker
ASM = nasm
LIN = ld
CC = gcc
# Directory
SOURCE_FOLDER = src
OUTPUT_FOLDER = bin
ISO_NAME = OS2025
DISK_NAME = storage
# Flags
# Flags
WARNING_CFLAG = -Wall -Wextra -Werror
DEBUG_CFLAG = -fshort-wchar -g
STRIP_CFLAG = -nostdlib -fno-stack-protector -nostartfiles -nodefaultlibs -ffreestanding
CFLAGS = $(DEBUG_CFLAG) $(WARNING_CFLAG) $(STRIP_CFLAG) -m32 -c -I$(SOURCE_FOLDER) -Iheader
AFLAGS = -f elf32 -g -F dwarf
LFLAGS = -T $(SOURCE_FOLDER)/linker.ld -melf_i386
# QEMU
QEMU = qemu-system-i386
QEMU_BASE = -cdrom $(OUTPUT_FOLDER)/$(ISO_NAME).iso \
-hda $(OUTPUT_FOLDER)/$(DISK_NAME).bin
QEMU_DEBUG = -s -S $(QEMU_BASE)
.PHONY: all build run run-fast kernel iso disk clean
all: build
build: disk iso
@$(QEMU) $(QEMU_BASE)
run:
@$(QEMU) $(QEMU_DEBUG)
run-fast:
@$(MAKE) build
clean:
rm -rf *.o *.iso $(OUTPUT_FOLDER)/kernel
disk:
@mkdir -p $(OUTPUT_FOLDER)
@qemu-img create -f raw $(OUTPUT_FOLDER)/$(DISK_NAME).bin 4M
kernel:
@mkdir -p $(OUTPUT_FOLDER)
@$(ASM) $(AFLAGS) $(SOURCE_FOLDER)/kernel-entrypoint.s -o $(OUTPUT_FOLDER)/kernel-entrypoint.o
@# Compile kernel C source
@$(CC) $(CFLAGS) $(SOURCE_FOLDER)/kernel.c -o $(OUTPUT_FOLDER)/kernel.o
@$(CC) $(CFLAGS) $(SOURCE_FOLDER)/shell.c -o $(OUTPUT_FOLDER)/shell.o
@# Compile small C runtime helpers (e.g., string.c)
@$(CC) $(CFLAGS) $(SOURCE_FOLDER)/stdlib/string.c -o $(OUTPUT_FOLDER)/string.o
@$(CC) $(CFLAGS) $(SOURCE_FOLDER)/cpu/gdt.c -o $(OUTPUT_FOLDER)/gdt.o
@$(CC) $(CFLAGS) $(SOURCE_FOLDER)/driver/framebuffer.c -o $(OUTPUT_FOLDER)/framebuffer.o
@$(CC) $(CFLAGS) $(SOURCE_FOLDER)/cpu/idt.c -o $(OUTPUT_FOLDER)/idt.o
@$(CC) $(CFLAGS) $(SOURCE_FOLDER)/cpu/isr.c -o $(OUTPUT_FOLDER)/isr.o
@$(ASM) $(AFLAGS) $(SOURCE_FOLDER)/cpu/isr_stubs.asm -o $(OUTPUT_FOLDER)/isr_stubs.o
@$(CC) $(CFLAGS) $(SOURCE_FOLDER)/cpu/pic.c -o $(OUTPUT_FOLDER)/pic.o
@$(CC) $(CFLAGS) $(SOURCE_FOLDER)/driver/keyboard.c -o $(OUTPUT_FOLDER)/keyboard.o
@$(ASM) $(AFLAGS) $(SOURCE_FOLDER)/cpu/isr_stubs.asm -o $(OUTPUT_FOLDER)/isr_stubs.o
@$(CC) $(CFLAGS) $(SOURCE_FOLDER)/cpu/portio.c -o $(OUTPUT_FOLDER)/portio.o
@$(CC) $(CFLAGS) $(SOURCE_FOLDER)/driver/disk.c -o $(OUTPUT_FOLDER)/disk.o
@$(CC) $(CFLAGS) $(SOURCE_FOLDER)/fs/ext2.c -o $(OUTPUT_FOLDER)/ext2.o
@# Tambahkan kompilasi untuk paging.c
@$(CC) $(CFLAGS) $(SOURCE_FOLDER)/memory/paging.c -o $(OUTPUT_FOLDER)/paging.o
@# Pastikan semua object file disertakan dalam linker command
@$(LIN) $(LFLAGS) $(OUTPUT_FOLDER)/*.o -o $(OUTPUT_FOLDER)/kernel
@echo Linking object files and generate elf32...
@rm -f *.o
iso: kernel
@mkdir -p $(OUTPUT_FOLDER)/iso/boot/grub
@cp $(OUTPUT_FOLDER)/kernel $(OUTPUT_FOLDER)/iso/boot/
@cp other/grub1 $(OUTPUT_FOLDER)/iso/boot/grub/
@cp $(SOURCE_FOLDER)/menu.lst $(OUTPUT_FOLDER)/iso/boot/grub/
# TODO: Create ISO image
@genisoimage -R -b boot/grub/grub1 -no-emul-boot -boot-load-size 4 \
-A os -input-charset utf8 -quiet -boot-info-table \
-o $(OUTPUT_FOLDER)/$(ISO_NAME).iso $(OUTPUT_FOLDER)/iso
@rm -r $(OUTPUT_FOLDER)/iso/