-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
57 lines (43 loc) · 1.67 KB
/
Copy pathMakefile
File metadata and controls
57 lines (43 loc) · 1.67 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
CXX = x86_64-elf-g++
AS = x86_64-elf-as
NASM = nasm
LD = x86_64-elf-ld
KERN = kernel/boot.o kernel/gdt_flush.o kernel/isr_exc.o kernel/remap_pic.o \
kernel/timer_isr.o kernel/keyboard_isr.o kernel/switch_ctx.o \
kernel/syscall_entry.o kernel/elf.o kernel/ata.o kernel/ahci.o \
kernel/fat32.o kernel/kernel.o
CXXFLAGS = -std=c++23 -ffreestanding -fno-exceptions -fno-rtti -mno-red-zone \
-mgeneral-regs-only -O2 -Wall -Wextra -Wpedantic -Wshadow \
-Wold-style-cast -Wnull-dereference -Wformat=2 \
-Wno-misleading-indentation -Werror
LDFLAGS = -n -T kernel/linker.ld
all: iso
kernel/boot.o: kernel/boot.s
$(AS) kernel/boot.s -o kernel/boot.o
kernel/%.o: kernel/%.s
$(NASM) -f elf64 $< -o $@
kernel/ahci.o: kernel/ahci.cpp
$(CXX) -c kernel/ahci.cpp $(CXXFLAGS) -o kernel/ahci.o
kernel/ata.o: kernel/ata.cpp
$(CXX) -c kernel/ata.cpp $(CXXFLAGS) -o kernel/ata.o
kernel/elf.o: kernel/elf.cpp
$(CXX) -c kernel/elf.cpp $(CXXFLAGS) -o kernel/elf.o
kernel/fat32.o: kernel/fat32.cpp
$(CXX) -c kernel/fat32.cpp $(CXXFLAGS) -o kernel/fat32.o
kernel/kernel.o: kernel/kernel.cpp
$(CXX) -c kernel/kernel.cpp $(CXXFLAGS) -o kernel/kernel.o
buffer.bin: $(KERN)
$(LD) $(LDFLAGS) -o $@ $(KERN)
iso: buffer.bin
mkdir -p iso/boot/grub
cp buffer.bin iso/boot/buffer.bin
grub-mkrescue -o buffer.iso iso
run: iso
qemu-img create -f raw disk.img 64M
printf "label: dos\ntype=c" | sfdisk disk.img
mkfs.fat -F 32 --offset 2048 disk.img
qemu-system-x86_64 -drive file=disk.img,if=none,id=disk,format=raw \
-device ahci,id=ahci -device ide-hd,drive=disk,bus=ahci.0 -cdrom buffer.iso \
-machine q35 -boot d
clean:
rm -f kernel/*.o buffer.bin buffer.iso iso/boot/buffer.bin