-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmakefile
67 lines (48 loc) · 1.64 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
66
67
CXX := g++
ASM := nasm
LD := ld
CXXFLAGS := -fomit-frame-pointer -fno-pie -m32 -ffreestanding -c
ASMFLAGS := -f elf32
LDFLAGS := -T os.ld -m i386pe
DEPFLAGS = -MT $@ -MD -MP -MF $(DEPDIR)/$*.Td
TOOLCHAIN-PREFIX :=
#for macOS
#LDFLAGS := -T os.ld
#TOOLCHAIN-PREFIX := i386-elf-
BIN:= os-image.img
SRCS := $(wildcard src/*.asm) $(wildcard src/*.cpp)
BUILDDIR := build
OBJDIR := $(BUILDDIR)/objects
DEPDIR := $(BUILDDIR)/dependencies
OBJS := $(patsubst %, $(OBJDIR)/%.o,$(basename $(SRCS)))
DEPS := $(patsubst %, $(DEPDIR)/%.d,$(basename $(SRCS)))
$(shell mkdir -p $(dir $(OBJS)) >/dev/null)
$(shell mkdir -p $(dir $(DEPS)) >/dev/null)
COMPILE.asm = $(ASM) $(ASMFLAGS) -o $@
COMPILE.cc = $(TOOLCHAIN-PREFIX)$(CXX) $(DEPFLAGS) $(CXXFLAGS) -c -o $@
PRECOMPILE =
POSTCOMPILE = mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d
all: $(BIN)
run: all
qemu-system-i386 -drive format=raw,file=$(BIN)
clean:
rm -f *.dump.asm *.img
rm -r $(BUILDDIR)
$(BIN): $(BUILDDIR)/boot_sect.bin $(OBJS)
$(TOOLCHAIN-PREFIX)$(LD) $(LDFLAGS) -o $(BUILDDIR)/os-built.elf $(OBJS)
$(TOOLCHAIN-PREFIX)objdump -M intel -D $(BUILDDIR)/os-built.elf > os-built.dump.asm
$(TOOLCHAIN-PREFIX)objcopy -O binary $(BUILDDIR)/os-built.elf $(BUILDDIR)/kernel.bin
cat $(BUILDDIR)/boot_sect.bin $(BUILDDIR)/kernel.bin > $(BIN)
dd if=/dev/null of=$(BIN) bs=1 count=0 seek=1474560
$(BUILDDIR)/boot_sect.bin: src/boot/bootloader.asm macros.asm
nasm -o $(BUILDDIR)/boot_sect.bin src/boot/bootloader.asm
$(OBJDIR)/%.o: %.cpp
$(OBJDIR)/%.o: %.cpp $(DEPDIR)/%.d
$(PRECOMPILE)
$(COMPILE.cc) $<
$(POSTCOMPILE)
$(OBJDIR)/%.o: %.asm
$(COMPILE.asm) $<
.PRECIOUS: $(DEPDIR)/%.d
$(DEPDIR)/%.d: ;
-include $(DEPS)