-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
executable file
·77 lines (56 loc) · 2.14 KB
/
Makefile
File metadata and controls
executable file
·77 lines (56 loc) · 2.14 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
AS = as
CC = gcc
LD = ld
INCLUDE = -I./include
DISKIMG = ./80m.img
OUTDIR = bin
EXCLUDE = -not -path "./boot/*" -not -path "./tools/*"
KNL_CSRC = $(shell find . -name "*.c" $(EXCLUDE))
KNL_SSRC = $(shell find . -name "*.s" $(EXCLUDE))
OBJS = $(shell find . -name "*.o")
KNL_COBJ = $(patsubst %.c, %.o, $(KNL_CSRC))
KNL_SOBJ = $(patsubst %.s, %.o, $(KNL_SSRC))
KNL_LD = tools/kernel_link.ld
BTL_LD = tools/loader_link.ld
GCFLAGS = -c -g -Os -m32 -ffreestanding -Wall -Werror -fno-pie
GCFLAGS += $(INCLUDE) -fno-stack-protector
ASFLAGS = --32
MAPFLAGS = -Map kernel.map
KNL_LDFLAGS = -static -nostdlib --nmagic -melf_i386
BTL_LDFLAGS = -static -nostdlib --nmagic --oformat=binary -melf_i386
BTL_OBJ = ./boot/loaderasm.o ./boot/loadermain.o ./drivers/hd.o
BTL_OBJ += ./kernel/string.o ./kernel/elf.o
all:clean $(OUTDIR)/boot.bin $(OUTDIR)/loader.bin $(OUTDIR)/kernel.elf dd test
clean:
rm -rf $(OUTDIR)/*
rm -rf $(OBJS)
rm -rf kernel.img
$(OUTDIR)/kernel.elf: $(KNL_COBJ) $(KNL_SOBJ)
$(LD) -T$(KNL_LD) $(KNL_LDFLAGS) $(KNL_COBJ) $(KNL_SOBJ) -o $(OUTDIR)/kernel.elf $(MAPFLAGS)
$(OUTDIR)/loader.bin: $(BTL_OBJ)
$(LD) -T$(BTL_LD) $(BTL_LDFLAGS) $(BTL_OBJ) -o $(OUTDIR)/loader.bin
$(OUTDIR)/boot.bin: ./boot/boot.o
$(LD) -Ttext 0x7c00 --oformat=binary ./boot/boot.o -o $(OUTDIR)/boot.bin
mkfs:
$(CC) $(INCLUDE) -m32 -Os tools/mkfs.c -o mkfs_kernel
$(KNL_COBJ): %.o: %.c
$(CC) $(GCFLAGS) -c $< -o $@
$(KNL_SOBJ): %.o: %.s
$(AS) $(ASFLAGS) $< -o $@
./boot/loadermain.o: ./boot/loadermain.c
$(CC) $(GCFLAGS) -c $< -o $@
./boot/boot.o: ./boot/boot.s
$(AS) $< -o $@
./boot/loaderasm.sasm.o: ./boot/loaderasm.s
$(AS) $(ASFLAGS) $< -o $@
dd:
./mkfs_kernel bin/loader.bin loader.bin bin/kernel.elf kernel.elf ./README.md README &\
dd if=./$(OUTDIR)/boot.bin of=$(DISKIMG) obs=512 count=1 conv=notrunc
dd if=./$(OUTDIR)/loader.bin of=$(DISKIMG) obs=512 seek=1 conv=notrunc
dd if=./kernel.img of=$(DISKIMG) obs=512 seek=10 conv=notrunc
# dd if=./$(OUTDIR)/loader.bin of=$(DISKIMG) obs=512 seek=1 conv=notrunc
# dd if=./$(OUTDIR)/kernel.elf of=$(DISKIMG) obs=512 seek=3 conv=notrunc
test:
bochs -f bochsrc
floppy:
dd if=/dev/zero of=./floppy.img bs=512 count=2880